Moved follower species into a proper union.

This commit is contained in:
Ariel Antonitis 2020-06-24 00:19:57 -04:00
parent 6969f3d6f7
commit 38f538b755
3 changed files with 11 additions and 13 deletions

View File

@ -207,8 +207,10 @@ struct ObjectEvent
/*0x1F*/ u8 previousMetatileBehavior;
/*0x20*/ u8 previousMovementDirection;
/*0x21*/ u8 directionSequenceIndex;
/*0x22*/ u8 playerCopyableMovement;
u8 unused;
/*0x22*/ union __attribute__((packed)) {
u8 playerCopyableMovement;
u16 species;
} extra;
/*size = 0x24*/
};

View File

@ -1617,11 +1617,10 @@ static const struct ObjectEventGraphicsInfo * SpeciesToGraphicsInfo(u16 species)
// Set graphics & sprite for a follower object event by species
static void FollowerSetGraphics(struct ObjectEvent *objectEvent, u16 species) {
const struct ObjectEventGraphicsInfo *graphicsInfo = SpeciesToGraphicsInfo(species);
u16 *oldSpecies = (u16*) &objectEvent->playerCopyableMovement;
objectEvent->graphicsId = OBJ_EVENT_GFX_OW_MON;
ObjectEventSetGraphics(objectEvent, SpeciesToGraphicsInfo(species));
objectEvent->graphicsId = OBJ_EVENT_GFX_OW_MON;
*oldSpecies = species;
objectEvent->extra.species = species;
if (graphicsInfo->paletteTag1 == OBJ_EVENT_PAL_TAG_DYNAMIC) { // Use palette from species palette table
struct Sprite *sprite = &gSprites[objectEvent->spriteId];
const struct CompressedSpritePalette *spritePalette = &gMonPaletteTable[species];
@ -1639,7 +1638,6 @@ void UpdateFollowingPokemon(void) { // Update following pokemon if any
struct Pokemon *mon = GetFirstLiveMon();
struct Sprite *sprite;
u16 species;
u16 *oldSpecies;
// Avoid spawning large (64x64) follower pokemon inside buildings
if (mon && !(gMapHeader.mapType == MAP_TYPE_INDOOR && SpeciesToGraphicsInfo(GetMonData(mon, MON_DATA_SPECIES))->width == 64)) {
if (objectEvent == NULL) { // Spawn follower
@ -1656,14 +1654,13 @@ void UpdateFollowingPokemon(void) { // Update following pokemon if any
}
sprite = &gSprites[objectEvent->spriteId];
species = GetMonData(mon, MON_DATA_SPECIES);
oldSpecies = (u16*) &objectEvent->playerCopyableMovement;
if (species != *oldSpecies) { // Move to player and set invisible
if (species != objectEvent->extra.species) { // Move to player and set invisible
MoveObjectEventToMapCoords(objectEvent, gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x, gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y);
objectEvent->invisible = TRUE;
}
FollowerSetGraphics(objectEvent, species);
sprite->data[6] = 0; // set animation data
*oldSpecies = sprite->data[7] = species; // set species
objectEvent->extra.species = sprite->data[7] = species; // set species
} else {
RemoveFollowingPokemon();
}
@ -1860,8 +1857,7 @@ static void sub_808E1B8(u8 objectEventId, s16 x, s16 y)
sprite->data[0] = objectEventId;
objectEvent->spriteId = spriteId;
if (objectEvent->graphicsId == OBJ_EVENT_GFX_OW_MON) { // Set pokemon graphics
u16 *species = (u16*) &objectEvent->playerCopyableMovement;
FollowerSetGraphics(objectEvent, *species);
FollowerSetGraphics(objectEvent, objectEvent->extra.species);
}
if (!objectEvent->inanimate && objectEvent->movementType != MOVEMENT_TYPE_PLAYER)
{
@ -5111,7 +5107,7 @@ void SetTrainerMovementType(struct ObjectEvent *objectEvent, u8 movementType)
{
objectEvent->movementType = movementType;
objectEvent->directionSequenceIndex = 0;
objectEvent->playerCopyableMovement = 0;
objectEvent->extra.playerCopyableMovement = 0;
gSprites[objectEvent->spriteId].callback = sMovementTypeCallbacks[movementType];
gSprites[objectEvent->spriteId].data[1] = 0;
}

View File

@ -931,12 +931,12 @@ static bool8 PlayerCheckIfAnimFinishedOrInactive(void)
static void PlayerSetCopyableMovement(u8 a)
{
gObjectEvents[gPlayerAvatar.objectEventId].playerCopyableMovement = a;
gObjectEvents[gPlayerAvatar.objectEventId].extra.playerCopyableMovement = a;
}
u8 PlayerGetCopyableMovement(void)
{
return gObjectEvents[gPlayerAvatar.objectEventId].playerCopyableMovement;
return gObjectEvents[gPlayerAvatar.objectEventId].extra.playerCopyableMovement;
}
static void PlayerForceSetHeldMovement(u8 movementActionId)