Merge branch '_RHH/master' into _RHH/upcoming

# Conflicts:
#	data/battle_scripts_1.s
#	include/config/pokemon.h
#	src/birch_pc.c
This commit is contained in:
Biffalo XIII 2024-01-11 19:51:11 -03:00
commit 2cc26d935a
15 changed files with 139 additions and 86 deletions

View file

@ -758,6 +758,7 @@ struct BattleStruct
u8 transformZeroToHero[NUM_BATTLE_SIDES];
u8 intrepidSwordBoost[NUM_BATTLE_SIDES];
u8 dauntlessShieldBoost[NUM_BATTLE_SIDES];
u8 stickySyrupdBy[MAX_BATTLERS_COUNT];
};
// The palaceFlags member of struct BattleStruct contains 1 flag per move to indicate which moves the AI should consider,

View file

@ -1,6 +1,6 @@
#ifndef GUARD_BIRCH_PC_H
#define GUARD_BIRCH_PC_H
const u8 *GetPokedexRatingText(u16 count);
const u8 *GetPokedexRatingText(u32 count);
#endif // GUARD_BIRCH_PC_H

View file

@ -32,7 +32,6 @@
#define P_FOOTPRINTS TRUE // If TRUE, Pokémon will have footprints (as was the case up to Gen 5 and in BDSP). Disabling this saves some ROM space.
#define P_LEGENDARY_PERFECT_IVS GEN_LATEST // Since Gen 6, Legendaries, Mythicals and Ultra Beasts found in the wild or given through gifts have at least 3 perfect IVs.
#define P_EV_CAP GEN_LATEST // Since Gen 6, the max EVs per stat is 252 instead of 255.
#define P_CATCH_CURVE GEN_LATEST // Since Gen 6, the capture rate curve was changed to make pokeballs more effective on lower level pokemon
#define P_SHOW_TERA_TYPE GEN_LATEST // Since Gen 9, the Tera Type is shown on the summary screen.
// Flag settings

View file

@ -432,7 +432,8 @@ struct SpeciesInfo /*0x8C*/
u32 isPaldeanForm:1;
u32 cannotBeTraded:1;
u32 allPerfectIVs:1;
u32 padding4:18;
u32 dexForceRequired:1; // This species will be taken into account for Pokédex ratings even if they have the "isMythical" flag set.
u32 padding4:17;
// Move Data
/* 0x80 */ const struct LevelUpMove *levelUpLearnset;
/* 0x84 */ const u16 *teachableLearnset;

View file

@ -3139,6 +3139,8 @@ void SwitchInClearSetData(u32 battler)
gBattleMons[i].status2 &= ~STATUS2_INFATUATED_WITH(battler);
if ((gBattleMons[i].status2 & STATUS2_WRAPPED) && *(gBattleStruct->wrappedBy + i) == battler)
gBattleMons[i].status2 &= ~STATUS2_WRAPPED;
if ((gStatuses4[i] & STATUS4_SYRUP_BOMB) && *(gBattleStruct->stickySyrupdBy + i) == battler)
gStatuses4[i] &= ~STATUS4_SYRUP_BOMB;
}
gActionSelectionCursor[battler] = 0;
@ -3243,6 +3245,8 @@ const u8* FaintClearSetData(u32 battler)
gBattleMons[i].status2 &= ~STATUS2_INFATUATED_WITH(battler);
if ((gBattleMons[i].status2 & STATUS2_WRAPPED) && *(gBattleStruct->wrappedBy + i) == battler)
gBattleMons[i].status2 &= ~STATUS2_WRAPPED;
if ((gStatuses4[i] & STATUS4_SYRUP_BOMB) && *(gBattleStruct->stickySyrupdBy + i) == battler)
gStatuses4[i] &= ~STATUS4_SYRUP_BOMB;
}
gActionSelectionCursor[battler] = 0;
@ -4967,7 +4971,7 @@ static void TurnValuesCleanUp(bool8 var0)
gSideStatuses[B_SIDE_OPPONENT] &= ~(SIDE_STATUS_QUICK_GUARD | SIDE_STATUS_WIDE_GUARD | SIDE_STATUS_CRAFTY_SHIELD | SIDE_STATUS_MAT_BLOCK);
gSideTimers[B_SIDE_PLAYER].followmeTimer = 0;
gSideTimers[B_SIDE_OPPONENT].followmeTimer = 0;
gBattleStruct->pledgeMove = FALSE; // combined pledge move may not have been used due to a canceller
}

