Simplify gTrainerSprites (#4140)

* Simplified y_offset equations

* Removed trainer pic animation from gTrainerSprites

* Used metaprogram to simplify trainer sprites without mugshots

* Incorporated comments

---------

Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com>
This commit is contained in:
Frank DeBlasio 2024-02-06 16:24:36 -05:00 committed by GitHub
parent dd3228aa14
commit 7f50c0b9c3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 113 additions and 118 deletions

View file

@ -123,6 +123,7 @@ extern const union AffineAnimCmd *const gAffineAnims_BattleSpriteContest[];
extern const union AnimCmd sAnim_GeneralFrame0[];
extern const union AnimCmd sAnim_GeneralFrame3[];
extern const union AnimCmd *const gAnims_MonPic[];
extern const union AnimCmd *const sAnims_Trainer[];
extern const struct TrainerSprite gTrainerSprites[];
extern const struct TrainerBacksprite gTrainerBacksprites[];

View file

@ -462,9 +462,7 @@ static void LinkOpponentHandleDrawTrainerPic(u32 battler)
}
}
BtlController_HandleDrawTrainerPic(battler, trainerPicId, TRUE,
xPos, 40 + 4 * (8 - gTrainerSprites[trainerPicId].y_offset),
-1);
BtlController_HandleDrawTrainerPic(battler, trainerPicId, TRUE, xPos, 40, -1);
}
static void LinkOpponentHandleTrainerSlide(u32 battler)

View file

@ -484,9 +484,7 @@ static void OpponentHandleDrawTrainerPic(u32 battler)
xPos = 176;
}
BtlController_HandleDrawTrainerPic(battler, trainerPicId, TRUE,
xPos, 40 + 4 * (8 - gTrainerSprites[trainerPicId].y_offset),
-1);
BtlController_HandleDrawTrainerPic(battler, trainerPicId, TRUE, xPos, 40, -1);
}
static void OpponentHandleTrainerSlide(u32 battler)

View file

@ -1882,7 +1882,7 @@ static void PlayerHandleDrawTrainerPic(u32 battler)
if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId < TRAINER_PARTNER(PARTNER_NONE))
{
xPos = 90;
yPos = (8 - gTrainerSprites[trainerPicId].y_offset) * 4 + 80;
yPos = 80;
}
else
{

View file

@ -307,13 +307,13 @@ static void PlayerPartnerHandleDrawTrainerPic(u32 battler)
{
trainerPicId = gTrainers[gPartnerTrainerId].trainerPic;
xPos = 60;
yPos = (8 - gTrainerSprites[trainerPicId].y_offset) * 4 + 80;
yPos = 80;
}
else
{
trainerPicId = GetFrontierTrainerFrontSpriteId(gPartnerTrainerId);
xPos = 32;
yPos = (8 - gTrainerSprites[trainerPicId].y_offset) * 4 + 80;
yPos = 80;
}
// Use back pic only if the partner Steven or is custom.

View file

@ -420,9 +420,7 @@ static void RecordedOpponentHandleDrawTrainerPic(u32 battler)
}
}
BtlController_HandleDrawTrainerPic(battler, trainerPicId, TRUE,
xPos, 40 + 4 * (8 - gTrainerSprites[trainerPicId].y_offset),
-1);
BtlController_HandleDrawTrainerPic(battler, trainerPicId, TRUE, xPos, 40, -1);
}
static void RecordedOpponentHandleTrainerSlideBack(u32 battler)

View file

@ -393,7 +393,7 @@ static void RecordedPlayerHandleDrawTrainerPic(u32 battler)
if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
{
xPos = 90;
yPos = (8 - gTrainerSprites[trainerPicId].y_offset) * 4 + 80;
yPos = 80;
}
else
{

View file

@ -2542,10 +2542,7 @@ void BtlController_HandleTrainerSlide(u32 battler, u32 trainerPicId)
{
DecompressTrainerFrontPic(trainerPicId, battler);
SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(battler));
gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate,
176,
(8 - gTrainerSprites[trainerPicId].y_offset) * 4 + 40,
30);
gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, 176, 40, 30);
gSprites[gBattlerSpriteIds[battler]].oam.affineParam = trainerPicId;
gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerSprites[trainerPicId].palette.tag);
gSprites[gBattlerSpriteIds[battler]].x2 = 96;

