through InitPlayerAvatar

This commit is contained in:
PikalaxALT
2020-03-24 20:59:37 -04:00
parent 8a85485cc2
commit 6c964a6350
10 changed files with 476 additions and 1231 deletions
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -7871,7 +7871,7 @@ sub_8058878: @ 8058878
lsls r1, 30
lsrs r1, 31
movs r0, 0
bl sub_805C7C8
bl GetRivalAvatarGraphicsIdByStateIdAndGender
b _080588C6
.align 2, 0
_080588B4: .4byte gLinkPlayerObjectEvents
-31
View File
@@ -3,37 +3,6 @@
.include "constants/constants.inc"
.section .rodata
.align 2
gUnknown_835B864:: @ 835B864
.4byte MetatileBehavior_IsSouthArrowWarp
.4byte MetatileBehavior_IsNorthArrowWarp
.4byte MetatileBehavior_IsWestArrowWarp
.4byte MetatileBehavior_IsEastArrowWarp
gUnknown_835B874:: @ 835B874
.byte OBJ_EVENT_GFX_RED_NORMAL, OBJ_EVENT_GFX_GREEN_NORMAL
.byte OBJ_EVENT_GFX_RED_BIKE, OBJ_EVENT_GFX_GREEN_BIKE
.byte OBJ_EVENT_GFX_RED_SURF, OBJ_EVENT_GFX_GREEN_SURF
.byte OBJ_EVENT_GFX_RED_ITEM, OBJ_EVENT_GFX_GREEN_ITEM
.byte OBJ_EVENT_GFX_RED_FISH, OBJ_EVENT_GFX_GREEN_FISH
.byte OBJ_EVENT_GFX_RED_ITEM_COPY, OBJ_EVENT_GFX_GREEN_ITEM_COPY
gUnknown_835B880:: @ 835B880
.byte OBJ_EVENT_GFX_RS_BRENDAN
.byte OBJ_EVENT_GFX_RS_MAY
gUnknown_835B882:: @ 835B882
@ Male
.byte OBJ_EVENT_GFX_RED_NORMAL, 0x01
.byte OBJ_EVENT_GFX_RED_BIKE, 0x02
.byte OBJ_EVENT_GFX_RED_SURF, 0x08
@ Female
.byte OBJ_EVENT_GFX_GREEN_NORMAL, 0x01
.byte OBJ_EVENT_GFX_GREEN_BIKE, 0x02
.byte OBJ_EVENT_GFX_GREEN_SURF, 0x08
gUnknown_835B88E:: @ 835B88E
.byte OBJ_EVENT_GFX_RED_VS_SEEKER
.byte OBJ_EVENT_GFX_GREEN_VS_SEEKER
gUnknown_835B890:: @ 835B890
.4byte MetatileBehavior_IsSouthArrowWarp
+2
View File
@@ -8,5 +8,7 @@ s16 GetPlayerSpeed(void);
void MovePlayerOnBike(u8 direction, u16 newKeys, u16 heldKeys);
bool32 IsRunningDisallowed(u8 metatileBehavior);
void Bike_HandleBumpySlopeJump(void);
void Bike_UpdateBikeCounterSpeed(u8 counter);
#endif //GUARD_BIKE_H
+11
View File
@@ -206,5 +206,16 @@ u8 sub_8064008(u32 direction);
u8 GetPlayerRunMovementAction(u32 direction);
u8 GetPlayerRunSlowMovementAction(u32 direction);
u8 GetWalkSlowMovementAction(u32 direction);
u8 sub_80640E4(u32 direction);
u8 GetAcroWheelieFaceDirectionMovementAction(u32 direction);
u8 GetAcroPopWheelieFaceDirectionMovementAction(u32 direction);
u8 GetAcroEndWheelieFaceDirectionMovementAction(u32 direction);
u8 GetAcroWheelieHopFaceDirectionMovementAction(u32 direction);
u8 GetAcroWheelieHopDirectionMovementAction(u32 direction);
u8 GetAcroWheelieJumpDirectionMovementAction(u32 direction);
u8 GetJumpInPlaceTurnAroundMovementAction(u32 direction);
u8 GetAcroWheelieInPlaceDirectionMovementAction(u32 direction);
u8 GetAcroPopWheelieMoveDirectionMovementAction(u32 direction);
u8 GetAcroWheelieMoveDirectionMovementAction(u32 direction);
#endif // GUARD_EVENT_OBJECT_MOVEMENT_H
+3 -2
View File
@@ -36,8 +36,9 @@ bool32 sub_805DAD0(void);
bool32 sub_805DC24(void);
bool8 PartyHasMonWithSurf(void);
bool8 IsPlayerSurfingNorth(void);
void player_get_pos_including_state_based_drift(s16 *x, s16 *y);
u8 player_get_pos_including_state_based_drift(s16 *x, s16 *y);
void sub_805CBE8(void);
u8 sub_805C7C8(u8 state, u8 gender);
u8 GetRivalAvatarGraphicsIdByStateIdAndGender(u8 state, u8 gender);
u8 GetPlayerAvatarGraphicsIdByStateIdAndGender(u8 state, u8 gender);
#endif //GUARD_FIELD_PLAYER_AVATAR_H
+19 -8
View File
@@ -278,14 +278,25 @@ struct ObjectEventGraphicsInfo
/*0x20*/ const union AffineAnimCmd *const *affineAnims;
};
#define PLAYER_AVATAR_FLAG_ON_FOOT (1 << 0)
#define PLAYER_AVATAR_FLAG_MACH_BIKE (1 << 1)
#define PLAYER_AVATAR_FLAG_ACRO_BIKE (1 << 2)
#define PLAYER_AVATAR_FLAG_SURFING (1 << 3)
#define PLAYER_AVATAR_FLAG_4 (1 << 4)
#define PLAYER_AVATAR_FLAG_FORCED_MVMT_DISABLED (1 << 5)
#define PLAYER_AVATAR_FLAG_MVMT_IS_FORCED (1 << 6)
#define PLAYER_AVATAR_FLAG_DASH (1 << 7)
enum {
PLAYER_AVATAR_STATE_NORMAL,
PLAYER_AVATAR_STATE_MACH_BIKE,
PLAYER_AVATAR_STATE_ACRO_BIKE,
PLAYER_AVATAR_STATE_SURFING,
PLAYER_AVATAR_STATE_UNDERWATER,
PLAYER_AVATAR_STATE_FIELD_MOVE,
PLAYER_AVATAR_STATE_FISHING,
PLAYER_AVATAR_STATE_WATERING,
};
#define PLAYER_AVATAR_FLAG_ON_FOOT (1 << PLAYER_AVATAR_STATE_NORMAL)
#define PLAYER_AVATAR_FLAG_MACH_BIKE (1 << PLAYER_AVATAR_STATE_MACH_BIKE)
#define PLAYER_AVATAR_FLAG_ACRO_BIKE (1 << PLAYER_AVATAR_STATE_ACRO_BIKE)
#define PLAYER_AVATAR_FLAG_SURFING (1 << PLAYER_AVATAR_STATE_SURFING)
#define PLAYER_AVATAR_FLAG_4 (1 << PLAYER_AVATAR_STATE_UNDERWATER)
#define PLAYER_AVATAR_FLAG_FORCED_MVMT_DISABLED (1 << PLAYER_AVATAR_STATE_FIELD_MOVE)
#define PLAYER_AVATAR_FLAG_MVMT_IS_FORCED (1 << PLAYER_AVATAR_STATE_FISHING)
#define PLAYER_AVATAR_FLAG_DASH (1 << PLAYER_AVATAR_STATE_WATERING)
enum
{
+10 -10
View File
@@ -4628,7 +4628,7 @@ dirn_to_anim(GetPlayerRunSlowMovementAction, gUnknown_83A6528);
dirn_to_anim(sub_80640E4, gUnknown_83A652D);
dirn_to_anim(GetJump2MovementAction, gUnknown_83A6532);
dirn_to_anim(GetJumpInPlaceMovementAction, gUnknown_83A6537);
dirn_to_anim(sub_8064168, gUnknown_83A653C);
dirn_to_anim(GetJumpInPlaceTurnAroundMovementAction, gUnknown_83A653C);
dirn_to_anim(GetJumpMovementAction, gUnknown_83A6541);
dirn_to_anim(sub_80641C0, gUnknown_83A6546);
dirn_to_anim(sub_80641EC, gUnknown_83A654B);
@@ -4642,15 +4642,15 @@ bool8 ObjectEventFaceOppositeDirection(struct ObjectEvent *objectEvent, u8 direc
return ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(GetOppositeDirection(direction)));
}
dirn_to_anim(sub_80642F4, gUnknown_83A6564);
dirn_to_anim(sub_8064320, gUnknown_83A6569);
dirn_to_anim(sub_806434C, gUnknown_83A656E);
dirn_to_anim(sub_8064378, gUnknown_83A6573);
dirn_to_anim(sub_80643A4, gUnknown_83A6578);
dirn_to_anim(sub_80643D0, gUnknown_83A657D);
dirn_to_anim(sub_80643FC, gUnknown_83A6582);
dirn_to_anim(sub_8064428, gUnknown_83A6587);
dirn_to_anim(sub_8064454, gUnknown_83A658C);
dirn_to_anim(GetAcroWheelieFaceDirectionMovementAction, gUnknown_83A6564);
dirn_to_anim(GetAcroPopWheelieFaceDirectionMovementAction, gUnknown_83A6569);
dirn_to_anim(GetAcroEndWheelieFaceDirectionMovementAction, gUnknown_83A656E);
dirn_to_anim(GetAcroWheelieHopFaceDirectionMovementAction, gUnknown_83A6573);
dirn_to_anim(GetAcroWheelieHopDirectionMovementAction, gUnknown_83A6578);
dirn_to_anim(GetAcroWheelieJumpDirectionMovementAction, gUnknown_83A657D);
dirn_to_anim(GetAcroWheelieInPlaceDirectionMovementAction, gUnknown_83A6582);
dirn_to_anim(GetAcroPopWheelieMoveDirectionMovementAction, gUnknown_83A6587);
dirn_to_anim(GetAcroWheelieMoveDirectionMovementAction, gUnknown_83A658C);
u8 GetOppositeDirection(u8 direction)
{
+429 -5
View File
@@ -5,9 +5,11 @@
#include "event_object_movement.h"
#include "fieldmap.h"
#include "field_control_avatar.h"
#include "field_effect_helpers.h"
#include "field_player_avatar.h"
#include "metatile_behavior.h"
#include "overworld.h"
#include "party_menu.h"
#include "quest_log.h"
#include "quest_log_player.h"
#include "constants/event_object_movement.h"
@@ -15,6 +17,8 @@
#include "constants/songs.h"
#include "constants/flags.h"
#include "constants/metatile_behaviors.h"
#include "constants/species.h"
#include "constants/moves.h"
EWRAM_DATA struct ObjectEvent * gUnknown_2036E30 = NULL;
EWRAM_DATA bool8 gUnknown_2036E34 = FALSE;
@@ -77,15 +81,17 @@ void PlayerGoSpeed2(u8 direction);
void PlayerGoSpeed1(u8 direction);
void PlayerGoSlow(u8 direction);
void PlayerRideWaterCurrent(u8 direction);
void sub_805C438(u8 direction);
void CreateStopSurfingTask(u8 direction);
void StartStrengthAnim(u8 objectEventId, u8 direction);
void PlayerNotOnBikeCollide(u8 direction);
void PlayerFaceDirection(u8 direction);
void PlayerTurnInPlace(u8 direction);
void PlayerJumpLedge(u8 direction);
void PlayCollisionSoundIfNotFacingWarp(u8 direction);
void PlayerGoSpin(u8 direction);
void sub_805C2CC(u8 metatileBehavior);
bool8 MetatileAtCoordsIsWaterTile(s16 x, s16 y);
bool8 player_should_look_direction_be_enforced_upon_movement(void);
void CreateStopSurfingTask(u8 direction);
void StartStrengthAnim(u8 objectEventId, u8 direction);
void sub_805CC40(struct ObjectEvent * playerObjEvent);
void DoPlayerMatJump(void);
void DoPlayerMatSpin(void);
@@ -840,13 +846,13 @@ void PlayerRunSlow(u8 direction)
void PlayerOnBikeCollide(u8 direction)
{
sub_805C438(direction);
PlayCollisionSoundIfNotFacingWarp(direction);
PlayerSetAnimId(GetWalkInPlaceNormalMovementAction(direction), 2);
}
void PlayerNotOnBikeCollide(u8 direction)
{
sub_805C438(direction);
PlayCollisionSoundIfNotFacingWarp(direction);
PlayerSetAnimId(GetStepInPlaceDelay32AnimId(direction), 2);
}
@@ -864,3 +870,421 @@ void PlayerTurnInPlace(u8 direction)
{
PlayerSetAnimId(GetWalkInPlaceSlowMovementAction(direction), 1);
}
void PlayerJumpLedge(u8 direction)
{
PlaySE(SE_DANSA);
PlayerSetAnimId(GetJump2MovementAction(direction), 8);
}
void sub_805C260(void)
{
PlayerSetAnimId(MOVEMENT_ACTION_0x9F, 0);
}
void sub_805C270(void)
{
if (gPlayerAvatar.tileTransitionState == T_TILE_CENTER || gPlayerAvatar.tileTransitionState == T_NOT_MOVING)
{
if (player_should_look_direction_be_enforced_upon_movement())
PlayerForceSetHeldMovement(GetFaceDirectionMovementAction(gObjectEvents[gPlayerAvatar.objectEventId].facingDirection));
}
}
void PlayerGoSpin(u8 direction)
{
PlayerSetAnimId(sub_80640E4(direction), 3);
}
void sub_805C2CC(u8 metatileBehavior)
{
int i;
for (i = 0; sForcedMovementFuncs[i].unk0 != NULL; i++)
{
if (sForcedMovementFuncs[i].unk0(metatileBehavior))
sForcedMovementFuncs[i].unk4();
}
}
void PlayerIdleWheelie(u8 direction)
{
PlayerSetAnimId(GetAcroWheelieFaceDirectionMovementAction(direction), 1);
}
void PlayerStartWheelie(u8 direction)
{
PlayerSetAnimId(GetAcroPopWheelieFaceDirectionMovementAction(direction), 1);
}
void PlayerEndWheelie(u8 direction)
{
PlayerSetAnimId(GetAcroEndWheelieFaceDirectionMovementAction(direction), 1);
}
void PlayerStandingHoppingWheelie(u8 direction)
{
PlaySE(SE_JITE_PYOKO);
PlayerSetAnimId(GetAcroWheelieHopFaceDirectionMovementAction(direction), 1);
}
void PlayerMovingHoppingWheelie(u8 direction)
{
PlaySE(SE_JITE_PYOKO);
PlayerSetAnimId(GetAcroWheelieHopDirectionMovementAction(direction), 2);
}
void PlayerLedgeHoppingWheelie(u8 direction)
{
PlaySE(SE_JITE_PYOKO);
PlayerSetAnimId(GetAcroWheelieJumpDirectionMovementAction(direction), 8);
}
void PlayerAcroTurnJump(u8 direction)
{
PlaySE(SE_JITE_PYOKO);
PlayerSetAnimId(GetJumpInPlaceTurnAroundMovementAction(direction), 1);
}
void PlayerAcroWheelieCollide(u8 direction)
{
PlaySE(SE_WALL_HIT);
PlayerSetAnimId(GetAcroWheelieInPlaceDirectionMovementAction(direction), 2);
}
void sub_805C408(u8 direction)
{
PlayerSetAnimId(GetAcroPopWheelieMoveDirectionMovementAction(direction), 2);
}
void sub_805C420(u8 direction)
{
PlayerSetAnimId(GetAcroWheelieMoveDirectionMovementAction(direction), 2);
}
bool8 (*const sArrowWarpMetatileBehaviorChecks[])(u8) = {
MetatileBehavior_IsSouthArrowWarp,
MetatileBehavior_IsNorthArrowWarp,
MetatileBehavior_IsWestArrowWarp,
MetatileBehavior_IsEastArrowWarp
};
void PlayCollisionSoundIfNotFacingWarp(u8 direction)
{
s16 x, y;
u8 metatileBehavior = gObjectEvents[gPlayerAvatar.objectEventId].currentMetatileBehavior;
if (!sArrowWarpMetatileBehaviorChecks[direction - 1](metatileBehavior))
{
if (direction == DIR_WEST)
{
if (MetatileBehavior_IsUnknownWarp6D(metatileBehavior) || MetatileBehavior_IsUnknownWarp6F(metatileBehavior))
return;
}
if (direction == DIR_EAST)
{
if (MetatileBehavior_IsUnknownWarp6C(metatileBehavior) || MetatileBehavior_IsUnknownWarp6E(metatileBehavior))
return;
}
if (direction == DIR_NORTH)
{
PlayerGetDestCoords(&x, &y);
MoveCoords(DIR_NORTH, &x, &y);
metatileBehavior = MapGridGetMetatileBehaviorAt(x, y);
if (MetatileBehavior_IsWarpDoor(metatileBehavior))
return;
}
PlaySE(SE_WALL_HIT);
}
}
void GetXYCoordsOneStepInFrontOfPlayer(s16 *x, s16 *y)
{
*x = gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x;
*y = gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y;
MoveCoords(GetPlayerFacingDirection(), x, y);
}
void PlayerGetDestCoords(s16 *x, s16 *y)
{
*x = gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x;
*y = gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y;
}
u8 player_get_pos_including_state_based_drift(s16 *x, s16 *y)
{
struct ObjectEvent *object = &gObjectEvents[gPlayerAvatar.objectEventId];
if (object->heldMovementActive && !object->heldMovementFinished && !gSprites[object->spriteId].data[2])
{
*x = object->currentCoords.x;
*y = object->currentCoords.y;
switch (object->movementActionId)
{
case MOVEMENT_ACTION_WALK_NORMAL_DOWN:
case MOVEMENT_ACTION_PLAYER_RUN_DOWN:
(*y)++;
return TRUE;
case MOVEMENT_ACTION_WALK_NORMAL_UP:
case MOVEMENT_ACTION_PLAYER_RUN_UP:
(*y)--;
return TRUE;
case MOVEMENT_ACTION_WALK_NORMAL_LEFT:
case MOVEMENT_ACTION_PLAYER_RUN_LEFT:
(*x)--;
return TRUE;
case MOVEMENT_ACTION_WALK_NORMAL_RIGHT:
case MOVEMENT_ACTION_PLAYER_RUN_RIGHT:
(*x)++;
return TRUE;
}
}
*x = -1;
*y = -1;
return FALSE;
}
u8 GetPlayerFacingDirection(void)
{
return gObjectEvents[gPlayerAvatar.objectEventId].facingDirection;
}
u8 GetPlayerMovementDirection(void)
{
return gObjectEvents[gPlayerAvatar.objectEventId].movementDirection;
}
u8 PlayerGetZCoord(void)
{
return gObjectEvents[gPlayerAvatar.objectEventId].previousElevation;
}
void MovePlayerToMapCoords(s16 x, s16 y)
{
MoveObjectEventToMapCoords(&gObjectEvents[gPlayerAvatar.objectEventId], x, y);
}
u8 TestPlayerAvatarFlags(u8 bm)
{
return gPlayerAvatar.flags & bm;
}
u8 GetPlayerAvatarFlags(void)
{
return gPlayerAvatar.flags;
}
u8 GetPlayerAvatarObjectId(void)
{
return gPlayerAvatar.spriteId;
}
void sub_805C774(void)
{
ForcedMovement_None();
}
void sub_805C780(void)
{
struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
npc_clear_strange_bits(playerObjEvent);
SetObjectEventDirection(playerObjEvent, playerObjEvent->facingDirection);
if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE))
{
Bike_HandleBumpySlopeJump();
Bike_UpdateBikeCounterSpeed(0);
}
}
const u8 sPlayerAvatarGfxIds[][2] = {
{OBJ_EVENT_GFX_RED_NORMAL, OBJ_EVENT_GFX_GREEN_NORMAL},
{OBJ_EVENT_GFX_RED_BIKE, OBJ_EVENT_GFX_GREEN_BIKE},
{OBJ_EVENT_GFX_RED_SURF, OBJ_EVENT_GFX_GREEN_SURF},
{OBJ_EVENT_GFX_RED_ITEM, OBJ_EVENT_GFX_GREEN_ITEM},
{OBJ_EVENT_GFX_RED_FISH, OBJ_EVENT_GFX_GREEN_FISH},
{OBJ_EVENT_GFX_RED_ITEM_COPY, OBJ_EVENT_GFX_GREEN_ITEM_COPY},
};
const u8 sHoennLinkPartnerGfxIds[] = {
OBJ_EVENT_GFX_RS_BRENDAN,
OBJ_EVENT_GFX_RS_MAY
};
u8 GetRivalAvatarGraphicsIdByStateIdAndGender(u8 state, u8 gender)
{
return GetPlayerAvatarGraphicsIdByStateIdAndGender(state, gender);
}
u8 GetPlayerAvatarGraphicsIdByStateIdAndGender(u8 state, u8 gender)
{
return sPlayerAvatarGfxIds[state][gender];
}
u8 GetHoennLinkPartnerGraphicsIdByGender(u8 gender)
{
return sHoennLinkPartnerGfxIds[gender];
}
u8 GetPlayerAvatarGraphicsIdByStateId(u8 state)
{
return GetPlayerAvatarGraphicsIdByStateIdAndGender(state, gPlayerAvatar.gender);
}
u8 GetPlayerAvatarGenderByGraphicsId(u8 gfxId)
{
switch (gfxId)
{
case OBJ_EVENT_GFX_GREEN_NORMAL:
case OBJ_EVENT_GFX_GREEN_BIKE:
case OBJ_EVENT_GFX_GREEN_SURF:
case OBJ_EVENT_GFX_GREEN_ITEM:
case OBJ_EVENT_GFX_GREEN_FISH:
return FEMALE;
default:
return MALE;
}
}
bool8 PartyHasMonWithSurf(void)
{
u8 i;
if (!TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
{
for (i = 0; i < PARTY_SIZE; i++)
{
if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) == SPECIES_NONE)
break;
if (MonKnowsMove(&gPlayerParty[i], MOVE_SURF))
return TRUE;
}
}
return FALSE;
}
bool8 IsPlayerSurfingNorth(void)
{
if (GetPlayerMovementDirection() == DIR_NORTH && TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
return TRUE;
else
return FALSE;
}
bool8 IsPlayerFacingSurfableFishableWater(void)
{
struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
s16 x = playerObjEvent->currentCoords.x;
s16 y = playerObjEvent->currentCoords.y;
MoveCoords(playerObjEvent->facingDirection, &x, &y);
if (GetCollisionAtCoords(playerObjEvent, x, y, playerObjEvent->facingDirection) == COLLISION_ELEVATION_MISMATCH
&& PlayerGetZCoord() == 3
&& MetatileAtCoordsIsWaterTile(x, y) == TRUE)
return TRUE;
else
return FALSE;
}
bool8 MetatileAtCoordsIsWaterTile(s16 x, s16 y)
{
return TestMetatileAttributeBit(MapGridGetMetatileAttributeAt(x, y, METATILE_ATTRIBUTE_TERRAIN), TILE_TERRAIN_WATER);
}
void ClearPlayerAvatarInfo(void)
{
gPlayerAvatar = (struct PlayerAvatar){};
}
void SetPlayerAvatarStateMask(u8 flags)
{
gPlayerAvatar.flags &= (PLAYER_AVATAR_FLAG_DASH | PLAYER_AVATAR_FLAG_MVMT_IS_FORCED | PLAYER_AVATAR_FLAG_FORCED_MVMT_DISABLED);
gPlayerAvatar.flags |= flags;
}
const u8 gUnknown_835B882[][3][2] = {
// Male
{
{OBJ_EVENT_GFX_RED_NORMAL, PLAYER_AVATAR_FLAG_ON_FOOT},
{OBJ_EVENT_GFX_RED_BIKE, PLAYER_AVATAR_FLAG_MACH_BIKE},
{OBJ_EVENT_GFX_RED_SURF, PLAYER_AVATAR_FLAG_SURFING},
},
// Female
{
{OBJ_EVENT_GFX_GREEN_NORMAL, PLAYER_AVATAR_FLAG_ON_FOOT},
{OBJ_EVENT_GFX_GREEN_BIKE, PLAYER_AVATAR_FLAG_MACH_BIKE},
{OBJ_EVENT_GFX_GREEN_SURF, PLAYER_AVATAR_FLAG_SURFING},
}
};
u8 GetPlayerAvatarStateTransitionByGraphicsId(u8 graphicsId, u8 gender)
{
u8 i;
for (i = 0; i < NELEMS(*gUnknown_835B882); i++)
{
if (gUnknown_835B882[gender][i][0] == graphicsId)
return gUnknown_835B882[gender][i][1];
}
return 1;
}
u8 GetPlayerAvatarGraphicsIdByCurrentState(void)
{
u8 i;
u8 r5 = gPlayerAvatar.flags;
for (i = 0; i < NELEMS(*gUnknown_835B882); i++)
{
if (gUnknown_835B882[gPlayerAvatar.gender][i][1] & r5)
return gUnknown_835B882[gPlayerAvatar.gender][i][0];
}
return 0;
}
const u8 gUnknown_835B88E[] = {
OBJ_EVENT_GFX_RED_VS_SEEKER,
OBJ_EVENT_GFX_GREEN_VS_SEEKER
};
void SetPlayerAvatarExtraStateTransition(u8 graphicsId, u8 b)
{
u8 unk = GetPlayerAvatarStateTransitionByGraphicsId(graphicsId, gPlayerAvatar.gender);
gPlayerAvatar.unk1 |= unk | b;
DoPlayerAvatarTransition();
}
void InitPlayerAvatar(s16 x, s16 y, u8 direction, u8 gender)
{
struct ObjectEventTemplate playerObjEventTemplate;
u8 objectEventId;
struct ObjectEvent *objectEvent;
playerObjEventTemplate.localId = OBJ_EVENT_ID_PLAYER;
playerObjEventTemplate.graphicsId = GetPlayerAvatarGraphicsIdByStateIdAndGender(PLAYER_AVATAR_STATE_NORMAL, gender);
playerObjEventTemplate.x = x - 7;
playerObjEventTemplate.y = y - 7;
playerObjEventTemplate.elevation = 0;
playerObjEventTemplate.movementType = MOVEMENT_TYPE_PLAYER;
playerObjEventTemplate.movementRangeX = 0;
playerObjEventTemplate.movementRangeY = 0;
playerObjEventTemplate.trainerType = 0;
playerObjEventTemplate.trainerRange_berryTreeId = 0;
playerObjEventTemplate.script = NULL;
playerObjEventTemplate.flagId = 0;
objectEventId = SpawnSpecialObjectEvent(&playerObjEventTemplate);
objectEvent = &gObjectEvents[objectEventId];
objectEvent->isPlayer = 1;
objectEvent->warpArrowSpriteId = CreateWarpArrowSprite();
ObjectEventTurn(objectEvent, direction);
ClearPlayerAvatarInfo();
gPlayerAvatar.runningState = NOT_MOVING;
gPlayerAvatar.tileTransitionState = T_NOT_MOVING;
gPlayerAvatar.objectEventId = objectEventId;
gPlayerAvatar.spriteId = objectEvent->spriteId;
gPlayerAvatar.gender = gender;
SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_FORCED_MVMT_DISABLED | PLAYER_AVATAR_FLAG_ON_FOOT);
}
+1 -1
View File
@@ -1300,7 +1300,7 @@ static void NamingScreen_CreatePlayerIcon(void)
u8 rivalGfxId;
u8 spriteId;
rivalGfxId = sub_805C7C8(0, sNamingScreenData->monSpecies);
rivalGfxId = GetRivalAvatarGraphicsIdByStateIdAndGender(0, sNamingScreenData->monSpecies);
spriteId = AddPseudoObjectEvent(rivalGfxId, SpriteCallbackDummy, 0x38, 0x25, 0);
gSprites[spriteId].oam.priority = 3;
StartSpriteAnim(&gSprites[spriteId], 4);