View file

@ -1584,8 +1584,8 @@ static bool32 AccuracyCalcHelper(u16 move)
if (WEATHER_HAS_EFFECT)
{
if (IsBattlerWeatherAffected(gBattlerTarget, B_WEATHER_RAIN) &&
(gBattleMoves[move].effect == EFFECT_THUNDER || gBattleMoves[move].effect == EFFECT_HURRICANE ||
if (IsBattlerWeatherAffected(gBattlerTarget, B_WEATHER_RAIN) &&
(gBattleMoves[move].effect == EFFECT_THUNDER || gBattleMoves[move].effect == EFFECT_HURRICANE ||
move == MOVE_BLEAKWIND_STORM || move == MOVE_WILDBOLT_STORM || move == MOVE_SANDSEAR_STORM))
{
// thunder/hurricane/genie moves ignore acc checks in rain unless target is holding utility umbrella
@ -3161,7 +3161,8 @@ void SetMoveEffect(bool32 primary, bool32 certain)
gBattlerAbility = gEffectBattler;
RecordAbilityBattle(gEffectBattler, ABILITY_INNER_FOCUS);
gBattlescriptCurrInstr = BattleScript_FlinchPrevention;
} else
}
else
{
gBattlescriptCurrInstr++;
}
@ -3169,7 +3170,7 @@ void SetMoveEffect(bool32 primary, bool32 certain)
else if (GetBattlerTurnOrderNum(gEffectBattler) > gCurrentTurnActionNumber
&& !IsDynamaxed(gEffectBattler))
{
gBattleMons[gEffectBattler].status2 |= sStatusFlagsForMoveEffects[gBattleScripting.moveEffect];
gBattleMons[gEffectBattler].status2 |= sStatusFlagsForMoveEffects[gBattleScripting.moveEffect];
gBattlescriptCurrInstr++;
}
break;
@ -3704,6 +3705,7 @@ void SetMoveEffect(bool32 primary, bool32 certain)
gStatuses4[gEffectBattler] |= STATUS4_SYRUP_BOMB;
gDisableStructs[gEffectBattler].syrupBombTimer = 3;
gDisableStructs[gEffectBattler].syrupBombIsShiny = IsMonShiny(&party[gBattlerPartyIndexes[gBattlerAttacker]]);
gBattleStruct->stickySyrupdBy[gEffectBattler] = gBattlerAttacker;
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = BattleScript_SyrupBombActivates;
}
@ -14979,7 +14981,7 @@ static void Cmd_handleballthrow(void)
if (gBattleResults.catchAttempts[gLastUsedItem - FIRST_BALL] < 255)
gBattleResults.catchAttempts[gLastUsedItem - FIRST_BALL]++;
if (odds >= 255) // mon caught
if (odds > 254) // mon caught
{
BtlController_EmitBallThrowAnim(gBattlerAttacker, BUFFER_A, BALL_3_SHAKES_SUCCESS);
MarkBattlerForControllerExec(gBattlerAttacker);
@ -15024,16 +15026,8 @@ static void Cmd_handleballthrow(void)
}
else
{
if (P_CATCH_CURVE >= GEN_6)
{
odds = (255 * 255 * 255) / (odds * odds * odds);
odds = 65536 / Sqrt(Sqrt(Sqrt(Sqrt(odds))));
}
else
{
odds = Sqrt(Sqrt(16711680 / odds));
odds = 1048560 / odds;
}
odds = Sqrt(Sqrt(16711680 / odds));
odds = 1048560 / odds;
for (shakes = 0; shakes < maxShakes && Random() < odds; shakes++);
}

View file

@ -20,13 +20,6 @@ bool16 ScriptGetPokedexInfo(void)
return IsNationalPokedexEnabled();
}
// Species in this array are ignored in the progress towards a full regional dex
static const u16 sRegionalNotCountedList[] = {
SPECIES_JIRACHI,
SPECIES_DEOXYS,
SPECIES_NONE
};
#define BIRCH_DEX_STRINGS 21
static const u8 *const sBirchDexRatingTexts[BIRCH_DEX_STRINGS] =
@ -55,15 +48,20 @@ static const u8 *const sBirchDexRatingTexts[BIRCH_DEX_STRINGS] =
};
// This shows your Hoenn Pokédex rating and not your National Dex.
const u8 *GetPokedexRatingText(u16 count)
const u8 *GetPokedexRatingText(u32 count)
{
u32 i;
u32 i, j;
u16 maxDex = HOENN_DEX_COUNT - 1;
for(i = 0; sRegionalNotCountedList[i] != SPECIES_NONE; i++)
// doesNotCountForRegionalPokedex
for(i = 0; i < HOENN_DEX_COUNT; i++)
{
if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(sRegionalNotCountedList[i]), FLAG_GET_CAUGHT))
count--;
maxDex--;
j = NationalPokedexNumToSpecies(HoennToNationalOrder(i + 1));
if (gSpeciesInfo[j].isMythical && !gSpeciesInfo[j].dexForceRequired)
{
if (GetSetPokedexFlag(j, FLAG_GET_CAUGHT))
count--;
maxDex--;
}
}
return sBirchDexRatingTexts[(count * (BIRCH_DEX_STRINGS - 1)) / maxDex];
}