View file

@ -220,5 +220,9 @@ const union AnimCmd *const gAnims_MonPic[MAX_MON_PIC_FRAMES] =
sAnim_MonPic_1,
};
const union AnimCmd *const sAnims_Trainer[] ={
sAnim_GeneralFrame0,
};
#include "data/trainer_parties.h"
#include "data/trainers.h"

View file

@ -292,116 +292,115 @@ const u8 gTrainerBackPic_Steven[] = INCBIN_U8("graphics/trainers/back_pics/steve
const u32 gTrainerBackPicPalette_Red[] = INCBIN_U32("graphics/trainers/back_pics/red.gbapal.lz");
const u32 gTrainerBackPicPalette_Leaf[] = INCBIN_U32("graphics/trainers/back_pics/leaf.gbapal.lz");
static const union AnimCmd *const sAnims_Trainer[] ={
sAnim_GeneralFrame0,
};
#define TRAINER_SPRITE(trainerPic, file, x, y, rotation) \
// The first two parameters invoke a front pic and palette by
// calling a "TRAINER_PIC" constant (e.g. TRAINER_PIC_HIKER), and
// gTrainerFrontPic/gTrainerPalette pointers, (e.g "gTrainerFrontPic_Hiker" and "gTrainerPalette_Hiker").
// The last three parameters control the X and Y coordinates and rotation of the mugshot on the screen.
// They default to 0, 0, and 0x200 which are default values used by the majority of the game's trainer sprites.
#define TRAINER_SPRITE(trainerPic, file, ...) \
[TRAINER_PIC_##trainerPic] = \
{ \
.y_offset = 8, \
.frontPic = {gTrainerFrontPic_##file, TRAINER_PIC_SIZE, TRAINER_PIC_##trainerPic},\
.palette = {gTrainerPalette_##file, TRAINER_PIC_##trainerPic}, \
.animation = sAnims_Trainer, \
.mugshotCoords = {x, y}, \
.mugshotRotation = rotation, \
.mugshotCoords = {DEFAULT(0, __VA_ARGS__), DEFAULT_2(0, __VA_ARGS__)}, \
.mugshotRotation = DEFAULT_3(0x200, __VA_ARGS__), \
}
const struct TrainerSprite gTrainerSprites[] =
{
TRAINER_SPRITE(HIKER, Hiker, 0, 0, 0x200),
TRAINER_SPRITE(AQUA_GRUNT_M, AquaGruntM, 0, 0, 0x200),
TRAINER_SPRITE(POKEMON_BREEDER_F, PokemonBreederF, 0, 0, 0x200),
TRAINER_SPRITE(COOLTRAINER_M, CoolTrainerM, 0, 0, 0x200),
TRAINER_SPRITE(BIRD_KEEPER, BirdKeeper, 0, 0, 0x200),
TRAINER_SPRITE(COLLECTOR, Collector, 0, 0, 0x200),
TRAINER_SPRITE(AQUA_GRUNT_F, AquaGruntF, 0, 0, 0x200),
TRAINER_SPRITE(SWIMMER_M, SwimmerM, 0, 0, 0x200),
TRAINER_SPRITE(MAGMA_GRUNT_M, MagmaGruntM, 0, 0, 0x200),
TRAINER_SPRITE(EXPERT_M, ExpertM, 0, 0, 0x200),
TRAINER_SPRITE(AQUA_ADMIN_M, AquaAdminM, 0, 0, 0x200),
TRAINER_SPRITE(BLACK_BELT, BlackBelt, 0, 0, 0x200),
TRAINER_SPRITE(AQUA_ADMIN_F, AquaAdminF, 0, 0, 0x200),
TRAINER_SPRITE(AQUA_LEADER_ARCHIE, AquaLeaderArchie, 0, 0, 0x200),
TRAINER_SPRITE(HEX_MANIAC, HexManiac, 0, 0, 0x200),
TRAINER_SPRITE(AROMA_LADY, AromaLady, 0, 0, 0x200),
TRAINER_SPRITE(RUIN_MANIAC, RuinManiac, 0, 0, 0x200),
TRAINER_SPRITE(INTERVIEWER, Interviewer, 0, 0, 0x200),
TRAINER_SPRITE(TUBER_F, TuberF, 0, 0, 0x200),
TRAINER_SPRITE(TUBER_M, TuberM, 0, 0, 0x200),
TRAINER_SPRITE(COOLTRAINER_F, CoolTrainerF, 0, 0, 0x200),
TRAINER_SPRITE(LADY, Lady, 0, 0, 0x200),
TRAINER_SPRITE(BEAUTY, Beauty, 0, 0, 0x200),
TRAINER_SPRITE(RICH_BOY, RichBoy, 0, 0, 0x200),
TRAINER_SPRITE(EXPERT_F, ExpertF, 0, 0, 0x200),
TRAINER_SPRITE(POKEMANIAC, Pokemaniac, 0, 0, 0x200),
TRAINER_SPRITE(MAGMA_GRUNT_F, MagmaGruntF, 0, 0, 0x200),
TRAINER_SPRITE(GUITARIST, Guitarist, 0, 0, 0x200),
TRAINER_SPRITE(KINDLER, Kindler, 0, 0, 0x200),
TRAINER_SPRITE(CAMPER, Camper, 0, 0, 0x200),
TRAINER_SPRITE(PICNICKER, Picnicker, 0, 0, 0x200),
TRAINER_SPRITE(BUG_MANIAC, BugManiac, 0, 0, 0x200),
TRAINER_SPRITE(POKEMON_BREEDER_M, PokemonBreederM, 0, 0, 0x200),
TRAINER_SPRITE(PSYCHIC_M, PsychicM, 0, 0, 0x200),
TRAINER_SPRITE(PSYCHIC_F, PsychicF, 0, 0, 0x200),
TRAINER_SPRITE(GENTLEMAN, Gentleman, 0, 0, 0x200),
TRAINER_SPRITE(ELITE_FOUR_SIDNEY, EliteFourSidney, 0, 0, 0x200),
TRAINER_SPRITE(ELITE_FOUR_PHOEBE, EliteFourPhoebe, 0, 0, 0x200),
TRAINER_SPRITE(HIKER, Hiker),
TRAINER_SPRITE(AQUA_GRUNT_M, AquaGruntM),
TRAINER_SPRITE(POKEMON_BREEDER_F, PokemonBreederF),
TRAINER_SPRITE(COOLTRAINER_M, CoolTrainerM),
TRAINER_SPRITE(BIRD_KEEPER, BirdKeeper),
TRAINER_SPRITE(COLLECTOR, Collector),
TRAINER_SPRITE(AQUA_GRUNT_F, AquaGruntF),
TRAINER_SPRITE(SWIMMER_M, SwimmerM),
TRAINER_SPRITE(MAGMA_GRUNT_M, MagmaGruntM),
TRAINER_SPRITE(EXPERT_M, ExpertM),
TRAINER_SPRITE(AQUA_ADMIN_M, AquaAdminM),
TRAINER_SPRITE(BLACK_BELT, BlackBelt),
TRAINER_SPRITE(AQUA_ADMIN_F, AquaAdminF),
TRAINER_SPRITE(AQUA_LEADER_ARCHIE, AquaLeaderArchie),
TRAINER_SPRITE(HEX_MANIAC, HexManiac),
TRAINER_SPRITE(AROMA_LADY, AromaLady),
TRAINER_SPRITE(RUIN_MANIAC, RuinManiac),
TRAINER_SPRITE(INTERVIEWER, Interviewer),
TRAINER_SPRITE(TUBER_F, TuberF),
TRAINER_SPRITE(TUBER_M, TuberM),
TRAINER_SPRITE(COOLTRAINER_F, CoolTrainerF),
TRAINER_SPRITE(LADY, Lady),
TRAINER_SPRITE(BEAUTY, Beauty),
TRAINER_SPRITE(RICH_BOY, RichBoy),
TRAINER_SPRITE(EXPERT_F, ExpertF),
TRAINER_SPRITE(POKEMANIAC, Pokemaniac),
TRAINER_SPRITE(MAGMA_GRUNT_F, MagmaGruntF),
TRAINER_SPRITE(GUITARIST, Guitarist),
TRAINER_SPRITE(KINDLER, Kindler),
TRAINER_SPRITE(CAMPER, Camper),
TRAINER_SPRITE(PICNICKER, Picnicker),
TRAINER_SPRITE(BUG_MANIAC, BugManiac),
TRAINER_SPRITE(POKEMON_BREEDER_M, PokemonBreederM),
TRAINER_SPRITE(PSYCHIC_M, PsychicM),
TRAINER_SPRITE(PSYCHIC_F, PsychicF),
TRAINER_SPRITE(GENTLEMAN, Gentleman),
TRAINER_SPRITE(ELITE_FOUR_SIDNEY, EliteFourSidney),
TRAINER_SPRITE(ELITE_FOUR_PHOEBE, EliteFourPhoebe),
TRAINER_SPRITE(ELITE_FOUR_GLACIA, EliteFourGlacia, -4, 4, 0x1B0),
TRAINER_SPRITE(ELITE_FOUR_DRAKE, EliteFourDrake, 0, 5, 0x1A0),
TRAINER_SPRITE(LEADER_ROXANNE, LeaderRoxanne, 0, 0, 0x200),
TRAINER_SPRITE(LEADER_BRAWLY, LeaderBrawly, 0, 0, 0x200),
TRAINER_SPRITE(LEADER_WATTSON, LeaderWattson, 0, 0, 0x200),
TRAINER_SPRITE(LEADER_FLANNERY, LeaderFlannery, 0, 0, 0x200),
TRAINER_SPRITE(LEADER_NORMAN, LeaderNorman, 0, 0, 0x200),
TRAINER_SPRITE(LEADER_WINONA, LeaderWinona, 0, 0, 0x200),
TRAINER_SPRITE(LEADER_TATE_AND_LIZA, LeaderTateAndLiza, 0, 0, 0x200),
TRAINER_SPRITE(LEADER_JUAN, LeaderJuan, 0, 0, 0x200),
TRAINER_SPRITE(SCHOOL_KID_M, SchoolKidM, 0, 0, 0x200),
TRAINER_SPRITE(SCHOOL_KID_F, SchoolKidF, 0, 0, 0x200),
TRAINER_SPRITE(SR_AND_JR, SrAndJr, 0, 0, 0x200),
TRAINER_SPRITE(POKEFAN_M, PokefanM, 0, 0, 0x200),
TRAINER_SPRITE(POKEFAN_F, PokefanF, 0, 0, 0x200),
TRAINER_SPRITE(YOUNGSTER, Youngster, 0, 0, 0x200),
TRAINER_SPRITE(LEADER_ROXANNE, LeaderRoxanne),
TRAINER_SPRITE(LEADER_BRAWLY, LeaderBrawly),
TRAINER_SPRITE(LEADER_WATTSON, LeaderWattson),
TRAINER_SPRITE(LEADER_FLANNERY, LeaderFlannery),
TRAINER_SPRITE(LEADER_NORMAN, LeaderNorman),
TRAINER_SPRITE(LEADER_WINONA, LeaderWinona),
TRAINER_SPRITE(LEADER_TATE_AND_LIZA, LeaderTateAndLiza),
TRAINER_SPRITE(LEADER_JUAN, LeaderJuan),
TRAINER_SPRITE(SCHOOL_KID_M, SchoolKidM),
TRAINER_SPRITE(SCHOOL_KID_F, SchoolKidF),
TRAINER_SPRITE(SR_AND_JR, SrAndJr),
TRAINER_SPRITE(POKEFAN_M, PokefanM),
TRAINER_SPRITE(POKEFAN_F, PokefanF),
TRAINER_SPRITE(YOUNGSTER, Youngster),
TRAINER_SPRITE(CHAMPION_WALLACE, ChampionWallace, -8, 7, 0x188),
TRAINER_SPRITE(FISHERMAN, Fisherman, 0, 0, 0x200),
TRAINER_SPRITE(CYCLING_TRIATHLETE_M, CyclingTriathleteM, 0, 0, 0x200),
TRAINER_SPRITE(CYCLING_TRIATHLETE_F, CyclingTriathleteF, 0, 0, 0x200),
TRAINER_SPRITE(RUNNING_TRIATHLETE_M, RunningTriathleteM, 0, 0, 0x200),
TRAINER_SPRITE(RUNNING_TRIATHLETE_F, RunningTriathleteF, 0, 0, 0x200),
TRAINER_SPRITE(SWIMMING_TRIATHLETE_M, SwimmingTriathleteM, 0, 0, 0x200),
TRAINER_SPRITE(SWIMMING_TRIATHLETE_F, SwimmingTriathleteF, 0, 0, 0x200),
TRAINER_SPRITE(DRAGON_TAMER, DragonTamer, 0, 0, 0x200),
TRAINER_SPRITE(NINJA_BOY, NinjaBoy, 0, 0, 0x200),
TRAINER_SPRITE(BATTLE_GIRL, BattleGirl, 0, 0, 0x200),
TRAINER_SPRITE(PARASOL_LADY, ParasolLady, 0, 0, 0x200),
TRAINER_SPRITE(SWIMMER_F, SwimmerF, 0, 0, 0x200),
TRAINER_SPRITE(TWINS, Twins, 0, 0, 0x200),
TRAINER_SPRITE(SAILOR, Sailor, 0, 0, 0x200),
TRAINER_SPRITE(MAGMA_ADMIN, MagmaAdmin, 0, 0, 0x200),
TRAINER_SPRITE(WALLY, Wally, 0, 0, 0x200),
TRAINER_SPRITE(BRENDAN, Brendan, 0, 0, 0x200),
TRAINER_SPRITE(MAY, May, 0, 0, 0x200),
TRAINER_SPRITE(BUG_CATCHER, BugCatcher, 0, 0, 0x200),
TRAINER_SPRITE(POKEMON_RANGER_M, PokemonRangerM, 0, 0, 0x200),
TRAINER_SPRITE(POKEMON_RANGER_F, PokemonRangerF, 0, 0, 0x200),
TRAINER_SPRITE(MAGMA_LEADER_MAXIE, MagmaLeaderMaxie, 0, 0, 0x200),
TRAINER_SPRITE(LASS, Lass, 0, 0, 0x200),
TRAINER_SPRITE(YOUNG_COUPLE, YoungCouple, 0, 0, 0x200),
TRAINER_SPRITE(OLD_COUPLE, OldCouple, 0, 0, 0x200),
TRAINER_SPRITE(SIS_AND_BRO, SisAndBro, 0, 0, 0x200),
TRAINER_SPRITE(FISHERMAN, Fisherman),
TRAINER_SPRITE(CYCLING_TRIATHLETE_M, CyclingTriathleteM),
TRAINER_SPRITE(CYCLING_TRIATHLETE_F, CyclingTriathleteF),
TRAINER_SPRITE(RUNNING_TRIATHLETE_M, RunningTriathleteM),
TRAINER_SPRITE(RUNNING_TRIATHLETE_F, RunningTriathleteF),
TRAINER_SPRITE(SWIMMING_TRIATHLETE_M, SwimmingTriathleteM),
TRAINER_SPRITE(SWIMMING_TRIATHLETE_F, SwimmingTriathleteF),
TRAINER_SPRITE(DRAGON_TAMER, DragonTamer),
TRAINER_SPRITE(NINJA_BOY, NinjaBoy),
TRAINER_SPRITE(BATTLE_GIRL, BattleGirl),
TRAINER_SPRITE(PARASOL_LADY, ParasolLady),
TRAINER_SPRITE(SWIMMER_F, SwimmerF),
TRAINER_SPRITE(TWINS, Twins),
TRAINER_SPRITE(SAILOR, Sailor),
TRAINER_SPRITE(MAGMA_ADMIN, MagmaAdmin),
TRAINER_SPRITE(WALLY, Wally),
TRAINER_SPRITE(BRENDAN, Brendan),
TRAINER_SPRITE(MAY, May),
TRAINER_SPRITE(BUG_CATCHER, BugCatcher),
TRAINER_SPRITE(POKEMON_RANGER_M, PokemonRangerM),
TRAINER_SPRITE(POKEMON_RANGER_F, PokemonRangerF),
TRAINER_SPRITE(MAGMA_LEADER_MAXIE, MagmaLeaderMaxie),
TRAINER_SPRITE(LASS, Lass),
TRAINER_SPRITE(YOUNG_COUPLE, YoungCouple),
TRAINER_SPRITE(OLD_COUPLE, OldCouple),
TRAINER_SPRITE(SIS_AND_BRO, SisAndBro),
TRAINER_SPRITE(STEVEN, Steven, 0, 7, 0x188),
TRAINER_SPRITE(SALON_MAIDEN_ANABEL, SalonMaidenAnabel, 0, 0, 0x200),
TRAINER_SPRITE(DOME_ACE_TUCKER, DomeAceTucker, 0, 0, 0x200),
TRAINER_SPRITE(PALACE_MAVEN_SPENSER, PalaceMavenSpenser, 0, 0, 0x200),
TRAINER_SPRITE(ARENA_TYCOON_GRETA, ArenaTycoonGreta, 0, 0, 0x200),
TRAINER_SPRITE(FACTORY_HEAD_NOLAND, FactoryHeadNoland, 0, 0, 0x200),
TRAINER_SPRITE(PIKE_QUEEN_LUCY, PikeQueenLucy, 0, 0, 0x200),
TRAINER_SPRITE(PYRAMID_KING_BRANDON, PyramidKingBrandon, 0, 0, 0x200),
TRAINER_SPRITE(RED, Red, 0, 0, 0x200),
TRAINER_SPRITE(LEAF, Leaf, 0, 0, 0x200),
TRAINER_SPRITE(RS_BRENDAN, RubySapphireBrendan, 0, 0, 0x200),
TRAINER_SPRITE(RS_MAY, RubySapphireMay, 0, 0, 0x200),
TRAINER_SPRITE(SALON_MAIDEN_ANABEL, SalonMaidenAnabel),
TRAINER_SPRITE(DOME_ACE_TUCKER, DomeAceTucker),
TRAINER_SPRITE(PALACE_MAVEN_SPENSER, PalaceMavenSpenser),
TRAINER_SPRITE(ARENA_TYCOON_GRETA, ArenaTycoonGreta),
TRAINER_SPRITE(FACTORY_HEAD_NOLAND, FactoryHeadNoland),
TRAINER_SPRITE(PIKE_QUEEN_LUCY, PikeQueenLucy),
TRAINER_SPRITE(PYRAMID_KING_BRANDON, PyramidKingBrandon),
TRAINER_SPRITE(RED, Red),
TRAINER_SPRITE(LEAF, Leaf),
TRAINER_SPRITE(RS_BRENDAN, RubySapphireBrendan),
TRAINER_SPRITE(RS_MAY, RubySapphireMay),
};
static const union AnimCmd sAnimCmd_Hoenn[] =

View file

@ -1927,7 +1927,7 @@ void SetMultiuseSpriteTemplateToTrainerBack(u16 trainerPicId, u8 battlerPosition
gMultiuseSpriteTemplate = gMonSpritesGfxPtr->templates[battlerPosition];
else
gMultiuseSpriteTemplate = gBattlerSpriteTemplates[battlerPosition];
gMultiuseSpriteTemplate.anims = gTrainerSprites[trainerPicId].animation;
gMultiuseSpriteTemplate.anims = sAnims_Trainer;
}
}
@ -1939,7 +1939,7 @@ void SetMultiuseSpriteTemplateToTrainerFront(u16 trainerPicId, u8 battlerPositio
gMultiuseSpriteTemplate = gBattlerSpriteTemplates[battlerPosition];
gMultiuseSpriteTemplate.paletteTag = trainerPicId;
gMultiuseSpriteTemplate.anims = gTrainerSprites[trainerPicId].animation;
gMultiuseSpriteTemplate.anims = sAnims_Trainer;
}
static void EncryptBoxMon(struct BoxPokemon *boxMon)

View file

@ -116,7 +116,7 @@ static void AssignSpriteAnimsTable(bool8 isTrainer)
if (!isTrainer)
sCreatingSpriteTemplate.anims = gAnims_MonPic;
else
sCreatingSpriteTemplate.anims = gTrainerSprites[0].animation;
sCreatingSpriteTemplate.anims = sAnims_Trainer;
}
static u16 CreatePicSprite(u16 species, bool8 isShiny, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag, bool8 isTrainer)