Read separate palettes and apply it to Gen 1-3

This commit is contained in:
Eduardo Quezada 2024-04-21 10:20:23 -04:00
parent 6061400073
commit a200fe1590
9 changed files with 591 additions and 504 deletions

View File

@ -37,7 +37,7 @@
#define OW_FOLLOWERS_ENABLED TRUE // Enables follower Pokémon, HGSS style.
#define OW_MON_BOBBING TRUE // If true, follower pokemon will bob up and down during their idle & walking animations
#define LARGE_OW_SUPPORT TRUE // If true, adds a small amount of overhead to OW code so that large (48x48, 64x64) OWs will display correctly under bridges, etc.
#define OW_FOLLOWERS_SHARE_PALETTE TRUE // If true, follower palettes are taken from battle sprites.
#define OW_FOLLOWERS_SHARE_PALETTE FALSE // [WIP!! NOT ALL PALETTES HAVE BEEN ADJUSTED FOR THIS!!] If TRUE, follower palettes are taken from battle sprites.
#define OW_MON_POKEBALLS TRUE // Followers will emerge from the pokeball they are stored in, instead of a normal pokeball
#define OW_GFX_COMPRESS TRUE // Adds support for compressed OW graphics, (Also compresses pokemon follower graphics).
// Compressed gfx are incompatible with non-power-of-two sprite sizes:

View File

@ -448,8 +448,8 @@ struct SpeciesInfo /*0x8C*/
#if OW_FOLLOWERS_ENABLED
struct ObjectEventGraphicsInfo followerData;
#if OW_FOLLOWERS_SHARE_PALETTE == FALSE
const u32 *followerPalette;
const u32 *followerShinyPalette;
const void* followerPalette;
const void* followerShinyPalette;
#endif //OW_FOLLOWERS_SHARE_PALETTE
#endif //OW_FOLLOWERS_ENABLED
};
@ -621,7 +621,6 @@ extern const struct MoveInfo gMovesInfo[];
extern const u8 gFacilityClassToPicIndex[];
extern const u8 gFacilityClassToTrainerClass[];
extern const struct SpeciesInfo gSpeciesInfo[];
extern const void* const gFollowerPalettes[NUM_SPECIES][2];
extern const u32 gExperienceTables[][MAX_LEVEL + 1];
extern const u8 gPPUpGetMask[];
extern const u8 gPPUpClearMask[];

View File

@ -16859,16 +16859,25 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_
#if P_FOOTPRINTS
const u8 gMonFootprint_Wishiwashi[] = INCBIN_U8("graphics/pokemon/wishiwashi/footprint.1bpp");
#endif //P_FOOTPRINTS
#if OW_FOLLOWERS_ENABLED
const u32 gObjectEventPic_WishiwashiSolo[] = INCBIN_COMP("graphics/pokemon/wishiwashi/follower.4bpp");
#if OW_FOLLOWERS_SHARE_PALETTE == FALSE
const u32 gFollowerPalette_WishiwashiSolo[] = INCBIN_U32("graphics/pokemon/wishiwashi/follow_normal.gbapal.lz");
const u32 gShinyFollowerPalette_WishiwashiSolo[] = INCBIN_U32("graphics/pokemon/wishiwashi/follow_shiny.gbapal.lz");
#endif //OW_FOLLOWERS_SHARE_PALETTE
#endif //OW_FOLLOWERS_ENABLED
const u32 gMonFrontPic_WishiwashiSchool[] = INCBIN_U32("graphics/pokemon/wishiwashi/school/front.4bpp.lz");
const u32 gMonPalette_WishiwashiSchool[] = INCBIN_U32("graphics/pokemon/wishiwashi/school/normal.gbapal.lz");
const u32 gMonBackPic_WishiwashiSchool[] = INCBIN_U32("graphics/pokemon/wishiwashi/school/back.4bpp.lz");
const u32 gMonShinyPalette_WishiwashiSchool[] = INCBIN_U32("graphics/pokemon/wishiwashi/school/shiny.gbapal.lz");
const u8 gMonIcon_WishiwashiSchool[] = INCBIN_U8("graphics/pokemon/wishiwashi/school/icon.4bpp");
#if OW_FOLLOWERS_ENABLED
const u32 gObjectEventPic_WishiwashiSolo[] = INCBIN_COMP("graphics/pokemon/wishiwashi/follower.4bpp");
// const u32 gObjectEventPic_WishiwashiSchool[] = INCBIN_COMP("graphics/pokemon/wishiwashi/school/follower.4bpp");
#if OW_FOLLOWERS_SHARE_PALETTE == FALSE
// const u32 gFollowerPalette_WishiwashiSchool[] = INCBIN_U32("graphics/pokemon/wishiwashi/school/follow_normal.gbapal.lz");
// const u32 gShinyFollowerPalette_WishiwashiSchool[] = INCBIN_U32("graphics/pokemon/wishiwashi/school/follow_shiny.gbapal.lz");
#endif //OW_FOLLOWERS_SHARE_PALETTE
#endif //OW_FOLLOWERS_ENABLED
#endif //P_FAMILY_WISHIWASHI
@ -17423,13 +17432,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_
#if OW_FOLLOWERS_ENABLED
const u32 gObjectEventPic_MiniorMeteor[] = INCBIN_COMP("graphics/pokemon/minior/follower.4bpp");
// const u32 gObjectEventPic_MiniorCoreRed[] = INCBIN_COMP("graphics/pokemon/minior/core/red/follower.4bpp");
// const u32 gObjectEventPic_MiniorCoreOrange[] = INCBIN_COMP("graphics/pokemon/minior/core/orange/follower.4bpp");
// const u32 gObjectEventPic_MiniorCoreYellow[] = INCBIN_COMP("graphics/pokemon/minior/core/yellow/follower.4bpp");
// const u32 gObjectEventPic_MiniorCoreGreen[] = INCBIN_COMP("graphics/pokemon/minior/core/green/follower.4bpp");
// const u32 gObjectEventPic_MiniorCoreBlue[] = INCBIN_COMP("graphics/pokemon/minior/core/blue/follower.4bpp");
// const u32 gObjectEventPic_MiniorCoreIndigo[] = INCBIN_COMP("graphics/pokemon/minior/core/indigo/follower.4bpp");
// const u32 gObjectEventPic_MiniorCoreViolet[] = INCBIN_COMP("graphics/pokemon/minior/core/violet/follower.4bpp");
#if OW_FOLLOWERS_SHARE_PALETTE == FALSE
const u32 gFollowerPalette_MiniorMeteor[] = INCBIN_U32("graphics/pokemon/minior/follow_normal.gbapal.lz");
const u32 gShinyFollowerPalette_MiniorMeteor[] = INCBIN_U32("graphics/pokemon/minior/follow_shiny.gbapal.lz");
#endif //OW_FOLLOWERS_SHARE_PALETTE
#endif //OW_FOLLOWERS_ENABLED
#endif //P_FAMILY_MINIOR
@ -17909,16 +17915,25 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_
const u32 gMonBackPic_NecrozmaDuskMane[] = INCBIN_U32("graphics/pokemon/necrozma/dusk_mane/back.4bpp.lz");
const u32 gMonShinyPalette_NecrozmaDuskMane[] = INCBIN_U32("graphics/pokemon/necrozma/dusk_mane/shiny.gbapal.lz");
const u8 gMonIcon_NecrozmaDuskMane[] = INCBIN_U8("graphics/pokemon/necrozma/dusk_mane/icon.4bpp");
#if OW_FOLLOWERS_ENABLED
const u32 gObjectEventPic_NecrozmaDuskMane[] = INCBIN_COMP("graphics/pokemon/necrozma/dusk_mane/follower.4bpp");
#if OW_FOLLOWERS_SHARE_PALETTE == FALSE
const u32 gFollowerPalette_NecrozmaDuskMane[] = INCBIN_U32("graphics/pokemon/necrozma/dusk_mane/follow_normal.gbapal.lz");
const u32 gShinyFollowerPalette_NecrozmaDuskMane[] = INCBIN_U32("graphics/pokemon/necrozma/dusk_mane/follow_shiny.gbapal.lz");
#endif //OW_FOLLOWERS_SHARE_PALETTE
#endif //OW_FOLLOWERS_ENABLED
const u32 gMonFrontPic_NecrozmaDawnWings[] = INCBIN_U32("graphics/pokemon/necrozma/dawn_wings/front.4bpp.lz");
const u32 gMonPalette_NecrozmaDawnWings[] = INCBIN_U32("graphics/pokemon/necrozma/dawn_wings/normal.gbapal.lz");
const u32 gMonBackPic_NecrozmaDawnWings[] = INCBIN_U32("graphics/pokemon/necrozma/dawn_wings/back.4bpp.lz");
const u32 gMonShinyPalette_NecrozmaDawnWings[] = INCBIN_U32("graphics/pokemon/necrozma/dawn_wings/shiny.gbapal.lz");
const u8 gMonIcon_NecrozmaDawnWings[] = INCBIN_U8("graphics/pokemon/necrozma/dawn_wings/icon.4bpp");
#if OW_FOLLOWERS_ENABLED
const u32 gObjectEventPic_NecrozmaDuskMane[] = INCBIN_COMP("graphics/pokemon/necrozma/dusk_mane/follower.4bpp");
const u32 gObjectEventPic_NecrozmaDawnWings[] = INCBIN_COMP("graphics/pokemon/necrozma/dawn_wings/follower.4bpp");
#if OW_FOLLOWERS_SHARE_PALETTE == FALSE
const u32 gFollowerPalette_NecrozmaDawnWings[] = INCBIN_U32("graphics/pokemon/necrozma/dawn_wings/follow_normal.gbapal.lz");
const u32 gShinyFollowerPalette_NecrozmaDawnWings[] = INCBIN_U32("graphics/pokemon/necrozma/dawn_wings/follow_shiny.gbapal.lz");
#endif //OW_FOLLOWERS_SHARE_PALETTE
#endif //OW_FOLLOWERS_ENABLED
#if P_ULTRA_BURST_FORMS
@ -19995,6 +20010,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_
#if P_FOOTPRINTS
const u8 gMonFootprint_Zarude[] = INCBIN_U8("graphics/pokemon/zarude/footprint.1bpp");
#endif //P_FOOTPRINTS
#if OW_FOLLOWERS_ENABLED
const u32 gObjectEventPic_Zarude[] = INCBIN_COMP("graphics/pokemon/zarude/follower.4bpp");
#if OW_FOLLOWERS_SHARE_PALETTE == FALSE
const u32 gFollowerPalette_Zarude[] = INCBIN_U32("graphics/pokemon/zarude/follow_normal.gbapal.lz");
const u32 gShinyFollowerPalette_Zarude[] = INCBIN_U32("graphics/pokemon/zarude/follow_shiny.gbapal.lz");
#endif //OW_FOLLOWERS_SHARE_PALETTE
#endif //OW_FOLLOWERS_ENABLED
const u32 gMonFrontPic_ZarudeDada[] = INCBIN_U32("graphics/pokemon/zarude/dada/front.4bpp.lz");
const u32 gMonPalette_ZarudeDada[] = INCBIN_U32("graphics/pokemon/zarude/dada/normal.gbapal.lz");
@ -20002,8 +20024,11 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_
const u32 gMonShinyPalette_ZarudeDada[] = INCBIN_U32("graphics/pokemon/zarude/dada/shiny.gbapal.lz");
const u8 gMonIcon_ZarudeDada[] = INCBIN_U8("graphics/pokemon/zarude/dada/icon.4bpp");
#if OW_FOLLOWERS_ENABLED
const u32 gObjectEventPic_Zarude[] = INCBIN_COMP("graphics/pokemon/zarude/follower.4bpp");
// const u32 gObjectEventPic_ZarudeDada[] = INCBIN_COMP("graphics/pokemon/zarude/dada/follower.4bpp");
//const u32 gObjectEventPic_ZarudeDada[] = INCBIN_COMP("graphics/pokemon/zarude/dada/follower.4bpp");
#if OW_FOLLOWERS_SHARE_PALETTE == FALSE
// const u32 gFollowerPalette_ZarudeDada[] = INCBIN_U32("graphics/pokemon/zarude/dada/follow_normal.gbapal.lz");
// const u32 gShinyFollowerPalette_ZarudeDada[] = INCBIN_U32("graphics/pokemon/zarude/dada/follow_shiny.gbapal.lz");
#endif //OW_FOLLOWERS_SHARE_PALETTE
#endif //OW_FOLLOWERS_ENABLED
#endif //P_FAMILY_ZARUDE