View file

@ -7659,7 +7659,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
ICON(VoltorbHisuian, 0),
LEARNSETS(VoltorbHisuian),
.isHisuianForm = TRUE,
.evolutions = EVOLUTION({EVO_LEVEL, ITEM_LEAF_STONE, SPECIES_ELECTRODE_HISUIAN}),
.evolutions = EVOLUTION({EVO_ITEM, ITEM_LEAF_STONE, SPECIES_ELECTRODE_HISUIAN}),
},
[SPECIES_ELECTRODE_HISUIAN] =
@ -10161,12 +10161,6 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
#if P_FAMILY_TAUROS
#define TAUROS_MISC_INFO \
.baseHP = 75, \
.baseAttack = 100, \
.baseDefense = 95, \
.baseSpeed = 110, \
.baseSpAttack = 40, \
.baseSpDefense = 70, \
.catchRate = 45, \
.expYield = 172, \
.genderRatio = MON_MALE, \
@ -10189,6 +10183,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
[SPECIES_TAUROS] =
{
TAUROS_MISC_INFO,
.baseHP = 75,
.baseAttack = 100,
.baseDefense = 95,
.baseSpeed = 110,
.baseSpAttack = 40,
.baseSpDefense = 70,
.types = { TYPE_NORMAL, TYPE_NORMAL },
.evYield_Attack = 1,
.evYield_Speed = 1,
@ -10214,13 +10214,26 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
},
#if P_PALDEAN_FORMS
#define TAUROS_PALDEAN_MISC_INFO \
.baseHP = 75, \
.baseAttack = 110, \
.baseDefense = 105, \
.baseSpeed = 100, \
.baseSpAttack = 30, \
.baseSpDefense = 70, \
.evYield_Attack = 2, \
.abilities = { ABILITY_INTIMIDATE, ABILITY_ANGER_POINT, ABILITY_CUD_CHEW }, \
.bodyColor = BODY_COLOR_BLACK, \
.frontAnimFrames = sAnims_TaurosPaldean, \
/*.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,*/ \
.backAnimId = BACK_ANIM_V_SHAKE_LOW, \
.isPaldeanForm = TRUE
[SPECIES_TAUROS_PALDEAN_COMBAT_BREED] =
{
TAUROS_MISC_INFO,
TAUROS_PALDEAN_MISC_INFO,
.types = { TYPE_FIGHTING, TYPE_FIGHTING },
.evYield_Attack = 2,
.abilities = { ABILITY_INTIMIDATE, ABILITY_ANGER_POINT, ABILITY_CUD_CHEW },
.bodyColor = BODY_COLOR_BROWN,
.weight = 1150,
.description = COMPOUND_STRING(
"This Pokémon has a muscular body\n"
@ -10229,24 +10242,18 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
"the opponents weak spots."),
FRONT_PIC(TaurosPaldeanCombatBreed, 64, 64),
.frontPicYOffset = 5,
.frontAnimFrames = sAnims_TaurosPaldean,
//.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
BACK_PIC(TaurosPaldeanCombatBreed, 64, 48),
.backPicYOffset = 9,
.backAnimId = BACK_ANIM_V_SHAKE_LOW,
PALETTES(TaurosPaldeanCombatBreed),
ICON(TaurosPaldeanCombatBreed, 0),
LEARNSETS(TaurosPaldeanCombatBreed),
.isPaldeanForm = TRUE,
},
[SPECIES_TAUROS_PALDEAN_BLAZE_BREED] =
{
TAUROS_MISC_INFO,
TAUROS_PALDEAN_MISC_INFO,
.types = { TYPE_FIGHTING, TYPE_FIRE },
.evYield_Attack = 2,
.abilities = { ABILITY_INTIMIDATE, ABILITY_ANGER_POINT, ABILITY_CUD_CHEW },
.bodyColor = BODY_COLOR_BROWN,
.weight = 850,
.description = COMPOUND_STRING(
"When heated by fire energy, its horns can\n"
@ -10255,24 +10262,18 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
"both wounds and burns."),
FRONT_PIC(TaurosPaldeanBlazeBreed, 64, 64),
.frontPicYOffset = 5,
.frontAnimFrames = sAnims_TaurosPaldean,
//.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
BACK_PIC(TaurosPaldeanBlazeBreed, 64, 48),
.backPicYOffset = 9,
.backAnimId = BACK_ANIM_V_SHAKE_LOW,
PALETTES(TaurosPaldeanBlazeBreed),
ICON(TaurosPaldeanBlazeBreed, 0),
LEARNSETS(TaurosPaldeanBlazeBreed),
.isPaldeanForm = TRUE,
},
[SPECIES_TAUROS_PALDEAN_AQUA_BREED] =
{
TAUROS_MISC_INFO,
TAUROS_PALDEAN_MISC_INFO,
.types = { TYPE_FIGHTING, TYPE_WATER },
.evYield_Attack = 2,
.abilities = { ABILITY_INTIMIDATE, ABILITY_ANGER_POINT, ABILITY_CUD_CHEW },
.bodyColor = BODY_COLOR_BROWN,
.weight = 1100,
.description = COMPOUND_STRING(
"This Pokémon blasts water from holes on\n"
@ -10281,15 +10282,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
"Tauross enemies."),
FRONT_PIC(TaurosPaldeanAquaBreed, 64, 64),
.frontPicYOffset = 5,
.frontAnimFrames = sAnims_TaurosPaldean,
//.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
BACK_PIC(TaurosPaldeanAquaBreed, 64, 48),
.backPicYOffset = 9,
.backAnimId = BACK_ANIM_V_SHAKE_LOW,
PALETTES(TaurosPaldeanAquaBreed),
ICON(TaurosPaldeanAquaBreed, 0),
LEARNSETS(TaurosPaldeanAquaBreed),
.isPaldeanForm = TRUE,
},
#endif //P_PALDEAN_FORMS
#endif //P_FAMILY_TAUROS

