From 182809b515c06cd241cb37345679741c40c57460 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Thu, 8 Aug 2024 14:46:22 -0400 Subject: [PATCH] Made perfect IV count into a granular setting (#5115) * Made perfect IV count into a granular setting * Fixed optional parameter comment in SPECIES_NONE --- include/constants/pokemon.h | 4 + include/pokemon.h | 4 +- src/data/pokemon/species_info.h | 2 +- .../pokemon/species_info/gen_1_families.h | 16 +- .../pokemon/species_info/gen_2_families.h | 6 + .../pokemon/species_info/gen_3_families.h | 18 ++ .../pokemon/species_info/gen_4_families.h | 132 ++++++++------- .../pokemon/species_info/gen_5_families.h | 140 ++++++++------- .../pokemon/species_info/gen_6_families.h | 13 ++ .../pokemon/species_info/gen_7_families.h | 160 +++++++++++------- .../pokemon/species_info/gen_8_families.h | 22 +++ .../pokemon/species_info/gen_9_families.h | 14 ++ src/pokemon.c | 24 +-- 13 files changed, 355 insertions(+), 200 deletions(-) diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 81671e2eb4..9179d628b2 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -335,6 +335,10 @@ enum EvolutionMode { // Used as a signal for givemon to generate a default ability by personality. #define NUM_ABILITY_PERSONALITY 0xFF +#if P_LEGENDARY_PERFECT_IVS >= GEN_6 #define LEGENDARY_PERFECT_IV_COUNT 3 +#else +#define LEGENDARY_PERFECT_IV_COUNT 0 +#endif #endif // GUARD_CONSTANTS_POKEMON_H diff --git a/include/pokemon.h b/include/pokemon.h index 4be40addbf..b3b9c18734 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -439,11 +439,11 @@ struct SpeciesInfo /*0xC4*/ u32 isHisuianForm:1; u32 isPaldeanForm:1; u32 cannotBeTraded:1; - u32 allPerfectIVs:1; + u32 perfectIVCount:3; // This species will always generate with the specified amount of perfect IVs. u32 dexForceRequired:1; // This species will be taken into account for Pokédex ratings even if they have the "isMythical" flag set. u32 tmIlliterate:1; // This species will be unable to learn the universal moves. u32 isFrontierBanned:1; // This species is not allowed to participate in Battle Frontier facilities. - u32 padding4:14; + u32 padding4:12; // Move Data /* 0x80 */ const struct LevelUpMove *levelUpLearnset; /* 0x84 */ const u16 *teachableLearnset; diff --git a/src/data/pokemon/species_info.h b/src/data/pokemon/species_info.h index 4f21223eee..61da487389 100644 --- a/src/data/pokemon/species_info.h +++ b/src/data/pokemon/species_info.h @@ -211,7 +211,7 @@ const struct SpeciesInfo gSpeciesInfo[] = {EVO_ITEM, ITEM_MOOMOO_MILK, SPECIES_NONE}), //.formSpeciesIdTable = sNoneFormSpeciesIdTable, //.formChangeTable = sNoneFormChangeTable, - .allPerfectIVs = TRUE, + //.perfectIVCount = NUM_STATS, }, */ }; diff --git a/src/data/pokemon/species_info/gen_1_families.h b/src/data/pokemon/species_info/gen_1_families.h index e35bb848b7..5a6d447106 100644 --- a/src/data/pokemon/species_info/gen_1_families.h +++ b/src/data/pokemon/species_info/gen_1_families.h @@ -2090,6 +2090,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = FOOTPRINT(Raticate) .isTotem = TRUE, .isAlolanForm = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRaticateAlolanLevelUpLearnset, .teachableLearnset = sRaticateAlolanTeachableLearnset, .formSpeciesIdTable = sRaticateFormSpeciesIdTable, @@ -3411,7 +3412,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = #endif FOOTPRINT(Pikachu) .cannotBeTraded = TRUE, - .allPerfectIVs = TRUE, + .perfectIVCount = NUM_STATS, .levelUpLearnset = sPikachuLevelUpLearnset, .teachableLearnset = sPikachuTeachableLearnset, .formSpeciesIdTable = sPikachuFormSpeciesIdTable, @@ -11836,6 +11837,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = FOOTPRINT(Marowak) .isTotem = TRUE, .isAlolanForm = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMarowakAlolanLevelUpLearnset, .teachableLearnset = sMarowakAlolanTeachableLearnset, .formSpeciesIdTable = sMarowakFormSpeciesIdTable, @@ -15575,7 +15577,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = #endif FOOTPRINT(Eevee) .cannotBeTraded = TRUE, - .allPerfectIVs = TRUE, + .perfectIVCount = NUM_STATS, .levelUpLearnset = sEeveeLevelUpLearnset, .teachableLearnset = sEeveeTeachableLearnset, .eggMoveLearnset = sEeveeEggMoveLearnset, @@ -16923,6 +16925,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Articuno ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sArticunoLevelUpLearnset, .teachableLearnset = sArticunoTeachableLearnset, .formSpeciesIdTable = sArticunoFormSpeciesIdTable, @@ -16988,6 +16991,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = ) .isLegendary = TRUE, .isGalarianForm = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sArticunoGalarianLevelUpLearnset, .teachableLearnset = sArticunoGalarianTeachableLearnset, .formSpeciesIdTable = sArticunoFormSpeciesIdTable, @@ -17064,6 +17068,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Zapdos ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZapdosLevelUpLearnset, .teachableLearnset = sZapdosTeachableLearnset, .formSpeciesIdTable = sZapdosFormSpeciesIdTable, @@ -17128,6 +17133,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = ) .isLegendary = TRUE, .isGalarianForm = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZapdosGalarianLevelUpLearnset, .teachableLearnset = sZapdosGalarianTeachableLearnset, .formSpeciesIdTable = sZapdosFormSpeciesIdTable, @@ -17199,6 +17205,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Moltres ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMoltresLevelUpLearnset, .teachableLearnset = sMoltresTeachableLearnset, .formSpeciesIdTable = sMoltresFormSpeciesIdTable, @@ -17263,6 +17270,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = ) .isLegendary = TRUE, .isGalarianForm = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMoltresGalarianLevelUpLearnset, .teachableLearnset = sMoltresGalarianTeachableLearnset, .formSpeciesIdTable = sMoltresFormSpeciesIdTable, @@ -17529,6 +17537,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMewtwoLevelUpLearnset, .teachableLearnset = sMewtwoTeachableLearnset, .formSpeciesIdTable = sMewtwoFormSpeciesIdTable, @@ -17587,6 +17596,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .isLegendary = TRUE, .isMegaEvolution = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMewtwoLevelUpLearnset, .teachableLearnset = sMewtwoTeachableLearnset, .formSpeciesIdTable = sMewtwoFormSpeciesIdTable, @@ -17645,6 +17655,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .isLegendary = TRUE, .isMegaEvolution = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMewtwoLevelUpLearnset, .teachableLearnset = sMewtwoTeachableLearnset, .formSpeciesIdTable = sMewtwoFormSpeciesIdTable, @@ -17721,6 +17732,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMewLevelUpLearnset, .teachableLearnset = sMewTeachableLearnset, }, diff --git a/src/data/pokemon/species_info/gen_2_families.h b/src/data/pokemon/species_info/gen_2_families.h index 1bfbb41bec..ee4ab08f38 100644 --- a/src/data/pokemon/species_info/gen_2_families.h +++ b/src/data/pokemon/species_info/gen_2_families.h @@ -6772,6 +6772,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gShinyOverworldPalette_Raikou ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRaikouLevelUpLearnset, .teachableLearnset = sRaikouTeachableLearnset, }, @@ -6846,6 +6847,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gShinyOverworldPalette_Entei ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sEnteiLevelUpLearnset, .teachableLearnset = sEnteiTeachableLearnset, }, @@ -6920,6 +6922,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gShinyOverworldPalette_Suicune ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sSuicuneLevelUpLearnset, .teachableLearnset = sSuicuneTeachableLearnset, }, @@ -7243,6 +7246,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLugiaLevelUpLearnset, .teachableLearnset = sLugiaTeachableLearnset, }, @@ -7316,6 +7320,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sHoOhLevelUpLearnset, .teachableLearnset = sHoOhTeachableLearnset, }, @@ -7389,6 +7394,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCelebiLevelUpLearnset, .teachableLearnset = sCelebiTeachableLearnset, }, diff --git a/src/data/pokemon/species_info/gen_3_families.h b/src/data/pokemon/species_info/gen_3_families.h index 8a23bb05fd..667dc54d0e 100644 --- a/src/data/pokemon/species_info/gen_3_families.h +++ b/src/data/pokemon/species_info/gen_3_families.h @@ -10212,6 +10212,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Regirock ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRegirockLevelUpLearnset, .teachableLearnset = sRegirockTeachableLearnset, }, @@ -10281,6 +10282,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Regice ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRegiceLevelUpLearnset, .teachableLearnset = sRegiceTeachableLearnset, }, @@ -10351,6 +10353,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Registeel ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRegisteelLevelUpLearnset, .teachableLearnset = sRegisteelTeachableLearnset, }, @@ -10421,6 +10424,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Latias ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLatiasLevelUpLearnset, .teachableLearnset = sLatiasTeachableLearnset, .formSpeciesIdTable = sLatiasFormSpeciesIdTable, @@ -10479,6 +10483,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = FOOTPRINT(Latias) .isLegendary = TRUE, .isMegaEvolution = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLatiasLevelUpLearnset, .teachableLearnset = sLatiasTeachableLearnset, .formSpeciesIdTable = sLatiasFormSpeciesIdTable, @@ -10552,6 +10557,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Latios ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLatiosLevelUpLearnset, .teachableLearnset = sLatiosTeachableLearnset, .formSpeciesIdTable = sLatiosFormSpeciesIdTable, @@ -10610,6 +10616,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = FOOTPRINT(Latios) .isLegendary = TRUE, .isMegaEvolution = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLatiosLevelUpLearnset, .teachableLearnset = sLatiosTeachableLearnset, .formSpeciesIdTable = sLatiosFormSpeciesIdTable, @@ -10684,6 +10691,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKyogreLevelUpLearnset, .teachableLearnset = sKyogreTeachableLearnset, .formSpeciesIdTable = sKyogreFormSpeciesIdTable, @@ -10741,6 +10749,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .isLegendary = TRUE, .isPrimalReversion = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKyogreLevelUpLearnset, .teachableLearnset = sKyogreTeachableLearnset, .formSpeciesIdTable = sKyogreFormSpeciesIdTable, @@ -10814,6 +10823,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sGroudonLevelUpLearnset, .teachableLearnset = sGroudonTeachableLearnset, .formSpeciesIdTable = sGroudonFormSpeciesIdTable, @@ -10872,6 +10882,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .isLegendary = TRUE, .isPrimalReversion = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sGroudonLevelUpLearnset, .teachableLearnset = sGroudonTeachableLearnset, .formSpeciesIdTable = sGroudonFormSpeciesIdTable, @@ -10948,6 +10959,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRayquazaLevelUpLearnset, .teachableLearnset = sRayquazaTeachableLearnset, .formSpeciesIdTable = sRayquazaFormSpeciesIdTable, @@ -11008,6 +11020,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .isLegendary = TRUE, .isMegaEvolution = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRayquazaLevelUpLearnset, .teachableLearnset = sRayquazaTeachableLearnset, .formSpeciesIdTable = sRayquazaFormSpeciesIdTable, @@ -11084,6 +11097,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sJirachiLevelUpLearnset, .teachableLearnset = sJirachiTeachableLearnset, }, @@ -11154,6 +11168,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDeoxysNormalLevelUpLearnset, .teachableLearnset = sDeoxysNormalTeachableLearnset, .formSpeciesIdTable = sDeoxysFormSpeciesIdTable, @@ -11215,6 +11230,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDeoxysAttackLevelUpLearnset, .teachableLearnset = sDeoxysAttackTeachableLearnset, .formSpeciesIdTable = sDeoxysFormSpeciesIdTable, @@ -11276,6 +11292,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDeoxysDefenseLevelUpLearnset, .teachableLearnset = sDeoxysDefenseTeachableLearnset, .formSpeciesIdTable = sDeoxysFormSpeciesIdTable, @@ -11337,6 +11354,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDeoxysSpeedLevelUpLearnset, .teachableLearnset = sDeoxysSpeedTeachableLearnset, .formSpeciesIdTable = sDeoxysFormSpeciesIdTable, diff --git a/src/data/pokemon/species_info/gen_4_families.h b/src/data/pokemon/species_info/gen_4_families.h index faa9ed73b4..828d098a5a 100644 --- a/src/data/pokemon/species_info/gen_4_families.h +++ b/src/data/pokemon/species_info/gen_4_families.h @@ -5235,6 +5235,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Uxie ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sUxieLevelUpLearnset, .teachableLearnset = sUxieTeachableLearnset, }, @@ -5307,6 +5308,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Mesprit ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMespritLevelUpLearnset, .teachableLearnset = sMespritTeachableLearnset, }, @@ -5378,6 +5380,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Azelf ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sAzelfLevelUpLearnset, .teachableLearnset = sAzelfTeachableLearnset, }, @@ -5450,6 +5453,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDialgaLevelUpLearnset, .teachableLearnset = sDialgaTeachableLearnset, .formSpeciesIdTable = sDialgaFormSpeciesIdTable, @@ -5514,6 +5518,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDialgaLevelUpLearnset, .teachableLearnset = sDialgaTeachableLearnset, .formSpeciesIdTable = sDialgaFormSpeciesIdTable, @@ -5588,6 +5593,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sPalkiaLevelUpLearnset, .teachableLearnset = sPalkiaTeachableLearnset, .formSpeciesIdTable = sPalkiaFormSpeciesIdTable, @@ -5652,6 +5658,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sPalkiaLevelUpLearnset, .teachableLearnset = sPalkiaTeachableLearnset, .formSpeciesIdTable = sPalkiaFormSpeciesIdTable, @@ -5723,6 +5730,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Heatran ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sHeatranLevelUpLearnset, .teachableLearnset = sHeatranTeachableLearnset, }, @@ -5792,6 +5800,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Regigigas ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRegigigasLevelUpLearnset, .teachableLearnset = sRegigigasTeachableLearnset, }, @@ -5864,6 +5873,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sGiratinaLevelUpLearnset, .teachableLearnset = sGiratinaTeachableLearnset, .formSpeciesIdTable = sGiratinaFormSpeciesIdTable, @@ -5929,6 +5939,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sGiratinaLevelUpLearnset, .teachableLearnset = sGiratinaTeachableLearnset, .formSpeciesIdTable = sGiratinaFormSpeciesIdTable, @@ -6001,6 +6012,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Cresselia ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCresseliaLevelUpLearnset, .teachableLearnset = sCresseliaTeachableLearnset, }, @@ -6072,6 +6084,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sPhioneLevelUpLearnset, .teachableLearnset = sPhioneTeachableLearnset, }, @@ -6141,6 +6154,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sManaphyLevelUpLearnset, .teachableLearnset = sManaphyTeachableLearnset, }, @@ -6213,6 +6227,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDarkraiLevelUpLearnset, .teachableLearnset = sDarkraiTeachableLearnset, }, @@ -6287,6 +6302,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sShayminLandLevelUpLearnset, .teachableLearnset = sShayminLandTeachableLearnset, .formSpeciesIdTable = sShayminFormSpeciesIdTable, @@ -6350,6 +6366,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = FOOTPRINT(Shaymin) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sShayminSkyLevelUpLearnset, .teachableLearnset = sShayminSkyTeachableLearnset, .formSpeciesIdTable = sShayminFormSpeciesIdTable, @@ -6375,63 +6392,64 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .iconPalIndex = 1, #endif -#define ARCEUS_SPECIES_INFO(type, typeName, iconPal) \ - { \ - .baseHP = 120, \ - .baseAttack = 120, \ - .baseDefense = 120, \ - .baseSpeed = 120, \ - .baseSpAttack = 120, \ - .baseSpDefense = 120, \ - .types = MON_TYPES(type), \ - .catchRate = 3, \ - .expYield = ARCEUS_EXP_YIELD, \ - .evYield_HP = 3, \ - .genderRatio = MON_GENDERLESS, \ - .eggCycles = 120, \ - .friendship = 0, \ - .growthRate = GROWTH_SLOW, \ - .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), \ - .abilities = { ABILITY_MULTITYPE, ABILITY_NONE, ABILITY_NONE }, \ - .bodyColor = BODY_COLOR_WHITE, \ - .speciesName = _("Arceus"), \ - .cryId = CRY_ARCEUS, \ - .natDexNum = NATIONAL_DEX_ARCEUS, \ - .categoryName = _("Alpha"), \ - .height = 32, \ - .weight = 3200, \ - .description = gArceusPokedexText, \ - .pokemonScale = 256, \ - .pokemonOffset = 0, \ - .trainerScale = 495, \ - .trainerOffset = 10, \ - .frontPic = gMonFrontPic_Arceus, \ - .frontPicSize = MON_COORDS_SIZE(64, 64), \ - .frontPicYOffset = 0, \ - .frontAnimFrames = sAnims_Arceus, \ - .frontAnimId = ANIM_GROW_VIBRATE, \ - .backPic = gMonBackPic_Arceus, \ - .backPicSize = MON_COORDS_SIZE(64, 64), \ - .backPicYOffset = 3, \ - .backAnimId = BACK_ANIM_GROW_STUTTER, \ - .palette = gMonPalette_Arceus ##typeName, \ - .shinyPalette = gMonShinyPalette_Arceus ##typeName, \ - ARCEUS_ICON(typeName, iconPal) \ - FOOTPRINT(Arceus) \ - OVERWORLD( \ - sPicTable_Arceus ##typeName, \ - SIZE_64x64, \ - SHADOW_SIZE_M, \ - TRACKS_FOOT, \ - gOverworldPalette_Arceus ##typeName, \ - gShinyOverworldPalette_Arceus ##typeName \ - ) \ - .levelUpLearnset = sArceusLevelUpLearnset, \ - .teachableLearnset = sArceusTeachableLearnset, \ - .formSpeciesIdTable = sArceusFormSpeciesIdTable, \ - .formChangeTable = sArceusFormChangeTable, \ - .isMythical = TRUE, \ - .isFrontierBanned = TRUE, \ +#define ARCEUS_SPECIES_INFO(type, typeName, iconPal) \ + { \ + .baseHP = 120, \ + .baseAttack = 120, \ + .baseDefense = 120, \ + .baseSpeed = 120, \ + .baseSpAttack = 120, \ + .baseSpDefense = 120, \ + .types = MON_TYPES(type), \ + .catchRate = 3, \ + .expYield = ARCEUS_EXP_YIELD, \ + .evYield_HP = 3, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), \ + .abilities = { ABILITY_MULTITYPE, ABILITY_NONE, ABILITY_NONE }, \ + .bodyColor = BODY_COLOR_WHITE, \ + .speciesName = _("Arceus"), \ + .cryId = CRY_ARCEUS, \ + .natDexNum = NATIONAL_DEX_ARCEUS, \ + .categoryName = _("Alpha"), \ + .height = 32, \ + .weight = 3200, \ + .description = gArceusPokedexText, \ + .pokemonScale = 256, \ + .pokemonOffset = 0, \ + .trainerScale = 495, \ + .trainerOffset = 10, \ + .frontPic = gMonFrontPic_Arceus, \ + .frontPicSize = MON_COORDS_SIZE(64, 64), \ + .frontPicYOffset = 0, \ + .frontAnimFrames = sAnims_Arceus, \ + .frontAnimId = ANIM_GROW_VIBRATE, \ + .backPic = gMonBackPic_Arceus, \ + .backPicSize = MON_COORDS_SIZE(64, 64), \ + .backPicYOffset = 3, \ + .backAnimId = BACK_ANIM_GROW_STUTTER, \ + .palette = gMonPalette_Arceus ##typeName, \ + .shinyPalette = gMonShinyPalette_Arceus ##typeName, \ + ARCEUS_ICON(typeName, iconPal) \ + FOOTPRINT(Arceus) \ + OVERWORLD( \ + sPicTable_Arceus ##typeName, \ + SIZE_64x64, \ + SHADOW_SIZE_M, \ + TRACKS_FOOT, \ + gOverworldPalette_Arceus ##typeName, \ + gShinyOverworldPalette_Arceus ##typeName \ + ) \ + .levelUpLearnset = sArceusLevelUpLearnset, \ + .teachableLearnset = sArceusTeachableLearnset, \ + .formSpeciesIdTable = sArceusFormSpeciesIdTable, \ + .formChangeTable = sArceusFormChangeTable, \ + .isMythical = TRUE, \ + .isFrontierBanned = TRUE, \ + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, \ } [SPECIES_ARCEUS_NORMAL] = ARCEUS_SPECIES_INFO(TYPE_NORMAL, Normal, 1), diff --git a/src/data/pokemon/species_info/gen_5_families.h b/src/data/pokemon/species_info/gen_5_families.h index ffa2dd4a1c..2495cfa961 100644 --- a/src/data/pokemon/species_info/gen_5_families.h +++ b/src/data/pokemon/species_info/gen_5_families.h @@ -62,6 +62,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sVictiniLevelUpLearnset, .teachableLearnset = sVictiniTeachableLearnset, }, @@ -10795,6 +10796,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = gShinyOverworldPalette_Cobalion ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCobalionLevelUpLearnset, .teachableLearnset = sCobalionTeachableLearnset, }, @@ -10858,6 +10860,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = gShinyOverworldPalette_Terrakion ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTerrakionLevelUpLearnset, .teachableLearnset = sTerrakionTeachableLearnset, }, @@ -10921,6 +10924,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = gShinyOverworldPalette_Virizion ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sVirizionLevelUpLearnset, .teachableLearnset = sVirizionTeachableLearnset, }, @@ -10985,6 +10989,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = gShinyOverworldPalette_TornadusIncarnate ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTornadusLevelUpLearnset, .teachableLearnset = sTornadusTeachableLearnset, .formSpeciesIdTable = sTornadusFormSpeciesIdTable, @@ -11040,6 +11045,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .iconPalIndex = 1, FOOTPRINT(Tornadus) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTornadusLevelUpLearnset, .teachableLearnset = sTornadusTeachableLearnset, .formSpeciesIdTable = sTornadusFormSpeciesIdTable, @@ -11106,6 +11112,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = gShinyOverworldPalette_ThundurusIncarnate ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sThundurusLevelUpLearnset, .teachableLearnset = sThundurusTeachableLearnset, .formSpeciesIdTable = sThundurusFormSpeciesIdTable, @@ -11162,6 +11169,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .iconPalIndex = 0, FOOTPRINT(Thundurus) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sThundurusLevelUpLearnset, .teachableLearnset = sThundurusTeachableLearnset, .formSpeciesIdTable = sThundurusFormSpeciesIdTable, @@ -11228,6 +11236,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sReshiramLevelUpLearnset, .teachableLearnset = sReshiramTeachableLearnset, }, @@ -11292,6 +11301,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZekromLevelUpLearnset, .teachableLearnset = sZekromTeachableLearnset, }, @@ -11356,6 +11366,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = gShinyOverworldPalette_LandorusIncarnate ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLandorusLevelUpLearnset, .teachableLearnset = sLandorusTeachableLearnset, .formSpeciesIdTable = sLandorusFormSpeciesIdTable, @@ -11411,6 +11422,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .iconPalIndex = 0, FOOTPRINT(Landorus) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLandorusLevelUpLearnset, .teachableLearnset = sLandorusTeachableLearnset, .formSpeciesIdTable = sLandorusFormSpeciesIdTable, @@ -11480,6 +11492,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKyuremLevelUpLearnset, .teachableLearnset = sKyuremTeachableLearnset, .formSpeciesIdTable = sKyuremFormSpeciesIdTable, @@ -11544,6 +11557,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .isLegendary = TRUE, .cannotBeTraded = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKyuremWhiteLevelUpLearnset, .teachableLearnset = sKyuremTeachableLearnset, .formSpeciesIdTable = sKyuremFormSpeciesIdTable, @@ -11607,6 +11621,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .isLegendary = TRUE, .cannotBeTraded = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKyuremBlackLevelUpLearnset, .teachableLearnset = sKyuremTeachableLearnset, .formSpeciesIdTable = sKyuremFormSpeciesIdTable, @@ -11673,6 +11688,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKeldeoLevelUpLearnset, .teachableLearnset = sKeldeoTeachableLearnset, .formSpeciesIdTable = sKeldeoFormSpeciesIdTable, @@ -11730,6 +11746,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = FOOTPRINT(Keldeo) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKeldeoLevelUpLearnset, .teachableLearnset = sKeldeoTeachableLearnset, .formSpeciesIdTable = sKeldeoFormSpeciesIdTable, @@ -11802,6 +11819,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMeloettaLevelUpLearnset, .teachableLearnset = sMeloettaTeachableLearnset, .formSpeciesIdTable = sMeloettaFormSpeciesIdTable, @@ -11871,6 +11889,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMeloettaLevelUpLearnset, .teachableLearnset = sMeloettaTeachableLearnset, .formSpeciesIdTable = sMeloettaFormSpeciesIdTable, @@ -11879,66 +11898,67 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = #endif //P_FAMILY_MELOETTA #if P_FAMILY_GENESECT -#define GENESECT_SPECIES_INFO(form) \ - { \ - .baseHP = 71, \ - .baseAttack = 120, \ - .baseDefense = 95, \ - .baseSpeed = 99, \ - .baseSpAttack = 120, \ - .baseSpDefense = 95, \ - .types = MON_TYPES(TYPE_BUG, TYPE_STEEL), \ - .catchRate = 3, \ - .expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 300 : 270, \ - .evYield_Attack = 1, \ - .evYield_Speed = 1, \ - .evYield_SpAttack = 1, \ - .genderRatio = MON_GENDERLESS, \ - .eggCycles = 120, \ - .friendship = 0, \ - .growthRate = GROWTH_SLOW, \ - .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), \ - .abilities = { ABILITY_DOWNLOAD, ABILITY_NONE, ABILITY_NONE }, \ - .bodyColor = BODY_COLOR_PURPLE, \ - .speciesName = _("Genesect"), \ - .cryId = CRY_GENESECT, \ - .natDexNum = NATIONAL_DEX_GENESECT, \ - .categoryName = _("Paleozoic"), \ - .height = 15, \ - .weight = 825, \ - .description = gGenesectPokedexText, \ - .pokemonScale = 268, \ - .pokemonOffset = 2, \ - .trainerScale = 271, \ - .trainerOffset = 0, \ - .frontPic = gMonFrontPic_Genesect, \ - .frontPicSize = MON_COORDS_SIZE(56, 64), \ - .frontPicYOffset = 0, \ - .frontAnimFrames = sAnims_Genesect, \ - .frontAnimId = ANIM_H_VIBRATE, \ - .backPic = gMonBackPic_Genesect, \ - .backPicSize = MON_COORDS_SIZE(64, 48), \ - .backPicYOffset = 8, \ - .backAnimId = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, \ - .palette = gMonPalette_##form, \ - .shinyPalette = gMonShinyPalette_##form, \ - .iconSprite = gMonIcon_Genesect, \ - .iconPalIndex = 2, \ - FOOTPRINT(Genesect) \ - OVERWORLD( \ - sPicTable_Genesect, \ - SIZE_32x32, \ - SHADOW_SIZE_M, \ - TRACKS_FOOT, \ - gOverworldPalette_Genesect, \ - gShinyOverworldPalette_Genesect \ - ) \ - .levelUpLearnset = sGenesectLevelUpLearnset, \ - .teachableLearnset = sGenesectTeachableLearnset, \ - .formSpeciesIdTable = sGenesectFormSpeciesIdTable, \ - .formChangeTable = sGenesectFormChangeTable, \ - .isMythical = TRUE, \ - .isFrontierBanned = TRUE, \ +#define GENESECT_SPECIES_INFO(form) \ + { \ + .baseHP = 71, \ + .baseAttack = 120, \ + .baseDefense = 95, \ + .baseSpeed = 99, \ + .baseSpAttack = 120, \ + .baseSpDefense = 95, \ + .types = MON_TYPES(TYPE_BUG, TYPE_STEEL), \ + .catchRate = 3, \ + .expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 300 : 270, \ + .evYield_Attack = 1, \ + .evYield_Speed = 1, \ + .evYield_SpAttack = 1, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), \ + .abilities = { ABILITY_DOWNLOAD, ABILITY_NONE, ABILITY_NONE }, \ + .bodyColor = BODY_COLOR_PURPLE, \ + .speciesName = _("Genesect"), \ + .cryId = CRY_GENESECT, \ + .natDexNum = NATIONAL_DEX_GENESECT, \ + .categoryName = _("Paleozoic"), \ + .height = 15, \ + .weight = 825, \ + .description = gGenesectPokedexText, \ + .pokemonScale = 268, \ + .pokemonOffset = 2, \ + .trainerScale = 271, \ + .trainerOffset = 0, \ + .frontPic = gMonFrontPic_Genesect, \ + .frontPicSize = MON_COORDS_SIZE(56, 64), \ + .frontPicYOffset = 0, \ + .frontAnimFrames = sAnims_Genesect, \ + .frontAnimId = ANIM_H_VIBRATE, \ + .backPic = gMonBackPic_Genesect, \ + .backPicSize = MON_COORDS_SIZE(64, 48), \ + .backPicYOffset = 8, \ + .backAnimId = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, \ + .palette = gMonPalette_##form, \ + .shinyPalette = gMonShinyPalette_##form, \ + .iconSprite = gMonIcon_Genesect, \ + .iconPalIndex = 2, \ + FOOTPRINT(Genesect) \ + OVERWORLD( \ + sPicTable_Genesect, \ + SIZE_32x32, \ + SHADOW_SIZE_M, \ + TRACKS_FOOT, \ + gOverworldPalette_Genesect, \ + gShinyOverworldPalette_Genesect \ + ) \ + .levelUpLearnset = sGenesectLevelUpLearnset, \ + .teachableLearnset = sGenesectTeachableLearnset, \ + .formSpeciesIdTable = sGenesectFormSpeciesIdTable, \ + .formChangeTable = sGenesectFormChangeTable, \ + .isMythical = TRUE, \ + .isFrontierBanned = TRUE, \ + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, \ } [SPECIES_GENESECT] = GENESECT_SPECIES_INFO(Genesect), diff --git a/src/data/pokemon/species_info/gen_6_families.h b/src/data/pokemon/species_info/gen_6_families.h index 46c776639c..c984ce9547 100644 --- a/src/data/pokemon/species_info/gen_6_families.h +++ b/src/data/pokemon/species_info/gen_6_families.h @@ -5280,6 +5280,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sXerneasLevelUpLearnset, .teachableLearnset = sXerneasTeachableLearnset, .formSpeciesIdTable = sXerneasFormSpeciesIdTable, @@ -5340,6 +5341,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sXerneasLevelUpLearnset, .teachableLearnset = sXerneasTeachableLearnset, .formSpeciesIdTable = sXerneasFormSpeciesIdTable, @@ -5407,6 +5409,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sYveltalLevelUpLearnset, .teachableLearnset = sYveltalTeachableLearnset, }, @@ -5468,6 +5471,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZygardeLevelUpLearnset, .teachableLearnset = sZygardeTeachableLearnset, .formSpeciesIdTable = sZygardeFormSpeciesIdTable, @@ -5528,6 +5532,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZygardeLevelUpLearnset, .teachableLearnset = sZygardeTeachableLearnset, .formSpeciesIdTable = sZygardeFormSpeciesIdTable, @@ -5580,6 +5585,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = FOOTPRINT(Zygarde) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZygardeLevelUpLearnset, .teachableLearnset = sZygardeTeachableLearnset, .formSpeciesIdTable = sZygardeFormSpeciesIdTable, @@ -5633,6 +5639,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = FOOTPRINT(Zygarde) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZygardeLevelUpLearnset, .teachableLearnset = sZygardeTeachableLearnset, .formSpeciesIdTable = sZygardeFormSpeciesIdTable, @@ -5690,6 +5697,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = FOOTPRINT(Zygarde) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZygardeLevelUpLearnset, .teachableLearnset = sZygardeTeachableLearnset, .formSpeciesIdTable = sZygardeFormSpeciesIdTable, @@ -5757,6 +5765,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDiancieLevelUpLearnset, .teachableLearnset = sDiancieTeachableLearnset, .formSpeciesIdTable = sDiancieFormSpeciesIdTable, @@ -5816,6 +5825,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .isMythical = TRUE, .isMegaEvolution = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDiancieLevelUpLearnset, .teachableLearnset = sDiancieTeachableLearnset, .formSpeciesIdTable = sDiancieFormSpeciesIdTable, @@ -5884,6 +5894,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sHoopaConfinedLevelUpLearnset, .teachableLearnset = sHoopaConfinedTeachableLearnset, .formSpeciesIdTable = sHoopaFormSpeciesIdTable, @@ -5949,6 +5960,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sHoopaUnboundLevelUpLearnset, .teachableLearnset = sHoopaUnboundTeachableLearnset, .formSpeciesIdTable = sHoopaFormSpeciesIdTable, @@ -6015,6 +6027,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sVolcanionLevelUpLearnset, .teachableLearnset = sVolcanionTeachableLearnset, }, diff --git a/src/data/pokemon/species_info/gen_7_families.h b/src/data/pokemon/species_info/gen_7_families.h index 4669051d04..c16220ca62 100644 --- a/src/data/pokemon/species_info/gen_7_families.h +++ b/src/data/pokemon/species_info/gen_7_families.h @@ -989,6 +989,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Gumshoos ) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sGumshoosLevelUpLearnset, .teachableLearnset = sGumshoosTeachableLearnset, .formSpeciesIdTable = sGumshoosFormSpeciesIdTable, @@ -1234,6 +1235,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Vikavolt ) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sVikavoltLevelUpLearnset, .teachableLearnset = sVikavoltTeachableLearnset, .formSpeciesIdTable = sVikavoltFormSpeciesIdTable, @@ -1781,6 +1783,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Ribombee ) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRibombeeLevelUpLearnset, .teachableLearnset = sRibombeeTeachableLearnset, .formSpeciesIdTable = sRibombeeFormSpeciesIdTable, @@ -2641,6 +2644,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Araquanid ) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sAraquanidLevelUpLearnset, .teachableLearnset = sAraquanidTeachableLearnset, .formSpeciesIdTable = sAraquanidFormSpeciesIdTable, @@ -2824,6 +2828,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Lurantis ) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLurantisLevelUpLearnset, .teachableLearnset = sLurantisTeachableLearnset, .formSpeciesIdTable = sLurantisFormSpeciesIdTable, @@ -3135,6 +3140,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Salazzle ) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sSalazzleLevelUpLearnset, .teachableLearnset = sSalazzleTeachableLearnset, .formSpeciesIdTable = sSalanditFormSpeciesIdTable, @@ -4018,70 +4024,72 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_TypeNull ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTypeNullLevelUpLearnset, .teachableLearnset = sTypeNullTeachableLearnset, .evolutions = EVOLUTION({EVO_FRIENDSHIP, 0, SPECIES_SILVALLY_NORMAL}), }, -#define SILVALLY_SPECIES_INFO(type, _palette) \ - { \ - .baseHP = 95, \ - .baseAttack = 95, \ - .baseDefense = 95, \ - .baseSpeed = 95, \ - .baseSpAttack = 95, \ - .baseSpDefense = 95, \ - .types = MON_TYPES(type), \ - .catchRate = 3, \ - .expYield = 257, \ - .evYield_HP = 3, \ - .genderRatio = MON_GENDERLESS, \ - .eggCycles = 120, \ - .friendship = 0, \ - .growthRate = GROWTH_SLOW, \ - .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), \ - .abilities = { ABILITY_RKS_SYSTEM, ABILITY_NONE, ABILITY_NONE }, \ - .bodyColor = BODY_COLOR_GRAY, \ - .isLegendary = TRUE, \ - .speciesName = _("Silvally"), \ - .cryId = CRY_SILVALLY, \ - .natDexNum = NATIONAL_DEX_SILVALLY, \ - .categoryName = _("Synthetic"), \ - .height = 23, \ - .weight = 1005, \ - .description = (type == TYPE_NORMAL \ - ? gSilvallyNormalPokedexText \ - : gSilvallyMemoryPokedexText), \ - .pokemonScale = 256, \ - .pokemonOffset = 0, \ - .trainerScale = 342, \ - .trainerOffset = 7, \ - .frontPic = gMonFrontPic_Silvally, \ - .frontPicSize = MON_COORDS_SIZE(64, 64), \ - .frontPicYOffset = 0, \ - .frontAnimFrames = sAnims_Silvally, \ - .frontAnimId = ANIM_V_SHAKE, \ - .backPic = gMonBackPic_Silvally, \ - .backPicSize = MON_COORDS_SIZE(56, 64), \ - .backPicYOffset = 0, \ - /*.backAnimId = BACK_ANIM_NONE,*/ \ - .palette = gMonPalette_Silvally##_palette, \ - .shinyPalette = gMonShinyPalette_Silvally##_palette, \ - .iconSprite = gMonIcon_Silvally, \ - .iconPalIndex = 0, \ - FOOTPRINT(Silvally) \ - OVERWORLD( \ - sPicTable_Silvally, \ - SIZE_32x32, \ - SHADOW_SIZE_M, \ - TRACKS_FOOT, \ - gOverworldPalette_Silvally, \ - gShinyOverworldPalette_Silvally \ - ) \ - .levelUpLearnset = sSilvallyLevelUpLearnset, \ - .teachableLearnset = sSilvallyTeachableLearnset, \ - .formSpeciesIdTable = sSilvallyFormSpeciesIdTable, \ - .formChangeTable = sSilvallyFormChangeTable, \ +#define SILVALLY_SPECIES_INFO(type, _palette) \ + { \ + .baseHP = 95, \ + .baseAttack = 95, \ + .baseDefense = 95, \ + .baseSpeed = 95, \ + .baseSpAttack = 95, \ + .baseSpDefense = 95, \ + .types = MON_TYPES(type), \ + .catchRate = 3, \ + .expYield = 257, \ + .evYield_HP = 3, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), \ + .abilities = { ABILITY_RKS_SYSTEM, ABILITY_NONE, ABILITY_NONE }, \ + .bodyColor = BODY_COLOR_GRAY, \ + .speciesName = _("Silvally"), \ + .cryId = CRY_SILVALLY, \ + .natDexNum = NATIONAL_DEX_SILVALLY, \ + .categoryName = _("Synthetic"), \ + .height = 23, \ + .weight = 1005, \ + .description = (type == TYPE_NORMAL \ + ? gSilvallyNormalPokedexText \ + : gSilvallyMemoryPokedexText), \ + .pokemonScale = 256, \ + .pokemonOffset = 0, \ + .trainerScale = 342, \ + .trainerOffset = 7, \ + .frontPic = gMonFrontPic_Silvally, \ + .frontPicSize = MON_COORDS_SIZE(64, 64), \ + .frontPicYOffset = 0, \ + .frontAnimFrames = sAnims_Silvally, \ + .frontAnimId = ANIM_V_SHAKE, \ + .backPic = gMonBackPic_Silvally, \ + .backPicSize = MON_COORDS_SIZE(56, 64), \ + .backPicYOffset = 0, \ + /*.backAnimId = BACK_ANIM_NONE,*/ \ + .palette = gMonPalette_Silvally##_palette, \ + .shinyPalette = gMonShinyPalette_Silvally##_palette, \ + .iconSprite = gMonIcon_Silvally, \ + .iconPalIndex = 0, \ + FOOTPRINT(Silvally) \ + OVERWORLD( \ + sPicTable_Silvally, \ + SIZE_32x32, \ + SHADOW_SIZE_M, \ + TRACKS_FOOT, \ + gOverworldPalette_Silvally, \ + gShinyOverworldPalette_Silvally \ + ) \ + .isLegendary = TRUE, \ + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, \ + .levelUpLearnset = sSilvallyLevelUpLearnset, \ + .teachableLearnset = sSilvallyTeachableLearnset, \ + .formSpeciesIdTable = sSilvallyFormSpeciesIdTable, \ + .formChangeTable = sSilvallyFormChangeTable, \ } [SPECIES_SILVALLY_NORMAL] = SILVALLY_SPECIES_INFO(TYPE_NORMAL, Normal), @@ -4455,6 +4463,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Togedemaru ) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTogedemaruLevelUpLearnset, .teachableLearnset = sTogedemaruTeachableLearnset, .eggMoveLearnset = sTogedemaruEggMoveLearnset, @@ -4621,6 +4630,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .iconPalIndex = 1, FOOTPRINT(Mimikyu) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMimikyuLevelUpLearnset, .teachableLearnset = sMimikyuTeachableLearnset, .eggMoveLearnset = sMimikyuEggMoveLearnset, @@ -4674,6 +4684,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .iconPalIndex = 1, FOOTPRINT(Mimikyu) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMimikyuLevelUpLearnset, .teachableLearnset = sMimikyuTeachableLearnset, .eggMoveLearnset = sMimikyuEggMoveLearnset, @@ -5113,6 +5124,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_KommoO ) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKommoOLevelUpLearnset, .teachableLearnset = sKommoOTeachableLearnset, .formSpeciesIdTable = sKommoOFormSpeciesIdTable, @@ -5178,6 +5190,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_TapuKoko ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTapuKokoLevelUpLearnset, .teachableLearnset = sTapuKokoTeachableLearnset, }, @@ -5242,6 +5255,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_TapuLele ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTapuLeleLevelUpLearnset, .teachableLearnset = sTapuLeleTeachableLearnset, }, @@ -5306,6 +5320,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_TapuBulu ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTapuBuluLevelUpLearnset, .teachableLearnset = sTapuBuluTeachableLearnset, }, @@ -5371,6 +5386,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_TapuFini ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTapuFiniLevelUpLearnset, .teachableLearnset = sTapuFiniTeachableLearnset, }, @@ -5437,6 +5453,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .isLegendary = TRUE, .tmIlliterate = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCosmogLevelUpLearnset, .teachableLearnset = sCosmogTeachableLearnset, .evolutions = EVOLUTION({EVO_LEVEL, 43, SPECIES_COSMOEM}), @@ -5503,6 +5520,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .isLegendary = TRUE, .tmIlliterate = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCosmoemLevelUpLearnset, .teachableLearnset = sCosmoemTeachableLearnset, .evolutions = EVOLUTION({EVO_LEVEL_DAY, 53, SPECIES_SOLGALEO}, @@ -5567,6 +5585,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sSolgaleoLevelUpLearnset, .teachableLearnset = sSolgaleoTeachableLearnset, }, @@ -5630,6 +5649,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLunalaLevelUpLearnset, .teachableLearnset = sLunalaTeachableLearnset, }, @@ -5694,6 +5714,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Nihilego ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sNihilegoLevelUpLearnset, .teachableLearnset = sNihilegoTeachableLearnset, }, @@ -5758,6 +5779,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Buzzwole ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sBuzzwoleLevelUpLearnset, .teachableLearnset = sBuzzwoleTeachableLearnset, }, @@ -5821,6 +5843,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Pheromosa ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sPheromosaLevelUpLearnset, .teachableLearnset = sPheromosaTeachableLearnset, }, @@ -5884,6 +5907,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Xurkitree ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sXurkitreeLevelUpLearnset, .teachableLearnset = sXurkitreeTeachableLearnset, }, @@ -5949,6 +5973,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Celesteela ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCelesteelaLevelUpLearnset, .teachableLearnset = sCelesteelaTeachableLearnset, }, @@ -6013,6 +6038,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Kartana ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKartanaLevelUpLearnset, .teachableLearnset = sKartanaTeachableLearnset, }, @@ -6076,6 +6102,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Guzzlord ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sGuzzlordLevelUpLearnset, .teachableLearnset = sGuzzlordTeachableLearnset, }, @@ -6143,6 +6170,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sNecrozmaLevelUpLearnset, .teachableLearnset = sNecrozmaTeachableLearnset, .formSpeciesIdTable = sNecrozmaFormSpeciesIdTable, @@ -6209,6 +6237,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .isLegendary = TRUE, .cannotBeTraded = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sNecrozmaLevelUpLearnset, .teachableLearnset = sNecrozmaTeachableLearnset, .formSpeciesIdTable = sNecrozmaFormSpeciesIdTable, @@ -6276,6 +6305,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .isLegendary = TRUE, .cannotBeTraded = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sNecrozmaLevelUpLearnset, .teachableLearnset = sNecrozmaTeachableLearnset, .formSpeciesIdTable = sNecrozmaFormSpeciesIdTable, @@ -6339,6 +6369,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .isUltraBurst = TRUE, .cannotBeTraded = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sNecrozmaLevelUpLearnset, .teachableLearnset = sNecrozmaTeachableLearnset, .formSpeciesIdTable = sNecrozmaFormSpeciesIdTable, @@ -6406,6 +6437,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMagearnaLevelUpLearnset, .teachableLearnset = sMagearnaTeachableLearnset, .formSpeciesIdTable = sMagearnaFormSpeciesIdTable, @@ -6460,6 +6492,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = FOOTPRINT(Magearna) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMagearnaLevelUpLearnset, .teachableLearnset = sMagearnaTeachableLearnset, .formSpeciesIdTable = sMagearnaFormSpeciesIdTable, @@ -6527,6 +6560,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMarshadowLevelUpLearnset, .teachableLearnset = sMarshadowTeachableLearnset, }, @@ -6590,6 +6624,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Poipole ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sPoipoleLevelUpLearnset, .teachableLearnset = sPoipoleTeachableLearnset, .evolutions = EVOLUTION({EVO_MOVE, MOVE_DRAGON_PULSE, SPECIES_NAGANADEL}), @@ -6652,6 +6687,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Naganadel ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sNaganadelLevelUpLearnset, .teachableLearnset = sNaganadelTeachableLearnset, }, @@ -6715,6 +6751,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Stakataka ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sStakatakaLevelUpLearnset, .teachableLearnset = sStakatakaTeachableLearnset, }, @@ -6778,6 +6815,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Blacephalon ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sBlacephalonLevelUpLearnset, .teachableLearnset = sBlacephalonTeachableLearnset, }, @@ -6841,6 +6879,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZeraoraLevelUpLearnset, .teachableLearnset = sZeraoraTeachableLearnset, }, @@ -6904,6 +6943,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMeltanLevelUpLearnset, .teachableLearnset = sMeltanTeachableLearnset, }, @@ -6965,6 +7005,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMelmetalLevelUpLearnset, .teachableLearnset = sMelmetalTeachableLearnset, .formSpeciesIdTable = sMelmetalFormSpeciesIdTable, @@ -7023,6 +7064,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .isMythical = TRUE, .isGigantamax = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMelmetalLevelUpLearnset, .teachableLearnset = sMelmetalTeachableLearnset, .formSpeciesIdTable = sMelmetalFormSpeciesIdTable, diff --git a/src/data/pokemon/species_info/gen_8_families.h b/src/data/pokemon/species_info/gen_8_families.h index 353597e96a..b4c268f2ab 100644 --- a/src/data/pokemon/species_info/gen_8_families.h +++ b/src/data/pokemon/species_info/gen_8_families.h @@ -6261,6 +6261,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZacianLevelUpLearnset, .teachableLearnset = sZacianTeachableLearnset, .formSpeciesIdTable = sZacianFormSpeciesIdTable, @@ -6325,6 +6326,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZacianLevelUpLearnset, .teachableLearnset = sZacianTeachableLearnset, .formSpeciesIdTable = sZacianFormSpeciesIdTable, @@ -6391,6 +6393,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZamazentaLevelUpLearnset, .teachableLearnset = sZamazentaTeachableLearnset, .formSpeciesIdTable = sZamazentaFormSpeciesIdTable, @@ -6455,6 +6458,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZamazentaLevelUpLearnset, .teachableLearnset = sZamazentaTeachableLearnset, .formSpeciesIdTable = sZamazentaFormSpeciesIdTable, @@ -6522,6 +6526,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sEternatusLevelUpLearnset, .teachableLearnset = sEternatusTeachableLearnset, .formSpeciesIdTable = sEternatusFormSpeciesIdTable, @@ -6578,6 +6583,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = FOOTPRINT(Eternatus) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sEternatusLevelUpLearnset, .teachableLearnset = sEternatusTeachableLearnset, .formSpeciesIdTable = sEternatusFormSpeciesIdTable, @@ -6641,6 +6647,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = gShinyOverworldPalette_Kubfu ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKubfuLevelUpLearnset, .teachableLearnset = sKubfuTeachableLearnset, .evolutions = EVOLUTION({EVO_DARK_SCROLL, 0, SPECIES_URSHIFU_SINGLE_STRIKE_STYLE}, @@ -6706,6 +6713,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = gShinyOverworldPalette_Urshifu ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sUrshifuSingleStrikeStyleLevelUpLearnset, .teachableLearnset = sUrshifuSingleStrikeStyleTeachableLearnset, .formSpeciesIdTable = sUrshifuFormSpeciesIdTable, @@ -6763,6 +6771,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = FOOTPRINT(Urshifu) .isLegendary = TRUE, .isGigantamax = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sUrshifuSingleStrikeStyleLevelUpLearnset, .teachableLearnset = sUrshifuSingleStrikeStyleTeachableLearnset, .formSpeciesIdTable = sUrshifuFormSpeciesIdTable, @@ -6826,6 +6835,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = gShinyOverworldPalette_Urshifu ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sUrshifuRapidStrikeStyleLevelUpLearnset, .teachableLearnset = sUrshifuRapidStrikeStyleTeachableLearnset, .formSpeciesIdTable = sUrshifuFormSpeciesIdTable, @@ -6883,6 +6893,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = FOOTPRINT(Urshifu) .isLegendary = TRUE, .isGigantamax = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sUrshifuRapidStrikeStyleLevelUpLearnset, .teachableLearnset = sUrshifuRapidStrikeStyleTeachableLearnset, .formSpeciesIdTable = sUrshifuFormSpeciesIdTable, @@ -6950,6 +6961,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZarudeLevelUpLearnset, .teachableLearnset = sZarudeTeachableLearnset, .formSpeciesIdTable = sZarudeFormSpeciesIdTable, @@ -7004,6 +7016,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = FOOTPRINT(Zarude) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZarudeLevelUpLearnset, .teachableLearnset = sZarudeTeachableLearnset, .formSpeciesIdTable = sZarudeFormSpeciesIdTable, @@ -7069,6 +7082,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = gShinyOverworldPalette_Regieleki ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRegielekiLevelUpLearnset, .teachableLearnset = sRegielekiTeachableLearnset, }, @@ -7133,6 +7147,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = gShinyOverworldPalette_Regidrago ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRegidragoLevelUpLearnset, .teachableLearnset = sRegidragoTeachableLearnset, }, @@ -7195,6 +7210,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = gShinyOverworldPalette_Glastrier ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sGlastrierLevelUpLearnset, .teachableLearnset = sGlastrierTeachableLearnset, }, @@ -7258,6 +7274,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = gShinyOverworldPalette_Spectrier ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sSpectrierLevelUpLearnset, .teachableLearnset = sSpectrierTeachableLearnset, }, @@ -7322,6 +7339,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCalyrexLevelUpLearnset, .teachableLearnset = sCalyrexTeachableLearnset, .formSpeciesIdTable = sCalyrexFormSpeciesIdTable, @@ -7387,6 +7405,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .isLegendary = TRUE, .cannotBeTraded = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCalyrexIceRiderLevelUpLearnset, .teachableLearnset = sCalyrexIceRiderTeachableLearnset, .formSpeciesIdTable = sCalyrexFormSpeciesIdTable, @@ -7451,6 +7470,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .isLegendary = TRUE, .cannotBeTraded = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCalyrexShadowRiderLevelUpLearnset, .teachableLearnset = sCalyrexShadowRiderTeachableLearnset, .formSpeciesIdTable = sCalyrexFormSpeciesIdTable, @@ -7517,6 +7537,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = //, gShinyOverworldPalette_EnamorusIncarnate ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sEnamorusLevelUpLearnset, .teachableLearnset = sEnamorusTeachableLearnset, .formSpeciesIdTable = sEnamorusFormSpeciesIdTable, @@ -7579,6 +7600,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = //, gShinyOverworldPalette_EnamorusTherian ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sEnamorusLevelUpLearnset, .teachableLearnset = sEnamorusTeachableLearnset, .formSpeciesIdTable = sEnamorusFormSpeciesIdTable, diff --git a/src/data/pokemon/species_info/gen_9_families.h b/src/data/pokemon/species_info/gen_9_families.h index 8880d3584d..5a8452af25 100644 --- a/src/data/pokemon/species_info/gen_9_families.h +++ b/src/data/pokemon/species_info/gen_9_families.h @@ -5436,6 +5436,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .iconPalIndex = 1, FOOTPRINT(WoChien) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sWoChienLevelUpLearnset, .teachableLearnset = sWoChienTeachableLearnset, }, @@ -5491,6 +5492,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .iconPalIndex = 0, FOOTPRINT(ChienPao) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sChienPaoLevelUpLearnset, .teachableLearnset = sChienPaoTeachableLearnset, }, @@ -5546,6 +5548,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .iconPalIndex = 0, FOOTPRINT(TingLu) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTingLuLevelUpLearnset, .teachableLearnset = sTingLuTeachableLearnset, }, @@ -5602,6 +5605,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .iconPalIndex = 0, FOOTPRINT(ChiYu) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sChiYuLevelUpLearnset, .teachableLearnset = sChiYuTeachableLearnset, }, @@ -5770,6 +5774,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = FOOTPRINT(Koraidon) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKoraidonLevelUpLearnset, .teachableLearnset = sKoraidonTeachableLearnset, }, @@ -5826,6 +5831,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = FOOTPRINT(Miraidon) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMiraidonLevelUpLearnset, .teachableLearnset = sMiraidonTeachableLearnset, }, @@ -6205,6 +6211,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .iconPalIndex = 1, FOOTPRINT(Okidogi) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sOkidogiLevelUpLearnset, .teachableLearnset = sOkidogiTeachableLearnset, }, @@ -6260,6 +6267,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .iconPalIndex = 0, FOOTPRINT(Munkidori) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMunkidoriLevelUpLearnset, .teachableLearnset = sMunkidoriTeachableLearnset, }, @@ -6315,6 +6323,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .iconPalIndex = 0, FOOTPRINT(Fezandipiti) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sFezandipitiLevelUpLearnset, .teachableLearnset = sFezandipitiTeachableLearnset, }, @@ -6372,6 +6381,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .formChangeTable = sOgerponFormChangeTable, \ .isLegendary = TRUE, \ .isTeraForm = isTeraform, \ + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, \ } [SPECIES_OGERPON_TEAL_MASK] = OGERPON_SPECIES_INFO(Teal, Mask, TYPE_GRASS, ABILITY_DEFIANT, BODY_COLOR_GREEN, 1, FALSE), @@ -6663,6 +6673,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = FOOTPRINT(TerapagosNormal) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTerapagosLevelUpLearnset, .teachableLearnset = sTerapagosTeachableLearnset, .formSpeciesIdTable = sTerapagosFormSpeciesIdTable, @@ -6722,6 +6733,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = FOOTPRINT(TerapagosTerastal) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTerapagosLevelUpLearnset, .teachableLearnset = sTerapagosTeachableLearnset, .formSpeciesIdTable = sTerapagosFormSpeciesIdTable, @@ -6780,6 +6792,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .isLegendary = TRUE, .isTeraForm = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTerapagosLevelUpLearnset, .teachableLearnset = sTerapagosTeachableLearnset, .formSpeciesIdTable = sTerapagosFormSpeciesIdTable, @@ -6838,6 +6851,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = FOOTPRINT(Pecharunt) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sPecharuntLevelUpLearnset, .teachableLearnset = sPecharuntTeachableLearnset, }, diff --git a/src/pokemon.c b/src/pokemon.c index 1807b675df..660409d6f6 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -1109,7 +1109,7 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, u16 checksum; u8 i; u8 availableIVs[NUM_STATS]; - u8 selectedIvs[LEGENDARY_PERFECT_IV_COUNT]; + u8 selectedIvs[NUM_STATS]; bool32 isShiny; ZeroBoxMonData(boxMon); @@ -1226,21 +1226,7 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, iv = (value & (MAX_IV_MASK << 10)) >> 10; SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, &iv); - if (gSpeciesInfo[species].allPerfectIVs) - { - iv = MAX_PER_STAT_IVS; - SetBoxMonData(boxMon, MON_DATA_HP_IV, &iv); - SetBoxMonData(boxMon, MON_DATA_ATK_IV, &iv); - SetBoxMonData(boxMon, MON_DATA_DEF_IV, &iv); - SetBoxMonData(boxMon, MON_DATA_SPEED_IV, &iv); - SetBoxMonData(boxMon, MON_DATA_SPATK_IV, &iv); - SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, &iv); - } - else if (P_LEGENDARY_PERFECT_IVS >= GEN_6 - && (gSpeciesInfo[species].isLegendary - || gSpeciesInfo[species].isMythical - || gSpeciesInfo[species].isUltraBeast - || gSpeciesInfo[species].isTotem)) + if (gSpeciesInfo[species].perfectIVCount != 0) { iv = MAX_PER_STAT_IVS; // Initialize a list of IV indices. @@ -1249,14 +1235,14 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, availableIVs[i] = i; } - // Select the 3 IVs that will be perfected. - for (i = 0; i < LEGENDARY_PERFECT_IV_COUNT; i++) + // Select the IVs that will be perfected. + for (i = 0; i < NUM_STATS && i < gSpeciesInfo[species].perfectIVCount; i++) { u8 index = Random() % (NUM_STATS - i); selectedIvs[i] = availableIVs[index]; RemoveIVIndexFromList(availableIVs, index); } - for (i = 0; i < LEGENDARY_PERFECT_IV_COUNT; i++) + for (i = 0; i < NUM_STATS && i < gSpeciesInfo[species].perfectIVCount; i++) { switch (selectedIvs[i]) {