View File

@ -194,14 +194,3 @@ const struct SpeciesInfo gSpeciesInfo[] =
},
*/
};
// Standalone follower palettes
// If not NULL, entries here override the front-sprite-based pals
// used by OBJ_EVENT_PAL_TAG_DYNAMIC
// Palette data may be compressed, or not
const void* const gFollowerPalettes[NUM_SPECIES][2] =
{
// Must have at least one entry, or ARRAY_COUNT comparison fails
// (SPECIES_NONE does not use OBJ_EVENT_PAL_TAG_DYNAMIC anyway)
[SPECIES_NONE] = {gMonPalette_CircledQuestionMark, gMonShinyPalette_CircledQuestionMark},
};

File diff suppressed because it is too large Load Diff

View File

@ -52,7 +52,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Chikorita,
.iconPalIndex = 1,
FOOTPRINT(Chikorita)
FOLLOWER(Chikorita, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Chikorita, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Chikorita, gShinyFollowerPalette_Chikorita)
.levelUpLearnset = sChikoritaLevelUpLearnset,
.teachableLearnset = sChikoritaTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 16, SPECIES_BAYLEEF}),
@ -107,7 +107,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Bayleef,
.iconPalIndex = 1,
FOOTPRINT(Bayleef)
FOLLOWER(Bayleef, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Bayleef, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Bayleef, gShinyFollowerPalette_Bayleef)
.levelUpLearnset = sBayleefLevelUpLearnset,
.teachableLearnset = sBayleefTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 32, SPECIES_MEGANIUM}),
@ -172,7 +172,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Meganium,
.iconPalIndex = 1,
FOOTPRINT(Meganium)
FOLLOWER(Meganium, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Meganium, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Meganium, gShinyFollowerPalette_Meganium)
.levelUpLearnset = sMeganiumLevelUpLearnset,
.teachableLearnset = sMeganiumTeachableLearnset,
},
@ -227,7 +227,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Cyndaquil,
.iconPalIndex = 3,
FOOTPRINT(Cyndaquil)
FOLLOWER(Cyndaquil, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Cyndaquil, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Cyndaquil, gShinyFollowerPalette_Cyndaquil)
.levelUpLearnset = sCyndaquilLevelUpLearnset,
.teachableLearnset = sCyndaquilTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 14, SPECIES_QUILAVA}),
@ -282,7 +282,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Quilava,
.iconPalIndex = 3,
FOOTPRINT(Quilava)
FOLLOWER(Quilava, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Quilava, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Quilava, gShinyFollowerPalette_Quilava)
.levelUpLearnset = sQuilavaLevelUpLearnset,
.teachableLearnset = sQuilavaTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 36, SPECIES_TYPHLOSION},
@ -346,7 +346,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Typhlosion,
.iconPalIndex = 3,
FOOTPRINT(Typhlosion)
FOLLOWER(Typhlosion, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Typhlosion, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Typhlosion, gShinyFollowerPalette_Typhlosion)
.levelUpLearnset = sTyphlosionLevelUpLearnset,
.teachableLearnset = sTyphlosionTeachableLearnset,
.formSpeciesIdTable = sTyphlosionFormSpeciesIdTable,
@ -401,7 +401,8 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_TyphlosionHisuian,
.iconPalIndex = 1,
FOOTPRINT(Typhlosion)
FOLLOWER(TyphlosionHisuian, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
//FOLLOWER(TyphlosionHisuian, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_TyphlosionHisuian, gShinyFollowerPalette_TyphlosionHisuian)
FOLLOWER(TyphlosionHisuian, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_TyphlosionHisuian)
.isHisuianForm = TRUE,
.levelUpLearnset = sTyphlosionHisuianLevelUpLearnset,
.teachableLearnset = sTyphlosionHisuianTeachableLearnset,
@ -459,7 +460,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Totodile,
.iconPalIndex = 0,
FOOTPRINT(Totodile)
FOLLOWER(Totodile, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Totodile, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Totodile, gShinyFollowerPalette_Totodile)
.levelUpLearnset = sTotodileLevelUpLearnset,
.teachableLearnset = sTotodileTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 18, SPECIES_CROCONAW}),
@ -515,7 +516,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Croconaw,
.iconPalIndex = 0,
FOOTPRINT(Croconaw)
FOLLOWER(Croconaw, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Croconaw, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Croconaw, gShinyFollowerPalette_Croconaw)
.levelUpLearnset = sCroconawLevelUpLearnset,
.teachableLearnset = sCroconawTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_FERALIGATR}),
@ -577,7 +578,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Feraligatr,
.iconPalIndex = 0,
FOOTPRINT(Feraligatr)
FOLLOWER(Feraligatr, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Feraligatr, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Feraligatr, gShinyFollowerPalette_Feraligatr)
.levelUpLearnset = sFeraligatrLevelUpLearnset,
.teachableLearnset = sFeraligatrTeachableLearnset,
},
@ -632,7 +633,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Sentret,
.iconPalIndex = 2,
FOOTPRINT(Sentret)
FOLLOWER(Sentret, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Sentret, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Sentret, gShinyFollowerPalette_Sentret)
.levelUpLearnset = sSentretLevelUpLearnset,
.teachableLearnset = sSentretTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 15, SPECIES_FURRET}),
@ -686,7 +687,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Furret,
.iconPalIndex = 2,
FOOTPRINT(Furret)
FOLLOWER(Furret, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Furret, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Furret, gShinyFollowerPalette_Furret)
.levelUpLearnset = sFurretLevelUpLearnset,
.teachableLearnset = sFurretTeachableLearnset,
},
@ -741,7 +742,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Hoothoot,
.iconPalIndex = 2,
FOOTPRINT(Hoothoot)
FOLLOWER(Hoothoot, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Hoothoot, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Hoothoot, gShinyFollowerPalette_Hoothoot)
.levelUpLearnset = sHoothootLevelUpLearnset,
.teachableLearnset = sHoothootTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 20, SPECIES_NOCTOWL}),
@ -801,7 +802,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Noctowl,
.iconPalIndex = 2,
FOOTPRINT(Noctowl)
FOLLOWER(Noctowl, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE)
FOLLOWER(Noctowl, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, gFollowerPalette_Noctowl, gShinyFollowerPalette_Noctowl)
.levelUpLearnset = sNoctowlLevelUpLearnset,
.teachableLearnset = sNoctowlTeachableLearnset,
},
@ -860,7 +861,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Ledyba,
.iconPalIndex = 0,
FOOTPRINT(Ledyba)
FOLLOWER(Ledyba, SIZE_32x32, SHADOW_SIZE_M, TRACKS_BUG)
FOLLOWER(Ledyba, SIZE_32x32, SHADOW_SIZE_M, TRACKS_BUG, gFollowerPalette_Ledyba, gShinyFollowerPalette_Ledyba)
.levelUpLearnset = sLedybaLevelUpLearnset,
.teachableLearnset = sLedybaTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 18, SPECIES_LEDIAN}),
@ -919,7 +920,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Ledian,
.iconPalIndex = 0,
FOOTPRINT(Ledian)
FOLLOWER(Ledian, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Ledian, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Ledian, gShinyFollowerPalette_Ledian)
.levelUpLearnset = sLedianLevelUpLearnset,
.teachableLearnset = sLedianTeachableLearnset,
},
@ -974,7 +975,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Spinarak,
.iconPalIndex = 1,
FOOTPRINT(Spinarak)
FOLLOWER(Spinarak, SIZE_32x32, SHADOW_SIZE_M, TRACKS_BUG)
FOLLOWER(Spinarak, SIZE_32x32, SHADOW_SIZE_M, TRACKS_BUG, gFollowerPalette_Spinarak, gShinyFollowerPalette_Spinarak)
.levelUpLearnset = sSpinarakLevelUpLearnset,
.teachableLearnset = sSpinarakTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 22, SPECIES_ARIADOS}),
@ -1034,7 +1035,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Ariados,
.iconPalIndex = 0,
FOOTPRINT(Ariados)
FOLLOWER(Ariados, SIZE_32x32, SHADOW_SIZE_M, TRACKS_BUG)
FOLLOWER(Ariados, SIZE_32x32, SHADOW_SIZE_M, TRACKS_BUG, gFollowerPalette_Ariados, gShinyFollowerPalette_Ariados)
.levelUpLearnset = sAriadosLevelUpLearnset,
.teachableLearnset = sAriadosTeachableLearnset,
},
@ -1090,7 +1091,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Chinchou,
.iconPalIndex = 2,
FOOTPRINT(Chinchou)
FOLLOWER(Chinchou, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT)
FOLLOWER(Chinchou, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, gFollowerPalette_Chinchou, gShinyFollowerPalette_Chinchou)
.levelUpLearnset = sChinchouLevelUpLearnset,
.teachableLearnset = sChinchouTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 27, SPECIES_LANTURN}),
@ -1145,7 +1146,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Lanturn,
.iconPalIndex = 0,
FOOTPRINT(Lanturn)
FOLLOWER(Lanturn, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT)
FOLLOWER(Lanturn, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, gFollowerPalette_Lanturn, gShinyFollowerPalette_Lanturn)
.levelUpLearnset = sLanturnLevelUpLearnset,
.teachableLearnset = sLanturnTeachableLearnset,
},
@ -1202,7 +1203,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Togepi,
.iconPalIndex = 0,
FOOTPRINT(Togepi)
FOLLOWER(Togepi, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Togepi, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Togepi, gShinyFollowerPalette_Togepi)
.levelUpLearnset = sTogepiLevelUpLearnset,
.teachableLearnset = sTogepiTeachableLearnset,
.evolutions = EVOLUTION({EVO_FRIENDSHIP, 0, SPECIES_TOGETIC}),
@ -1256,7 +1257,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Togetic,
.iconPalIndex = 0,
FOOTPRINT(Togetic)
FOLLOWER(Togetic, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE)
FOLLOWER(Togetic, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, gFollowerPalette_Togetic, gShinyFollowerPalette_Togetic)
.levelUpLearnset = sTogeticLevelUpLearnset,
.teachableLearnset = sTogeticTeachableLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_SHINY_STONE, SPECIES_TOGEKISS}),
@ -1320,7 +1321,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Togekiss,
.iconPalIndex = 2,
FOOTPRINT(Togekiss)
FOLLOWER(Togekiss, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Togekiss, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Togekiss, gShinyFollowerPalette_Togekiss)
.levelUpLearnset = sTogekissLevelUpLearnset,
.teachableLearnset = sTogekissTeachableLearnset,
},
@ -1377,7 +1378,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Natu,
.iconPalIndex = 1,
FOOTPRINT(Natu)
FOLLOWER(Natu, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Natu, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Natu, gShinyFollowerPalette_Natu)
.levelUpLearnset = sNatuLevelUpLearnset,
.teachableLearnset = sNatuTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 25, SPECIES_XATU}),
@ -1434,7 +1435,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Xatu,
.iconPalIndex = 1,
FOOTPRINT(Xatu)
FOLLOWER(Xatu, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Xatu, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Xatu, gShinyFollowerPalette_Xatu)
.levelUpLearnset = sXatuLevelUpLearnset,
.teachableLearnset = sXatuTeachableLearnset,
},
@ -1490,7 +1491,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Mareep,
.iconPalIndex = 0,
FOOTPRINT(Mareep)
FOLLOWER(Mareep, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Mareep, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Mareep, gShinyFollowerPalette_Mareep)
.levelUpLearnset = sMareepLevelUpLearnset,
.teachableLearnset = sMareepTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 15, SPECIES_FLAAFFY}),
@ -1544,7 +1545,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Flaaffy,
.iconPalIndex = 0,
FOOTPRINT(Flaaffy)
FOLLOWER(Flaaffy, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Flaaffy, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Flaaffy, gShinyFollowerPalette_Flaaffy)
.levelUpLearnset = sFlaaffyLevelUpLearnset,
.teachableLearnset = sFlaaffyTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_AMPHAROS}),
@ -1609,7 +1610,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Ampharos,
.iconPalIndex = 0,
FOOTPRINT(Ampharos)
FOLLOWER(Ampharos, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Ampharos, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Ampharos, gShinyFollowerPalette_Ampharos)
.levelUpLearnset = sAmpharosLevelUpLearnset,
.teachableLearnset = sAmpharosTeachableLearnset,
.formSpeciesIdTable = sAmpharosFormSpeciesIdTable,
@ -1728,7 +1729,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Azurill,
.iconPalIndex = 0,
FOOTPRINT(Azurill)
FOLLOWER(Azurill, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Azurill, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Azurill, gShinyFollowerPalette_Azurill)
.levelUpLearnset = sAzurillLevelUpLearnset,
.teachableLearnset = sAzurillTeachableLearnset,
.evolutions = EVOLUTION({EVO_FRIENDSHIP, 0, SPECIES_MARILL}),
@ -1787,7 +1788,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Marill,
.iconPalIndex = 0,
FOOTPRINT(Marill)
FOLLOWER(Marill, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Marill, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Marill, gShinyFollowerPalette_Marill)
.levelUpLearnset = sMarillLevelUpLearnset,
.teachableLearnset = sMarillTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 18, SPECIES_AZUMARILL}),
@ -1853,7 +1854,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Azumarill,
.iconPalIndex = 0,
FOOTPRINT(Azumarill)
FOLLOWER(Azumarill, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Azumarill, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Azumarill, gShinyFollowerPalette_Azumarill)
.levelUpLearnset = sAzumarillLevelUpLearnset,
.teachableLearnset = sAzumarillTeachableLearnset,
},
@ -1909,7 +1910,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Bonsly,
.iconPalIndex = 1,
FOOTPRINT(Bonsly)
FOLLOWER(Bonsly, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Bonsly, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Bonsly, gShinyFollowerPalette_Bonsly)
.levelUpLearnset = sBonslyLevelUpLearnset,
.teachableLearnset = sBonslyTeachableLearnset,
.evolutions = EVOLUTION({EVO_MOVE, MOVE_MIMIC, SPECIES_SUDOWOODO}),
@ -1968,7 +1969,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Sudowoodo,
.iconPalIndex = 1,
FOOTPRINT(Sudowoodo)
FOLLOWER(Sudowoodo, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Sudowoodo, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Sudowoodo, gShinyFollowerPalette_Sudowoodo)
.levelUpLearnset = sSudowoodoLevelUpLearnset,
.teachableLearnset = sSudowoodoTeachableLearnset,
},
@ -2024,7 +2025,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Hoppip,
.iconPalIndex = 1,
FOOTPRINT(Hoppip)
FOLLOWER(Hoppip, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE)
FOLLOWER(Hoppip, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, gFollowerPalette_Hoppip, gShinyFollowerPalette_Hoppip)
.levelUpLearnset = sHoppipLevelUpLearnset,
.teachableLearnset = sHoppipTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 18, SPECIES_SKIPLOOM}),
@ -2079,7 +2080,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Skiploom,
.iconPalIndex = 1,
FOOTPRINT(Skiploom)
FOLLOWER(Skiploom, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE)
FOLLOWER(Skiploom, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, gFollowerPalette_Skiploom, gShinyFollowerPalette_Skiploom)
.levelUpLearnset = sSkiploomLevelUpLearnset,
.teachableLearnset = sSkiploomTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 27, SPECIES_JUMPLUFF}),
@ -2142,7 +2143,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Jumpluff,
.iconPalIndex = 2,
FOOTPRINT(Jumpluff)
FOLLOWER(Jumpluff, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE)
FOLLOWER(Jumpluff, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, gFollowerPalette_Jumpluff, gShinyFollowerPalette_Jumpluff)
.levelUpLearnset = sJumpluffLevelUpLearnset,
.teachableLearnset = sJumpluffTeachableLearnset,
},
@ -2201,7 +2202,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Aipom,
.iconPalIndex = 2,
FOOTPRINT(Aipom)
FOLLOWER(Aipom, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Aipom, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Aipom, gShinyFollowerPalette_Aipom)
.levelUpLearnset = sAipomLevelUpLearnset,
.teachableLearnset = sAipomTeachableLearnset,
.evolutions = EVOLUTION({EVO_MOVE, MOVE_DOUBLE_HIT, SPECIES_AMBIPOM}),
@ -2260,7 +2261,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Ambipom,
.iconPalIndex = 2,
FOOTPRINT(Ambipom)
FOLLOWER(Ambipom, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Ambipom, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Ambipom, gShinyFollowerPalette_Ambipom)
.levelUpLearnset = sAmbipomLevelUpLearnset,
.teachableLearnset = sAmbipomTeachableLearnset,
},
@ -2316,7 +2317,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Sunkern,
.iconPalIndex = 1,
FOOTPRINT(Sunkern)
FOLLOWER(Sunkern, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT)
FOLLOWER(Sunkern, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, gFollowerPalette_Sunkern, gShinyFollowerPalette_Sunkern)
.levelUpLearnset = sSunkernLevelUpLearnset,
.teachableLearnset = sSunkernTeachableLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_SUN_STONE, SPECIES_SUNFLORA}),
@ -2370,7 +2371,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Sunflora,
.iconPalIndex = 1,
FOOTPRINT(Sunflora)
FOLLOWER(Sunflora, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Sunflora, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Sunflora, gShinyFollowerPalette_Sunflora)
.levelUpLearnset = sSunfloraLevelUpLearnset,
.teachableLearnset = sSunfloraTeachableLearnset,
},
@ -2427,7 +2428,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Yanma,
.iconPalIndex = 1,
FOOTPRINT(Yanma)
FOLLOWER(Yanma, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE)
FOLLOWER(Yanma, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, gFollowerPalette_Yanma, gShinyFollowerPalette_Yanma)
.levelUpLearnset = sYanmaLevelUpLearnset,
.teachableLearnset = sYanmaTeachableLearnset,
.evolutions = EVOLUTION({EVO_MOVE, MOVE_ANCIENT_POWER, SPECIES_YANMEGA}),
@ -2484,7 +2485,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Yanmega,
.iconPalIndex = 1,
FOOTPRINT(Yanmega)
FOLLOWER(Yanmega, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Yanmega, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Yanmega, gShinyFollowerPalette_Yanmega)
.levelUpLearnset = sYanmegaLevelUpLearnset,
.teachableLearnset = sYanmegaTeachableLearnset,
},
@ -2544,7 +2545,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Wooper,
.iconPalIndex = 0,
FOOTPRINT(Wooper)
FOLLOWER(Wooper, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Wooper, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Wooper, gShinyFollowerPalette_Wooper)
.levelUpLearnset = sWooperLevelUpLearnset,
.teachableLearnset = sWooperTeachableLearnset,
.formSpeciesIdTable = sWooperFormSpeciesIdTable,
@ -2603,7 +2604,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Quagsire,
.iconPalIndex = 0,
FOOTPRINT(Quagsire)
FOLLOWER(Quagsire, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Quagsire, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Quagsire, gShinyFollowerPalette_Quagsire)
.levelUpLearnset = sQuagsireLevelUpLearnset,
.teachableLearnset = sQuagsireTeachableLearnset,
},
@ -2772,7 +2773,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Murkrow,
.iconPalIndex = 2,
FOOTPRINT(Murkrow)
FOLLOWER(Murkrow, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Murkrow, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Murkrow, gShinyFollowerPalette_Murkrow)
.levelUpLearnset = sMurkrowLevelUpLearnset,
.teachableLearnset = sMurkrowTeachableLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_DUSK_STONE, SPECIES_HONCHKROW}),
@ -2827,7 +2828,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Honchkrow,
.iconPalIndex = 2,
FOOTPRINT(Honchkrow)
FOLLOWER(Honchkrow, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Honchkrow, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Honchkrow, gShinyFollowerPalette_Honchkrow)
.levelUpLearnset = sHonchkrowLevelUpLearnset,
.teachableLearnset = sHonchkrowTeachableLearnset,
},
@ -2885,7 +2886,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Misdreavus,
.iconPalIndex = 0,
FOOTPRINT(Misdreavus)
FOLLOWER(Misdreavus, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE)
FOLLOWER(Misdreavus, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, gFollowerPalette_Misdreavus, gShinyFollowerPalette_Misdreavus)
.levelUpLearnset = sMisdreavusLevelUpLearnset,
.teachableLearnset = sMisdreavusTeachableLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_DUSK_STONE, SPECIES_MISMAGIUS}),
@ -2942,7 +2943,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Mismagius,
.iconPalIndex = 2,
FOOTPRINT(Mismagius)
FOLLOWER(Mismagius, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Mismagius, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Mismagius, gShinyFollowerPalette_Mismagius)
.levelUpLearnset = sMismagiusLevelUpLearnset,
.teachableLearnset = sMismagiusTeachableLearnset,
},
@ -3085,7 +3086,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Wynaut,
.iconPalIndex = 0,
FOOTPRINT(Wynaut)
FOLLOWER(Wynaut, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Wynaut, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Wynaut, gShinyFollowerPalette_Wynaut)
.tmIlliterate = TRUE,
.levelUpLearnset = sWynautLevelUpLearnset,
.teachableLearnset = sWynautTeachableLearnset,
@ -3149,7 +3150,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconPalIndexFemale = 0,
#endif
FOOTPRINT(Wobbuffet)
FOLLOWER(Wobbuffet, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Wobbuffet, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Wobbuffet, gShinyFollowerPalette_Wobbuffet)
.tmIlliterate = TRUE,
.levelUpLearnset = sWobbuffetLevelUpLearnset,
.teachableLearnset = sWobbuffetTeachableLearnset,
@ -3209,7 +3210,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Girafarig,
.iconPalIndex = 1,
FOOTPRINT(Girafarig)
FOLLOWER(Girafarig, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Girafarig, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Girafarig, gShinyFollowerPalette_Girafarig)
.levelUpLearnset = sGirafarigLevelUpLearnset,
.teachableLearnset = sGirafarigTeachableLearnset,
.evolutions = EVOLUTION({EVO_MOVE, MOVE_TWIN_BEAM, SPECIES_FARIGIRAF}),
@ -3319,7 +3320,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Pineco,
.iconPalIndex = 0,
FOOTPRINT(Pineco)
FOLLOWER(Pineco, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT)
FOLLOWER(Pineco, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, gFollowerPalette_Pineco, gShinyFollowerPalette_Pineco)
.levelUpLearnset = sPinecoLevelUpLearnset,
.teachableLearnset = sPinecoTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 31, SPECIES_FORRETRESS}),
@ -3373,7 +3374,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Forretress,
.iconPalIndex = 2,
FOOTPRINT(Forretress)
FOLLOWER(Forretress, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT)
FOLLOWER(Forretress, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, gFollowerPalette_Forretress, gShinyFollowerPalette_Forretress)
.levelUpLearnset = sForretressLevelUpLearnset,
.teachableLearnset = sForretressTeachableLearnset,
},
@ -3435,7 +3436,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Dunsparce,
.iconPalIndex = 0,
FOOTPRINT(Dunsparce)
FOLLOWER(Dunsparce, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT)
FOLLOWER(Dunsparce, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, gFollowerPalette_Dunsparce, gShinyFollowerPalette_Dunsparce)
.levelUpLearnset = sDunsparceLevelUpLearnset,
.teachableLearnset = sDunsparceTeachableLearnset,
.evolutions = EVOLUTION({EVO_MOVE_TWO_SEGMENT, MOVE_HYPER_DRILL, SPECIES_DUDUNSPARCE_TWO_SEGMENT},
@ -3605,7 +3606,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Gligar,
.iconPalIndex = 0,
FOOTPRINT(Gligar)
FOLLOWER(Gligar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE)
FOLLOWER(Gligar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, gFollowerPalette_Gligar, gShinyFollowerPalette_Gligar)
.levelUpLearnset = sGligarLevelUpLearnset,
.teachableLearnset = sGligarTeachableLearnset,
.evolutions = EVOLUTION({EVO_ITEM_HOLD_NIGHT, ITEM_RAZOR_FANG, SPECIES_GLISCOR},
@ -3662,7 +3663,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Gliscor,
.iconPalIndex = 2,
FOOTPRINT(Gliscor)
FOLLOWER(Gliscor, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Gliscor, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Gliscor, gShinyFollowerPalette_Gliscor)
.levelUpLearnset = sGliscorLevelUpLearnset,
.teachableLearnset = sGliscorTeachableLearnset,
},
@ -3722,7 +3723,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Snubbull,
.iconPalIndex = 0,
FOOTPRINT(Snubbull)
FOLLOWER(Snubbull, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Snubbull, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Snubbull, gShinyFollowerPalette_Snubbull)
.levelUpLearnset = sSnubbullLevelUpLearnset,
.teachableLearnset = sSnubbullTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 23, SPECIES_GRANBULL}),
@ -3780,7 +3781,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Granbull,
.iconPalIndex = 2,
FOOTPRINT(Granbull)
FOLLOWER(Granbull, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Granbull, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Granbull, gShinyFollowerPalette_Granbull)
.levelUpLearnset = sGranbullLevelUpLearnset,
.teachableLearnset = sGranbullTeachableLearnset,
},
@ -3846,7 +3847,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Qwilfish,
.iconPalIndex = 0,
FOOTPRINT(Qwilfish)
FOLLOWER(Qwilfish, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT)
FOLLOWER(Qwilfish, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, gFollowerPalette_Qwilfish, gShinyFollowerPalette_Qwilfish)
.levelUpLearnset = sQwilfishLevelUpLearnset,
.teachableLearnset = sQwilfishTeachableLearnset,
.formSpeciesIdTable = sQwilfishFormSpeciesIdTable,
@ -3903,7 +3904,8 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_QwilfishHisuian,
.iconPalIndex = 1,
FOOTPRINT(Qwilfish)
FOLLOWER(QwilfishHisuian, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
//FOLLOWER(QwilfishHisuian, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_QwilfishHisuian, gShinyFollowerPalette_QwilfishHisuian)
FOLLOWER(QwilfishHisuian, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_QwilfishHisuian)
.isHisuianForm = TRUE,
.levelUpLearnset = sQwilfishHisuianLevelUpLearnset,
.teachableLearnset = sQwilfishHisuianTeachableLearnset,
@ -3959,7 +3961,8 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Overqwil,
.iconPalIndex = 2,
//FOOTPRINT(Overqwil)
FOLLOWER(Overqwil, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
//FOLLOWER(Overqwil, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Overqwil, gShinyFollowerPalette_Overqwil)
FOLLOWER(Overqwil, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Overqwil)
.levelUpLearnset = sOverqwilLevelUpLearnset,
.teachableLearnset = sOverqwilTeachableLearnset,
},
@ -4018,7 +4021,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Shuckle,
.iconPalIndex = 1,
FOOTPRINT(Shuckle)
FOLLOWER(Shuckle, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Shuckle, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Shuckle, gShinyFollowerPalette_Shuckle)
.levelUpLearnset = sShuckleLevelUpLearnset,
.teachableLearnset = sShuckleTeachableLearnset,
},
@ -4077,7 +4080,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Heracross,
.iconPalIndex = 0,
FOOTPRINT(Heracross)
FOLLOWER(Heracross, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Heracross, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Heracross, gShinyFollowerPalette_Heracross)
.levelUpLearnset = sHeracrossLevelUpLearnset,
.teachableLearnset = sHeracrossTeachableLearnset,
.formSpeciesIdTable = sHeracrossFormSpeciesIdTable,
@ -4197,7 +4200,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Sneasel,
.iconPalIndex = 0,
FOOTPRINT(Sneasel)
FOLLOWER(Sneasel, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Sneasel, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Sneasel, gShinyFollowerPalette_Sneasel)
.levelUpLearnset = sSneaselLevelUpLearnset,
.teachableLearnset = sSneaselTeachableLearnset,
.formSpeciesIdTable = sSneaselFormSpeciesIdTable,
@ -4260,7 +4263,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Weavile,
.iconPalIndex = 0,
FOOTPRINT(Weavile)
FOLLOWER(Weavile, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Weavile, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Weavile, gShinyFollowerPalette_Weavile)
.levelUpLearnset = sWeavileLevelUpLearnset,
.teachableLearnset = sWeavileTeachableLearnset,
},
@ -4321,7 +4324,8 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_SneaselHisuian,
.iconPalIndex = 0,
FOOTPRINT(Sneasel)
FOLLOWER(SneaselHisuian, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
//FOLLOWER(SneaselHisuian, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_SneaselHisuian, gShinyFollowerPalette_SneaselHisuian)
FOLLOWER(SneaselHisuian, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_SneaselHisuian)
.isHisuianForm = TRUE,
.levelUpLearnset = sSneaselHisuianLevelUpLearnset,
.teachableLearnset = sSneaselHisuianTeachableLearnset,
@ -4378,7 +4382,8 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Sneasler,
.iconPalIndex = 2,
//FOOTPRINT(Sneasler)
FOLLOWER(Sneasler, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
//FOLLOWER(Sneasler, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Sneasler, gShinyFollowerPalette_Sneasler)
FOLLOWER(Sneasler, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Sneasler)
.levelUpLearnset = sSneaslerLevelUpLearnset,
.teachableLearnset = sSneaslerTeachableLearnset,
},
@ -4435,7 +4440,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Teddiursa,
.iconPalIndex = 0,
FOOTPRINT(Teddiursa)
FOLLOWER(Teddiursa, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Teddiursa, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Teddiursa, gShinyFollowerPalette_Teddiursa)
.levelUpLearnset = sTeddiursaLevelUpLearnset,
.teachableLearnset = sTeddiursaTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_URSARING}),
@ -4493,7 +4498,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Ursaring,
.iconPalIndex = 2,
FOOTPRINT(Ursaring)
FOLLOWER(Ursaring, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Ursaring, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Ursaring, gShinyFollowerPalette_Ursaring)
.levelUpLearnset = sUrsaringLevelUpLearnset,
.teachableLearnset = sUrsaringTeachableLearnset,
.evolutions = EVOLUTION({EVO_ITEM_NIGHT, ITEM_PEAT_BLOCK, SPECIES_URSALUNA},
@ -4548,7 +4553,8 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Ursaluna,
.iconPalIndex = 2,
//FOOTPRINT(Ursaluna)
FOLLOWER(Ursaluna, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
//FOLLOWER(Ursaluna, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Ursaluna, gShinyFollowerPalette_Ursaluna)
FOLLOWER(Ursaluna, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Ursaluna)
.levelUpLearnset = sUrsalunaLevelUpLearnset,
.teachableLearnset = sUrsalunaTeachableLearnset,
.formSpeciesIdTable = sUrsalunaFormSpeciesIdTable,
@ -4658,7 +4664,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Slugma,
.iconPalIndex = 0,
FOOTPRINT(Slugma)
FOLLOWER(Slugma, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SLITHER)
FOLLOWER(Slugma, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SLITHER, gFollowerPalette_Slugma, gShinyFollowerPalette_Slugma)
.levelUpLearnset = sSlugmaLevelUpLearnset,
.teachableLearnset = sSlugmaTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 38, SPECIES_MAGCARGO}),
@ -4719,7 +4725,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Magcargo,
.iconPalIndex = 0,
FOOTPRINT(Magcargo)
FOLLOWER(Magcargo, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SLITHER)
FOLLOWER(Magcargo, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SLITHER, gFollowerPalette_Magcargo, gShinyFollowerPalette_Magcargo)
.levelUpLearnset = sMagcargoLevelUpLearnset,
.teachableLearnset = sMagcargoTeachableLearnset,
},
@ -4774,7 +4780,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Swinub,
.iconPalIndex = 2,
FOOTPRINT(Swinub)
FOLLOWER(Swinub, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Swinub, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Swinub, gShinyFollowerPalette_Swinub)
.levelUpLearnset = sSwinubLevelUpLearnset,
.teachableLearnset = sSwinubTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 33, SPECIES_PILOSWINE}),
@ -4833,7 +4839,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Piloswine,
.iconPalIndex = 2,
FOOTPRINT(Piloswine)
FOLLOWER(Piloswine, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Piloswine, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Piloswine, gShinyFollowerPalette_Piloswine)
.levelUpLearnset = sPiloswineLevelUpLearnset,
.teachableLearnset = sPiloswineTeachableLearnset,
.evolutions = EVOLUTION({EVO_MOVE, MOVE_ANCIENT_POWER, SPECIES_MAMOSWINE}),
@ -4896,7 +4902,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Mamoswine,
.iconPalIndex = 2,
FOOTPRINT(Mamoswine)
FOLLOWER(Mamoswine, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Mamoswine, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Mamoswine, gShinyFollowerPalette_Mamoswine)
.levelUpLearnset = sMamoswineLevelUpLearnset,
.teachableLearnset = sMamoswineTeachableLearnset,
},
@ -4964,7 +4970,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Corsola,
.iconPalIndex = 0,
FOOTPRINT(Corsola)
FOLLOWER(Corsola, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Corsola, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Corsola, gShinyFollowerPalette_Corsola)
.levelUpLearnset = sCorsolaLevelUpLearnset,
.teachableLearnset = sCorsolaTeachableLearnset,
.formSpeciesIdTable = sCorsolaFormSpeciesIdTable,
@ -5019,7 +5025,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_CorsolaGalarian,
.iconPalIndex = 0,
FOOTPRINT(Corsola)
FOLLOWER(CorsolaGalarian, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(CorsolaGalarian, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_CorsolaGalarian, gShinyFollowerPalette_CorsolaGalarian)
.isGalarianForm = TRUE,
.levelUpLearnset = sCorsolaGalarianLevelUpLearnset,
.teachableLearnset = sCorsolaGalarianTeachableLearnset,
@ -5075,7 +5081,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Cursola,
.iconPalIndex = 0,
FOOTPRINT(Cursola)
FOLLOWER(Cursola, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Cursola, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Cursola, gShinyFollowerPalette_Cursola)
.levelUpLearnset = sCursolaLevelUpLearnset,
.teachableLearnset = sCursolaTeachableLearnset,
},
@ -5131,7 +5137,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Remoraid,
.iconPalIndex = 0,
FOOTPRINT(Remoraid)
FOLLOWER(Remoraid, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT)
FOLLOWER(Remoraid, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, gFollowerPalette_Remoraid, gShinyFollowerPalette_Remoraid)
.levelUpLearnset = sRemoraidLevelUpLearnset,
.teachableLearnset = sRemoraidTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 25, SPECIES_OCTILLERY}),
@ -5191,7 +5197,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Octillery,
.iconPalIndex = 0,
FOOTPRINT(Octillery)
FOLLOWER(Octillery, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SLITHER)
FOLLOWER(Octillery, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SLITHER, gFollowerPalette_Octillery, gShinyFollowerPalette_Octillery)
.levelUpLearnset = sOctilleryLevelUpLearnset,
.teachableLearnset = sOctilleryTeachableLearnset,
},
@ -5246,7 +5252,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Delibird,
.iconPalIndex = 1,
FOOTPRINT(Delibird)
FOLLOWER(Delibird, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Delibird, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Delibird, gShinyFollowerPalette_Delibird)
.levelUpLearnset = sDelibirdLevelUpLearnset,
.teachableLearnset = sDelibirdTeachableLearnset,
},
@ -5302,7 +5308,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Mantyke,
.iconPalIndex = 0,
FOOTPRINT(Mantyke)
FOLLOWER(Mantyke, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Mantyke, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Mantyke, gShinyFollowerPalette_Mantyke)
.levelUpLearnset = sMantykeLevelUpLearnset,
.teachableLearnset = sMantykeTeachableLearnset,
.evolutions = EVOLUTION({EVO_SPECIFIC_MON_IN_PARTY, SPECIES_REMORAID, SPECIES_MANTINE}),
@ -5364,7 +5370,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Mantine,
.iconPalIndex = 2,
FOOTPRINT(Mantine)
FOLLOWER(Mantine, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE)
FOLLOWER(Mantine, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, gFollowerPalette_Mantine, gShinyFollowerPalette_Mantine)
.levelUpLearnset = sMantineLevelUpLearnset,
.teachableLearnset = sMantineTeachableLearnset,
},
@ -5420,7 +5426,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Skarmory,
.iconPalIndex = 0,
FOOTPRINT(Skarmory)
FOLLOWER(Skarmory, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Skarmory, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Skarmory, gShinyFollowerPalette_Skarmory)
.levelUpLearnset = sSkarmoryLevelUpLearnset,
.teachableLearnset = sSkarmoryTeachableLearnset,
},
@ -5475,7 +5481,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Houndour,
.iconPalIndex = 0,
FOOTPRINT(Houndour)
FOLLOWER(Houndour, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Houndour, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Houndour, gShinyFollowerPalette_Houndour)
.levelUpLearnset = sHoundourLevelUpLearnset,
.teachableLearnset = sHoundourTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 24, SPECIES_HOUNDOOM}),
@ -5533,7 +5539,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Houndoom,
.iconPalIndex = 0,
FOOTPRINT(Houndoom)
FOLLOWER(Houndoom, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Houndoom, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Houndoom, gShinyFollowerPalette_Houndoom)
.levelUpLearnset = sHoundoomLevelUpLearnset,
.teachableLearnset = sHoundoomTeachableLearnset,
.formSpeciesIdTable = sHoundoomFormSpeciesIdTable,
@ -5646,7 +5652,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Phanpy,
.iconPalIndex = 0,
FOOTPRINT(Phanpy)
FOLLOWER(Phanpy, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Phanpy, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Phanpy, gShinyFollowerPalette_Phanpy)
.levelUpLearnset = sPhanpyLevelUpLearnset,
.teachableLearnset = sPhanpyTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 25, SPECIES_DONPHAN}),
@ -5705,7 +5711,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Donphan,
.iconPalIndex = 0,
FOOTPRINT(Donphan)
FOLLOWER(Donphan, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Donphan, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Donphan, gShinyFollowerPalette_Donphan)
.levelUpLearnset = sDonphanLevelUpLearnset,
.teachableLearnset = sDonphanTeachableLearnset,
},
@ -5760,7 +5766,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Stantler,
.iconPalIndex = 2,
FOOTPRINT(Stantler)
FOLLOWER(Stantler, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Stantler, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Stantler, gShinyFollowerPalette_Stantler)
.levelUpLearnset = sStantlerLevelUpLearnset,
.teachableLearnset = sStantlerTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL_MOVE_TWENTY_TIMES, MOVE_PSYSHIELD_BASH, SPECIES_WYRDEER}),
@ -5816,7 +5822,8 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Wyrdeer,
.iconPalIndex = 2,
//FOOTPRINT(Wyrdeer)
FOLLOWER(Wyrdeer, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
//FOLLOWER(Wyrdeer, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Wyrdeer, gShinyFollowerPalette_Wyrdeer)
FOLLOWER(Wyrdeer, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Wyrdeer)
.levelUpLearnset = sWyrdeerLevelUpLearnset,
.teachableLearnset = sWyrdeerTeachableLearnset,
},
@ -5872,7 +5879,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Smeargle,
.iconPalIndex = 1,
FOOTPRINT(Smeargle)
FOLLOWER(Smeargle, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Smeargle, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Smeargle, gShinyFollowerPalette_Smeargle)
.tmIlliterate = TRUE,
.levelUpLearnset = sSmeargleLevelUpLearnset,
.teachableLearnset = sSmeargleTeachableLearnset,
@ -5930,7 +5937,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Miltank,
.iconPalIndex = 0,
FOOTPRINT(Miltank)
FOLLOWER(Miltank, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Miltank, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Miltank, gShinyFollowerPalette_Miltank)
.levelUpLearnset = sMiltankLevelUpLearnset,
.teachableLearnset = sMiltankTeachableLearnset,
},
@ -5996,7 +6003,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Raikou,
.iconPalIndex = 2,
FOOTPRINT(Raikou)
FOLLOWER(Raikou, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Raikou, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Raikou, gShinyFollowerPalette_Raikou)
.isLegendary = TRUE,
.levelUpLearnset = sRaikouLevelUpLearnset,
.teachableLearnset = sRaikouTeachableLearnset,
@ -6063,7 +6070,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Entei,
.iconPalIndex = 2,
FOOTPRINT(Entei)
FOLLOWER(Entei, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Entei, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Entei, gShinyFollowerPalette_Entei)
.isLegendary = TRUE,
.levelUpLearnset = sEnteiLevelUpLearnset,
.teachableLearnset = sEnteiTeachableLearnset,
@ -6130,7 +6137,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Suicune,
.iconPalIndex = 2,
FOOTPRINT(Suicune)
FOLLOWER(Suicune, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Suicune, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Suicune, gShinyFollowerPalette_Suicune)
.isLegendary = TRUE,
.levelUpLearnset = sSuicuneLevelUpLearnset,
.teachableLearnset = sSuicuneTeachableLearnset,
@ -6186,7 +6193,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Larvitar,
.iconPalIndex = 1,
FOOTPRINT(Larvitar)
FOLLOWER(Larvitar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Larvitar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Larvitar, gShinyFollowerPalette_Larvitar)
.levelUpLearnset = sLarvitarLevelUpLearnset,
.teachableLearnset = sLarvitarTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_PUPITAR}),
@ -6240,7 +6247,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Pupitar,
.iconPalIndex = 2,
FOOTPRINT(Pupitar)
FOLLOWER(Pupitar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT)
FOLLOWER(Pupitar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_SPOT, gFollowerPalette_Pupitar, gShinyFollowerPalette_Pupitar)
.levelUpLearnset = sPupitarLevelUpLearnset,
.teachableLearnset = sPupitarTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 55, SPECIES_TYRANITAR}),
@ -6301,7 +6308,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Tyranitar,
.iconPalIndex = 4,
FOOTPRINT(Tyranitar)
FOLLOWER(Tyranitar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT)
FOLLOWER(Tyranitar, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, gFollowerPalette_Tyranitar, gShinyFollowerPalette_Tyranitar)
.levelUpLearnset = sTyranitarLevelUpLearnset,
.teachableLearnset = sTyranitarTeachableLearnset,
.formSpeciesIdTable = sTyranitarFormSpeciesIdTable,
@ -6423,7 +6430,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Lugia,
.iconPalIndex = 0,
FOOTPRINT(Lugia)
FOLLOWER(Lugia, SIZE_64x64, SHADOW_SIZE_M, TRACKS_NONE)
FOLLOWER(Lugia, SIZE_64x64, SHADOW_SIZE_M, TRACKS_NONE, gFollowerPalette_Lugia, gShinyFollowerPalette_Lugia)
.isLegendary = TRUE,
.levelUpLearnset = sLugiaLevelUpLearnset,
.teachableLearnset = sLugiaTeachableLearnset,
@ -6488,7 +6495,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_HoOh,
.iconPalIndex = 1,
FOOTPRINT(HoOh)
FOLLOWER(HoOh, SIZE_64x64, SHADOW_SIZE_M, TRACKS_NONE)
FOLLOWER(HoOh, SIZE_64x64, SHADOW_SIZE_M, TRACKS_NONE, gFollowerPalette_HoOh, gShinyFollowerPalette_HoOh)
.isLegendary = TRUE,
.levelUpLearnset = sHoOhLevelUpLearnset,
.teachableLearnset = sHoOhTeachableLearnset,
@ -6553,7 +6560,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Celebi,
.iconPalIndex = 1,
FOOTPRINT(Celebi)
FOLLOWER(Celebi, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE)
FOLLOWER(Celebi, SIZE_32x32, SHADOW_SIZE_M, TRACKS_NONE, gFollowerPalette_Celebi, gShinyFollowerPalette_Celebi)
.isMythical = TRUE,
.levelUpLearnset = sCelebiLevelUpLearnset,
.teachableLearnset = sCelebiTeachableLearnset,