View file

@ -8733,7 +8733,9 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.evYield_Attack = 1,
.evYield_Defense = 1,
.description = COMPOUND_STRING(
""),
"Meloetta's melodies are sung with\n"
"a special vocalization method that can\n"
"control the feelings of those who hear it."),
FRONT_PIC(MeloettaPirouette, 40, 64),
.frontPicYOffset = 2,
.frontAnimFrames = sAnims_MeloettaPirouette,

View file

@ -4332,7 +4332,10 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.height = 11,
.weight = 278,
.description = COMPOUND_STRING(
""),
"The impurities upon its body's surface\n"
"have fallen away, sparkling so brilliantly\n"
"that cannot be observed directly.\n"
"It is known as “the Royal Pink Princess”."),
.pokemonScale = 365,
.pokemonOffset = 12,
.trainerScale = 256,
@ -4422,7 +4425,10 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.height = 65,
.weight = 490,
.description = COMPOUND_STRING(
""),
"It is the true form of Hoopa, which has had\n"
"its power sealed away. The rings it carries\n"
"have the power to bend dimensions and are\n"
"able to seize anything in the world."),
.pokemonScale = 432,
.pokemonOffset = 13,
.trainerScale = 256,

View file

@ -2097,8 +2097,10 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.height = 220,
.weight = 0,
.description = COMPOUND_STRING(
"")
,
"Its sand pouch has grown to tremendous\n"
"proportions. More than 1,000,000 tons of\n"
"sand now swirl around its body with enough\n"
"speed and power to pulverize a skyscraper."),
.pokemonScale = 256,
.pokemonOffset = 0,
.trainerScale = 610,
@ -3372,7 +3374,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
#if P_GIGANTAMAX_FORMS
[SPECIES_ALCREMIE_GIGANTAMAX] =
{
ALCREMIE_MISC_INFO(BODY_COLOR_PINK),
ALCREMIE_MISC_INFO(BODY_COLOR_YELLOW),
.isGigantamax = TRUE,
.speciesName = _("Alcremie"),
.cryId = CRY_ALCREMIE,

View file

@ -1622,7 +1622,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.growthRate = GROWTH_SLOW,
.eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE },
.abilities = { ABILITY_FLASH_FIRE, ABILITY_NONE, ABILITY_WEAK_ARMOR },
.bodyColor = BODY_COLOR_BLUE,
.bodyColor = BODY_COLOR_PURPLE,
.speciesName = _("Ceruledge"),
.cryId = CRY_CERULEDGE,
.natDexNum = NATIONAL_DEX_CERULEDGE,
@ -3670,7 +3670,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
[SPECIES_TATSUGIRI_CURLY] =
{
TATSUGIRI_MISC_INFO,
.bodyColor = BODY_COLOR_PINK,
.bodyColor = BODY_COLOR_RED,
.cryId = CRY_TATSUGIRI_CURLY,
.description = COMPOUND_STRING(
"This is a small dragon Pokémon. It\n"
@ -3686,7 +3686,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
[SPECIES_TATSUGIRI_DROOPY] =
{
TATSUGIRI_MISC_INFO,
.bodyColor = BODY_COLOR_RED,
.bodyColor = BODY_COLOR_PINK,
.cryId = CRY_TATSUGIRI_DROOPY,
.description = COMPOUND_STRING(
"This Pokémon tricks its opponents\n"
@ -3833,7 +3833,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.growthRate = GROWTH_SLOW,
.eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED },
.abilities = { ABILITY_PROTOSYNTHESIS, ABILITY_NONE },
.bodyColor = BODY_COLOR_GRAY,
.bodyColor = BODY_COLOR_WHITE,
.isParadoxForm = TRUE,
.speciesName = _("BruteBonet"),
.cryId = CRY_BRUTE_BONNET,
@ -3936,7 +3936,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.growthRate = GROWTH_SLOW,
.eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED },
.abilities = { ABILITY_PROTOSYNTHESIS, ABILITY_NONE },
.bodyColor = BODY_COLOR_RED,
.bodyColor = BODY_COLOR_WHITE,
.isParadoxForm = TRUE,
.speciesName = _("SlithrWing"),
.cryId = CRY_SLITHER_WING,
@ -4236,7 +4236,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.growthRate = GROWTH_SLOW,
.eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED },
.abilities = { ABILITY_QUARK_DRIVE, ABILITY_NONE },
.bodyColor = BODY_COLOR_YELLOW,
.bodyColor = BODY_COLOR_WHITE,
.isParadoxForm = TRUE,
.speciesName = _("Iron Moth"),
.cryId = CRY_IRON_MOTH,
@ -4385,7 +4385,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.growthRate = GROWTH_SLOW,
.eggGroups = { EGG_GROUP_DRAGON, EGG_GROUP_MINERAL },
.abilities = { ABILITY_THERMAL_EXCHANGE, ABILITY_NONE, ABILITY_ICE_BODY },
.bodyColor = BODY_COLOR_GRAY,
.bodyColor = BODY_COLOR_BLUE,
.speciesName = _("Arctibax"),
.cryId = CRY_ARCTIBAX,
.natDexNum = NATIONAL_DEX_ARCTIBAX,
@ -4433,7 +4433,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.growthRate = GROWTH_SLOW,
.eggGroups = { EGG_GROUP_DRAGON, EGG_GROUP_MINERAL },
.abilities = { ABILITY_THERMAL_EXCHANGE, ABILITY_NONE, ABILITY_ICE_BODY },
.bodyColor = BODY_COLOR_GRAY,
.bodyColor = BODY_COLOR_BLUE,
.speciesName = _("Baxcalibur"),
.cryId = CRY_BAXCALIBUR,
.natDexNum = NATIONAL_DEX_BAXCALIBUR,
@ -4495,7 +4495,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.baseSpAttack = 75,
.baseSpDefense = 70,
.abilities = { ABILITY_RATTLED, ABILITY_NONE },
.bodyColor = BODY_COLOR_BROWN,
.bodyColor = BODY_COLOR_RED,
.categoryName = _("Coin Chest"),
.height = 3,
.weight = 50,
@ -4526,7 +4526,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.baseSpAttack = 75,
.baseSpDefense = 45,
.abilities = { ABILITY_RUN_AWAY, ABILITY_NONE },
.bodyColor = BODY_COLOR_BLUE,
.bodyColor = BODY_COLOR_GRAY,
.categoryName = _("Coin Hunter"),
.height = 1,
.weight = 1,
@ -4815,7 +4815,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.growthRate = GROWTH_SLOW,
.eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED },
.abilities = { ABILITY_PROTOSYNTHESIS, ABILITY_NONE },
.bodyColor = BODY_COLOR_GREEN,
.bodyColor = BODY_COLOR_BLUE,
.isParadoxForm = TRUE,
.speciesName = _("RoarngMoon"),
.cryId = CRY_ROARING_MOON,
@ -4966,7 +4966,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.growthRate = GROWTH_SLOW,
.eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED },
.abilities = { ABILITY_HADRON_ENGINE, ABILITY_NONE, ABILITY_NONE },
.bodyColor = BODY_COLOR_BLUE,
.bodyColor = BODY_COLOR_PURPLE,
.isLegendary = TRUE,
.isParadoxForm = TRUE,
.speciesName = _("Miraidon"),