File diff suppressed because it is too large Load Diff

View File

@ -1875,13 +1875,19 @@ static u8 LoadDynamicFollowerPalette(u16 species, u8 form, bool32 shiny)
return paletteNum;
// Use standalone palette, unless entry is OOB or NULL (fallback to front-sprite-based)
if (gFollowerPalettes[species][shiny & 1])
#if OW_FOLLOWERS_SHARE_PALETTE == FALSE
if ((shiny && gSpeciesInfo[species].followerPalette)
|| (!shiny && gSpeciesInfo[species].followerShinyPalette))
{
struct SpritePalette spritePalette = {.tag = shiny ? (species + SPECIES_SHINY_TAG) : species};
spritePalette.data = gFollowerPalettes[species][shiny & 1];
if (shiny)
spritePalette.data = gSpeciesInfo[species].followerShinyPalette;
else
spritePalette.data = gSpeciesInfo[species].followerPalette;
// Check if pal data must be decompressed
if (IsLZ77Data(spritePalette.data, PLTT_SIZE_4BPP, PLTT_SIZE_4BPP)) {
if (IsLZ77Data(spritePalette.data, PLTT_SIZE_4BPP, PLTT_SIZE_4BPP))
{
// IsLZ77Data guarantees word-alignment, so casting this is safe
LZ77UnCompWram((u32*)spritePalette.data, gDecompressionBuffer);
spritePalette.data = (void*)gDecompressionBuffer;
@ -1889,12 +1895,12 @@ static u8 LoadDynamicFollowerPalette(u16 species, u8 form, bool32 shiny)
paletteNum = LoadSpritePalette(&spritePalette);
}
else
#endif //OW_FOLLOWERS_SHARE_PALETTE
{
// Use matching front sprite's normal/shiny palettes
// Load compressed palette
LoadCompressedSpritePaletteWithTag(palette, species);
paletteNum = IndexOfSpritePaletteTag(species); // Tag is always present
}
if (gWeatherPtr->currWeather != WEATHER_FOG_HORIZONTAL) // don't want to weather blend in fog

56
tools/test.py Normal file
View File

@ -0,0 +1,56 @@
import glob
import re
import json
import os
import subprocess
# get compatibility from jsons
def construct_compatibility_dict():
dict_out = {}
count = 0
for pth in sorted(glob.glob('followers/*.png')):
name = pth.replace(".png", "").replace("followers/", "")
count+=1
#if (count == 2):
# break
print(name)
newname = name
newname = newname.replace("_female", "/female")
newname = newname.replace("_hisuian", "/hisuian")
newname = newname.replace("_galarian", "/galarian")
newname = newname.replace("_origin", "/origin")
newname = newname.replace("_therian", "/therian")
newname = newname.replace("_east_sea", "/east_sea")
newname = newname.replace("_crowned", "/crowned")
newname = newname.replace("arceus_", "arceus/")
newname = newname.replace("burmy_", "burmy/")
newname = newname.replace("basculin_", "basculin/")
newname = newname.replace("castform_", "castform/")
newname = newname.replace("calyrex_", "calyrex/")
newname = newname.replace("deerling_", "deerling/")
newname = newname.replace("deoxys_", "deoxys/")
newname = newname.replace("flabebe_", "flabebe/")
newname = newname.replace("floette_", "floette/")
newname = newname.replace("florges_", "florges/")
newname = newname.replace("furfrou_", "furfrou/")
newname = newname.replace("hoopa_", "hoopa/")
newname = newname.replace("lycanroc_", "lycanroc/")
newname = newname.replace("meloetta_", "meloetta/")
newname = newname.replace("necrozma_", "necrozma/")
newname = newname.replace("pichu_", "pichu/")
newname = newname.replace("rotom_", "rotom/")
newname = newname.replace("sawsbuck_", "sawsbuck/")
newname = newname.replace("toxtricity_", "toxtricity/")
newname = newname.replace("unown_", "unown/")
newname = newname.replace("ursaluna_", "ursaluna/")
newname = newname.replace("vivillon_", "vivillon/")
newname = newname.replace("wormadam_", "wormadam/")
os.rename('followers/' + name + '.png', 'followers/' + newname + '/follower.png')
#os.popen('cp followers/' + name + '.png followers/' + name + '/follower.png')
#os.remove('followers/' + name + '.png')
#print(pth)
#subprocess.run(["tools/gbagfx/gbagfx " + name +".png " + name + "_normal.pal'" + str(count) + "'"])
construct_compatibility_dict()