View file

@ -4376,12 +4376,12 @@ u16 GetKantoPokedexCount(u8 caseID)
bool16 HasAllHoennMons(void)
{
u16 i;
u32 i, j;
// -2 excludes Jirachi and Deoxys
for (i = 0; i < HOENN_DEX_COUNT - 2; i++)
for (i = 0; i < HOENN_DEX_COUNT; i++)
{
if (!GetSetPokedexFlag(HoennToNationalOrder(i + 1), FLAG_GET_CAUGHT))
j = HoennToNationalOrder(i + 1);
if (!(gSpeciesInfo[j].isMythical && !gSpeciesInfo[j].dexForceRequired) && !GetSetPokedexFlag(j, FLAG_GET_CAUGHT))
return FALSE;
}
return TRUE;
@ -4389,7 +4389,7 @@ bool16 HasAllHoennMons(void)
bool8 HasAllKantoMons(void)
{
u16 i;
u32 i;
// -1 excludes Mew
for (i = 0; i < KANTO_DEX_COUNT - 1; i++)
@ -4402,11 +4402,12 @@ bool8 HasAllKantoMons(void)
bool16 HasAllMons(void)
{
u16 i;
u32 i, j;
for (i = 1; i < NATIONAL_DEX_COUNT + 1; i++)
{
if (!(gSpeciesInfo[i].isMythical) && !GetSetPokedexFlag(i, FLAG_GET_CAUGHT))
j = NationalPokedexNumToSpecies(i);
if (!(gSpeciesInfo[j].isMythical && !gSpeciesInfo[j].dexForceRequired) && !GetSetPokedexFlag(j, FLAG_GET_CAUGHT))
return FALSE;
}

View file

@ -199,7 +199,7 @@ static const u8 sText_Dex_OWN[] = _("OWN");
static const u8 sText_EVO_Buttons[] = _("{DPAD_UPDOWN}EVOs {A_BUTTON}CHECK");
static const u8 sText_EVO_Buttons_Decapped[] = _("{DPAD_UPDOWN}Evos {A_BUTTON}Check");
static const u8 sText_EVO_Buttons_PE[] = _("{DPAD_UPDOWN}EVOs {A_BUTTON}CHECK {START_BUTTON}FORMs");
static const u8 sText_EVO_Buttons_Decapped_PE[] = _("{DPAD_UPDOWN}Evos {A_BUTTON}Check {START_BUTTON}Froms");
static const u8 sText_EVO_Buttons_Decapped_PE[] = _("{DPAD_UPDOWN}Evos {A_BUTTON}Check {START_BUTTON}Forms");
static const u8 sText_EVO_Name[] = _("{STR_VAR_3}:");
static const u8 sText_EVO_PreEvo[] = _("{STR_VAR_1} evolves from {STR_VAR_2}");
static const u8 sText_EVO_PreEvo_PE_Mega[] = _("{STR_VAR_1} Mega Evolves with {STR_VAR_2}");

View file

@ -164,3 +164,51 @@ SINGLE_BATTLE_TEST("Sticky syrup will not decrease speed further then minus six"
}
}
}
SINGLE_BATTLE_TEST("Sticky Syrup is removed when the user switches out")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WYNAUT);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_SYRUP_BOMB); }
TURN { SWITCH(player, 1); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_SYRUP_BOMB, player);
HP_BAR(opponent);
MESSAGE("Foe Wobbuffet got covered in sticky syrup!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent);
MESSAGE("Foe Wobbuffet's Speed fell!");
NONE_OF {
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent);
MESSAGE("Foe Wobbuffet's Speed fell!");
}
}
}
SINGLE_BATTLE_TEST("Sticky Syrup is removed when the user faints")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { HP(1); }
PLAYER(SPECIES_WYNAUT);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_SYRUP_BOMB);
MOVE(opponent, MOVE_TACKLE);
SEND_OUT(player, 1);
}
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_SYRUP_BOMB, player);
HP_BAR(opponent);
MESSAGE("Foe Wobbuffet got covered in sticky syrup!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent);
HP_BAR(player);
MESSAGE("Wobbuffet fainted!");
MESSAGE("Go! Wynaut!");
NONE_OF {
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent);
MESSAGE("Foe Wobbuffet's Speed fell!");
}
}
}