Merge branch 'RHH/pr/feature/formBattleChange' of https://github.com/AsparagusEduardo/pokeemerald into dynamax
This commit is contained in:
commit
b708da3998
@ -7915,6 +7915,7 @@ BattleScript_AttackerFormChangeEnd3::
|
||||
|
||||
BattleScript_AttackerFormChangeEnd3NoPopup::
|
||||
call BattleScript_AttackerFormChangeNoPopup
|
||||
end3
|
||||
|
||||
BattleScript_AttackerFormChangeMoveEffect::
|
||||
waitmessage 1
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
|
||||
// should they be included here or included individually by every file?
|
||||
#include "constants/battle.h"
|
||||
#include "constants/form_change_types.h"
|
||||
#include "battle_main.h"
|
||||
#include "battle_message.h"
|
||||
#include "battle_util.h"
|
||||
@ -483,13 +484,7 @@ struct LinkBattlerHeader
|
||||
struct MegaEvolutionData
|
||||
{
|
||||
u8 toEvolve; // As flags using gBitTable.
|
||||
u8 evolvedPartyIds[2]; // As flags using gBitTable;
|
||||
bool8 alreadyEvolved[4]; // Array id is used for mon position.
|
||||
u16 evolvedSpecies[MAX_BATTLERS_COUNT];
|
||||
u16 playerEvolvedSpecies;
|
||||
u8 primalRevertedPartyIds[2]; // As flags using gBitTable;
|
||||
u16 primalRevertedSpecies[MAX_BATTLERS_COUNT];
|
||||
u16 playerPrimalRevertedSpecies;
|
||||
u8 battlerId;
|
||||
bool8 playerSelect;
|
||||
u8 triggerSpriteId;
|
||||
|
||||
@ -173,12 +173,11 @@ u16 CalcPartyMonTypeEffectivenessMultiplier(u16 move, u16 speciesDef, u16 abilit
|
||||
u16 GetTypeModifier(u8 atkType, u8 defType);
|
||||
s32 GetStealthHazardDamage(u8 hazardType, u8 battlerId);
|
||||
s32 GetStealthHazardDamageByTypesAndHP(u8 hazardType, u8 type1, u8 type2, u32 maxHp);
|
||||
u16 GetMegaEvolutionSpecies(u16 preEvoSpecies, u16 heldItemId);
|
||||
u16 GetPrimalReversionSpecies(u16 preEvoSpecies, u16 heldItemId);
|
||||
u16 GetWishMegaEvolutionSpecies(u16 preEvoSpecies, u16 moveId1, u16 moveId2, u16 moveId3, u16 moveId4);
|
||||
bool32 CanMegaEvolve(u8 battlerId);
|
||||
void UndoMegaEvolution(u32 monId);
|
||||
void UndoFormChange(u32 monId, u32 side, bool32 isSwitchingOut);
|
||||
bool32 IsBattlerMegaEvolved(u8 battlerId);
|
||||
bool32 IsBattlerPrimalReverted(u8 battlerId);
|
||||
u16 GetBattleFormChangeTargetSpecies(u8 battlerId, u16 method);
|
||||
bool32 TryBattleFormChange(u8 battlerId, u16 method);
|
||||
bool32 DoBattlersShareType(u32 battler1, u32 battler2);
|
||||
bool32 CanBattlerGetOrLoseItem(u8 battlerId, u16 itemId);
|
||||
u32 GetIllusionMonSpecies(u32 battlerId);
|
||||
@ -207,13 +206,15 @@ void SortBattlersBySpeed(u8 *battlers, bool8 slowToFast);
|
||||
bool32 CompareStat(u8 battlerId, u8 statId, u8 cmpTo, u8 cmpKind);
|
||||
bool32 TryRoomService(u8 battlerId);
|
||||
void BufferStatChange(u8 battlerId, u8 statId, u8 stringId);
|
||||
void DoBurmyFormChange(u32 monId);
|
||||
bool32 BlocksPrankster(u16 move, u8 battlerPrankster, u8 battlerDef, bool32 checkTarget);
|
||||
u16 GetUsedHeldItem(u8 battler);
|
||||
bool32 IsBattlerWeatherAffected(u8 battlerId, u32 weatherFlags);
|
||||
u32 GetBattlerMoveTargetType(u8 battlerId, u16 move);
|
||||
bool32 CanTargetBattler(u8 battlerAtk, u8 battlerDef, u16 move);
|
||||
bool8 IsMoveAffectedByParentalBond(u16 move, u8 battlerId);
|
||||
void CopyMonLevelAndBaseStatsToBattleMon(u32 battler, struct Pokemon *mon);
|
||||
void CopyMonAbilityAndTypesToBattleMon(u32 battler, struct Pokemon *mon);
|
||||
void RecalcBattlerStats(u32 battler, struct Pokemon *mon);
|
||||
// Ability checks
|
||||
bool32 IsRolePlayBannedAbilityAtk(u16 ability);
|
||||
bool32 IsRolePlayBannedAbility(u16 ability);
|
||||
|
||||
98
include/constants/form_change_types.h
Normal file
98
include/constants/form_change_types.h
Normal file
@ -0,0 +1,98 @@
|
||||
#ifndef GUARD_CONSTANTS_FORM_CHANGE_TYPES_H
|
||||
#define GUARD_CONSTANTS_FORM_CHANGE_TYPES_H
|
||||
|
||||
// FORM_CHANGE_BATTLE_HP_PERCENT param2 arguments
|
||||
#define HP_HIGHER_THAN 1
|
||||
#define HP_LOWER_EQ_THAN 2
|
||||
// FORM_CHANGE_MOVE param2 Arguments
|
||||
#define WHEN_LEARNED 0
|
||||
#define WHEN_FORGOTTEN 1
|
||||
// FORM_CHANGE_ITEM_USE param2 Arguments
|
||||
#define DAY 1
|
||||
#define NIGHT 2
|
||||
|
||||
#define FORM_CHANGE_TERMINATOR 0
|
||||
|
||||
// Form change that activates when the specified item is given to or taken from the selected Pokémon.
|
||||
// param1: item to hold.
|
||||
// param2: ability to check for, optional.
|
||||
#define FORM_CHANGE_ITEM_HOLD 1
|
||||
|
||||
// Form change that activates when the item is used on the selected Pokémon.
|
||||
// param1: item to use
|
||||
// param2: time of day to check, optional.
|
||||
// - DAY if Form change that activates in the daytime.
|
||||
// - NIGHT if Form change that activates at nighttime.
|
||||
#define FORM_CHANGE_ITEM_USE 2
|
||||
|
||||
// TODO: Form change that activates when the Pokémon learns or forgets the move.
|
||||
// param1: move to check for
|
||||
// param2:
|
||||
// - WHEN_LEARNED if Form change that activates when move is forgotten
|
||||
// - WHEN_FORGOTTEN if Form change that activates when move is learned
|
||||
#define FORM_CHANGE_MOVE 3
|
||||
|
||||
// Form change that activates when the Pokémon is withdrawn from the PC or Daycare.
|
||||
// Daycare withdraw done, PC withdraw TODO.
|
||||
// - No parameters.
|
||||
#define FORM_CHANGE_WITHDRAW 4
|
||||
|
||||
// Form change that activates when the Pokémon faints, either in battle or in the overworld by poison.
|
||||
// If species is not specified and it's on the player's side, it will try to use the value
|
||||
// saved in gBattleStruct->changedSpecies from a previous form change.
|
||||
// - No parameters.
|
||||
#define FORM_CHANGE_FAINT 5
|
||||
|
||||
// Form change that activates when the Pokémon is sent out at the beginning of a battle
|
||||
// param1: item to hold, optional
|
||||
// param2: a move that will be replaced, optional
|
||||
// param3: a new move to replace it with, optional
|
||||
#define FORM_CHANGE_BEGIN_BATTLE 6
|
||||
|
||||
// Form change that activates at the end of a battle. If species is not specified and it's on the player's side, it will try to use the value saved in gBattleStruct->changedSpecies from a previous form change.
|
||||
// param1: item to hold, optional
|
||||
// param2: a move that will be replaced, optional
|
||||
// param3: a new move to replace it with, optional
|
||||
#define FORM_CHANGE_END_BATTLE 7
|
||||
|
||||
// Form change that activates at the end of a battle based on the terrain if it participated in the battle and hasn't fainted. Takes priority over FORM_CHANGE_END_BATTLE.
|
||||
// param1: battle terrain to check.
|
||||
#define FORM_CHANGE_END_BATTLE_TERRAIN 8
|
||||
|
||||
// Form change that activates when the Pokémon is switched out in battle.
|
||||
// - No parameters.
|
||||
#define FORM_CHANGE_BATTLE_SWITCH 9
|
||||
|
||||
// Form change that activates when the Pokémon's HP % passes a certain threshold.
|
||||
// param1: Ability to check.
|
||||
// param2: HP comparer
|
||||
// - HP_HIGHER_THAN if the form triggers when the current HP is higher than the specified threshold.
|
||||
// - HP_LOWER_EQ_THAN if the form triggers when the current HP is lower or equal than the specified threshold.
|
||||
// param3: HP percentage threshold.
|
||||
#define FORM_CHANGE_BATTLE_HP_PERCENT 10
|
||||
|
||||
// Form change that activates when the mon has the defined item.
|
||||
// If it's on the player's side, it also requires ITEM_MEGA_RING in the user's bag and for the player to trigger it by pressing START before selecting a move.
|
||||
// param1: item to hold.
|
||||
#define FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM 11
|
||||
|
||||
// Form change that activates when the mon has the defined move.
|
||||
// If it's on the player's side, it also requires ITEM_MEGA_RING in the user's bag and for the player to trigger it by pressing START before selecting a move.
|
||||
// param1: move to have.
|
||||
#define FORM_CHANGE_BATTLE_MEGA_EVOLUTION_MOVE 12
|
||||
|
||||
// Form change that activates automatically when entering battle with the specified item.
|
||||
// If the item is a Red Orb, it uses the Omega Symbol for the animation and icon. Otherwise, it defaults to the Alpha symbol.
|
||||
// The battle indicator icon is based on the species, with Primal Groudon's as Omega and otherwise being Alpha.
|
||||
// param1: item to hold.
|
||||
#define FORM_CHANGE_BATTLE_PRIMAL_REVERSION 13
|
||||
|
||||
// Form change that activates when the mon Dynamaxes (TODO: with Gigantamax factor).
|
||||
// - No parameters
|
||||
#define FORM_CHANGE_BATTLE_GIGANTAMAX 14
|
||||
|
||||
// Form change that activates automatically when the turn ends.
|
||||
// param1: ability to check.
|
||||
#define FORM_CHANGE_BATTLE_TURN_END 15
|
||||
|
||||
#endif // GUARD_CONSTANTS_FORM_CHANGE_TYPES_H
|
||||
@ -266,9 +266,6 @@
|
||||
#define F_SUMMARY_SCREEN_FLIP_SPRITE 0x80
|
||||
|
||||
// Evolution types
|
||||
#define EVO_MEGA_EVOLUTION 0xffff // Not an actual evolution, used to temporarily mega evolve in battle.
|
||||
#define EVO_MOVE_MEGA_EVOLUTION 0xfffe // Mega Evolution that checks for a move instead of held item.
|
||||
#define EVO_PRIMAL_REVERSION 0xfffd // Not an actual evolution, used to undergo primal reversion in battle.
|
||||
#define EVO_FRIENDSHIP 1 // Pokémon levels up with friendship ≥ 220
|
||||
#define EVO_FRIENDSHIP_DAY 2 // Pokémon levels up during the day with friendship ≥ 220
|
||||
#define EVO_FRIENDSHIP_NIGHT 3 // Pokémon levels up at night with friendship ≥ 220
|
||||
@ -318,16 +315,6 @@
|
||||
#define EVO_MODE_BATTLE_SPECIAL 4
|
||||
#define EVO_MODE_OVERWORLD_SPECIAL 5
|
||||
|
||||
// Form change types
|
||||
#define FORM_CHANGE_END 0
|
||||
#define FORM_ITEM_HOLD 1
|
||||
#define FORM_ITEM_USE 2
|
||||
#define FORM_MOVE 3
|
||||
#define FORM_WITHDRAW 4
|
||||
#define FORM_BATTLE_BEGIN 5
|
||||
#define FORM_BATTLE_END 6
|
||||
#define FORM_GIGANTAMAX 7
|
||||
|
||||
#define MON_PIC_WIDTH 64
|
||||
#define MON_PIC_HEIGHT 64
|
||||
#define MON_PIC_SIZE (MON_PIC_WIDTH * MON_PIC_HEIGHT / 2)
|
||||
@ -355,13 +342,14 @@
|
||||
#define SPECIES_FLAG_LEGENDARY (1 << 0)
|
||||
#define SPECIES_FLAG_MYTHICAL (1 << 1)
|
||||
#define SPECIES_FLAG_MEGA_EVOLUTION (1 << 2)
|
||||
#define SPECIES_FLAG_ULTRA_BEAST (1 << 3)
|
||||
#define SPECIES_FLAG_ALOLAN_FORM (1 << 4)
|
||||
#define SPECIES_FLAG_GALARIAN_FORM (1 << 5)
|
||||
#define SPECIES_FLAG_HISUIAN_FORM (1 << 6)
|
||||
#define SPECIES_FLAG_GENDER_DIFFERENCE (1 << 7)
|
||||
#define SPECIES_FLAG_ALL_PERFECT_IVS (1 << 8)
|
||||
#define SPECIES_FLAG_CANNOT_BE_TRADED (1 << 9)
|
||||
#define SPECIES_FLAG_PRIMAL_REVERSION (1 << 3)
|
||||
#define SPECIES_FLAG_ULTRA_BEAST (1 << 4)
|
||||
#define SPECIES_FLAG_ALOLAN_FORM (1 << 5)
|
||||
#define SPECIES_FLAG_GALARIAN_FORM (1 << 6)
|
||||
#define SPECIES_FLAG_HISUIAN_FORM (1 << 7)
|
||||
#define SPECIES_FLAG_GENDER_DIFFERENCE (1 << 8)
|
||||
#define SPECIES_FLAG_ALL_PERFECT_IVS (1 << 9)
|
||||
#define SPECIES_FLAG_CANNOT_BE_TRADED (1 << 10)
|
||||
|
||||
#define LEGENDARY_PERFECT_IV_COUNT 3
|
||||
|
||||
|
||||
@ -413,6 +413,7 @@ extern const u16 gUnionRoomFacilityClasses[];
|
||||
extern const struct SpriteTemplate gBattlerSpriteTemplates[];
|
||||
extern const s8 gNatureStatTable[][5];
|
||||
extern const u16 *const gFormSpeciesIdTables[NUM_SPECIES];
|
||||
extern const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES];
|
||||
extern const u32 sExpCandyExperienceTable[];
|
||||
|
||||
void ZeroBoxMonData(struct BoxPokemon *boxMon);
|
||||
@ -564,10 +565,12 @@ u8 *MonSpritesGfxManager_GetSpritePtr(u8 managerId, u8 spriteNum);
|
||||
u16 GetFormSpeciesId(u16 speciesId, u8 formId);
|
||||
u8 GetFormIdFromFormSpeciesId(u16 formSpeciesId);
|
||||
u16 GetFormChangeTargetSpecies(struct Pokemon *mon, u16 method, u32 arg);
|
||||
u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *mon, u16 method, u32 arg);
|
||||
u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *boxMon, u16 method, u32 arg);
|
||||
bool32 DoesSpeciesHaveFormChangeMethod(u16 species, u16 method);
|
||||
u16 MonTryLearningNewMoveEvolution(struct Pokemon *mon, bool8 firstMove);
|
||||
bool32 ShouldShowFemaleDifferences(u16 species, u32 personality);
|
||||
void TryToSetBattleFormChangeMoves(struct Pokemon *mon);
|
||||
bool32 TryFormChange(u32 monId, u32 side, u16 method);
|
||||
void TryToSetBattleFormChangeMoves(struct Pokemon *mon, u16 method);
|
||||
u32 GetMonFriendshipScore(struct Pokemon *pokemon);
|
||||
void UpdateMonPersonality(struct BoxPokemon *boxMon, u32 personality);
|
||||
|
||||
|
||||
@ -3059,12 +3059,8 @@ static bool32 IsPinchBerryItemEffect(u16 holdEffect)
|
||||
case HOLD_EFFECT_SP_DEFENSE_UP:
|
||||
case HOLD_EFFECT_CRITICAL_UP:
|
||||
case HOLD_EFFECT_RANDOM_STAT_UP:
|
||||
#ifdef HOLD_EFFECT_CUSTAP_BERRY
|
||||
case HOLD_EFFECT_CUSTAP_BERRY:
|
||||
#endif
|
||||
#ifdef HOLD_EFFECT_MICLE_BERRY
|
||||
case HOLD_EFFECT_MICLE_BERRY:
|
||||
#endif
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -3838,7 +3834,6 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score)
|
||||
ProtectChecks(battlerAtk, battlerDef, move, predictedMove, &score);
|
||||
break;
|
||||
case MOVE_KINGS_SHIELD:
|
||||
#if (defined SPECIES_AEGISLASH && defined SPECIES_AEGISLASH_BLADE)
|
||||
if (AI_DATA->abilities[battlerAtk] == ABILITY_STANCE_CHANGE //Special logic for Aegislash
|
||||
&& gBattleMons[battlerAtk].species == SPECIES_AEGISLASH_BLADE
|
||||
&& !IsBattlerIncapacitated(battlerDef, AI_DATA->abilities[battlerDef]))
|
||||
@ -3846,7 +3841,6 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score)
|
||||
score += 3;
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
//fallthrough
|
||||
default: // protect
|
||||
ProtectChecks(battlerAtk, battlerDef, move, predictedMove, &score);
|
||||
@ -4514,7 +4508,6 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score)
|
||||
score += 3;
|
||||
break;
|
||||
case EFFECT_RELIC_SONG:
|
||||
#if (defined SPECIES_MELOETTA && defined SPECIES_MELOETTA_PIROUETTE)
|
||||
if (!(gBattleMons[battlerAtk].status2 & STATUS2_TRANSFORMED)) // Don't try to change form if it's transformed.
|
||||
{
|
||||
if (gBattleMons[battlerAtk].species == SPECIES_MELOETTA && gBattleMons[battlerDef].defense < gBattleMons[battlerDef].spDefense)
|
||||
@ -4522,7 +4515,6 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score)
|
||||
else if (gBattleMons[battlerAtk].species == SPECIES_MELOETTA_PIROUETTE && gBattleMons[battlerDef].spDefense < gBattleMons[battlerDef].defense)
|
||||
score += 3; // Change to Aria if can do more damage
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
case EFFECT_ELECTRIC_TERRAIN:
|
||||
case EFFECT_MISTY_TERRAIN:
|
||||
|
||||
@ -992,9 +992,7 @@ static void UpdateLvlInHealthbox(u8 healthboxSpriteId, u8 lvl)
|
||||
u8 battler = gSprites[healthboxSpriteId].hMain_Battler;
|
||||
|
||||
// Don't print Lv char if mon is mega evolved or primal reverted or Dynamaxed.
|
||||
if (gBattleStruct->mega.evolvedPartyIds[GetBattlerSide(battler)] & gBitTable[gBattlerPartyIndexes[battler]]
|
||||
|| gBattleStruct->mega.primalRevertedPartyIds[GetBattlerSide(battler)] & gBitTable[gBattlerPartyIndexes[battler]]
|
||||
|| IsDynamaxed(battler))
|
||||
if (IsBattlerMegaEvolved(battler) || IsBattlerPrimalReverted(battler) || IsDynamaxed(battler))
|
||||
{
|
||||
objVram = ConvertIntToDecimalStringN(text, lvl, STR_CONV_MODE_LEFT_ALIGN, 3);
|
||||
xPos = 5 * (3 - (objVram - (text + 2))) - 1;
|
||||
@ -1519,22 +1517,16 @@ static bool32 MegaIndicator_ShouldBeInvisible(u32 battlerId, u32 indicatorType)
|
||||
u32 side = GetBattlerSide(battlerId);
|
||||
if (indicatorType == INDICATOR_MEGA)
|
||||
{
|
||||
if (gBattleStruct->mega.evolvedPartyIds[side] & gBitTable[gBattlerPartyIndexes[battlerId]])
|
||||
if (IsBattlerMegaEvolved(battlerId))
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (indicatorType == INDICATOR_ALPHA)
|
||||
{
|
||||
if (gBattleMons[battlerId].species != SPECIES_KYOGRE_PRIMAL)
|
||||
return TRUE;
|
||||
}
|
||||
else if (indicatorType == INDICATOR_OMEGA)
|
||||
{
|
||||
if (gBattleMons[battlerId].species != SPECIES_GROUDON_PRIMAL)
|
||||
return TRUE;
|
||||
}
|
||||
if (gBattleStruct->mega.primalRevertedPartyIds[side] & gBitTable[gBattlerPartyIndexes[battlerId]])
|
||||
if (indicatorType == INDICATOR_ALPHA && gBattleMons[battlerId].species != SPECIES_KYOGRE_PRIMAL)
|
||||
return TRUE;
|
||||
else if (indicatorType == INDICATOR_OMEGA && gBattleMons[battlerId].species != SPECIES_GROUDON_PRIMAL)
|
||||
return TRUE;
|
||||
if (IsBattlerPrimalReverted(battlerId))
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
|
||||
@ -603,21 +603,9 @@ static void CB2_InitBattleInternal(void)
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
{
|
||||
// Player's side
|
||||
targetSpecies = GetFormChangeTargetSpecies(&gPlayerParty[i], FORM_BATTLE_BEGIN, 0);
|
||||
if (targetSpecies != SPECIES_NONE)
|
||||
{
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_SPECIES, &targetSpecies);
|
||||
CalculateMonStats(&gPlayerParty[i]);
|
||||
TryToSetBattleFormChangeMoves(&gPlayerParty[i]);
|
||||
}
|
||||
TryFormChange(i, B_SIDE_PLAYER, FORM_CHANGE_BEGIN_BATTLE);
|
||||
// Opponent's side
|
||||
targetSpecies = GetFormChangeTargetSpecies(&gEnemyParty[i], FORM_BATTLE_BEGIN, 0);
|
||||
if (targetSpecies != SPECIES_NONE)
|
||||
{
|
||||
SetMonData(&gEnemyParty[i], MON_DATA_SPECIES, &targetSpecies);
|
||||
CalculateMonStats(&gEnemyParty[i]);
|
||||
TryToSetBattleFormChangeMoves(&gEnemyParty[i]);
|
||||
}
|
||||
TryFormChange(i, B_SIDE_OPPONENT, FORM_CHANGE_BEGIN_BATTLE);
|
||||
}
|
||||
|
||||
gBattleCommunication[MULTIUSE_STATE] = 0;
|
||||
@ -3268,10 +3256,7 @@ void FaintClearSetData(void)
|
||||
gBattleMons[gActiveBattler].type3 = TYPE_MYSTERY;
|
||||
|
||||
Ai_UpdateFaintData(gActiveBattler);
|
||||
UndoFormChange(gBattlerPartyIndexes[gActiveBattler], GET_BATTLER_SIDE(gActiveBattler), FALSE);
|
||||
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
|
||||
UndoMegaEvolution(gBattlerPartyIndexes[gActiveBattler]);
|
||||
// TODO: UndoDynamax
|
||||
TryBattleFormChange(gActiveBattler, FORM_CHANGE_FAINT);
|
||||
|
||||
gBattleStruct->overwrittenAbilities[gActiveBattler] = ABILITY_NONE;
|
||||
|
||||
@ -3701,24 +3686,6 @@ static void TryDoEventsBeforeFirstTurn(void)
|
||||
}
|
||||
memset(gTotemBoosts, 0, sizeof(gTotemBoosts)); // erase all totem boosts just to be safe
|
||||
|
||||
// Primal Reversion
|
||||
for (i = 0; i < gBattlersCount; i++)
|
||||
{
|
||||
if (GetBattlerHoldEffect(i, TRUE) == HOLD_EFFECT_PRIMAL_ORB)
|
||||
{
|
||||
for (j = 0; j < EVOS_PER_MON; j++)
|
||||
{
|
||||
if (gEvolutionTable[gBattleMons[i].species][j].targetSpecies != SPECIES_NONE
|
||||
&& gEvolutionTable[gBattleMons[i].species][j].method == EVO_PRIMAL_REVERSION)
|
||||
{
|
||||
gBattlerAttacker = i;
|
||||
BattleScriptExecute(BattleScript_PrimalReversion);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Check neutralizing gas
|
||||
if (AbilityBattleEffects(ABILITYEFFECT_NEUTRALIZINGGAS, 0, 0, 0, 0) != 0)
|
||||
return;
|
||||
@ -3727,6 +3694,14 @@ static void TryDoEventsBeforeFirstTurn(void)
|
||||
while (gBattleStruct->switchInAbilitiesCounter < gBattlersCount)
|
||||
{
|
||||
gBattlerAttacker = gBattlerByTurnOrder[gBattleStruct->switchInAbilitiesCounter++];
|
||||
|
||||
// Primal Reversion
|
||||
if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_PRIMAL_ORB
|
||||
&& GetBattleFormChangeTargetSpecies(gBattlerAttacker, FORM_CHANGE_BATTLE_PRIMAL_REVERSION) != SPECIES_NONE)
|
||||
{
|
||||
BattleScriptExecute(BattleScript_PrimalReversion);
|
||||
return;
|
||||
}
|
||||
if (AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, gBattlerAttacker, 0, 0, 0) != 0)
|
||||
return;
|
||||
}
|
||||
@ -4916,7 +4891,7 @@ static void CheckMegaEvolutionBeforeTurn(void)
|
||||
|
||||
gBattleStruct->mega.toEvolve &= ~(gBitTable[gActiveBattler]);
|
||||
gLastUsedItem = gBattleMons[gActiveBattler].item;
|
||||
if (GetWishMegaEvolutionSpecies(GetMonData(mon, MON_DATA_SPECIES), GetMonData(mon, MON_DATA_MOVE1), GetMonData(mon, MON_DATA_MOVE2), GetMonData(mon, MON_DATA_MOVE3), GetMonData(mon, MON_DATA_MOVE4)))
|
||||
if (GetBattleFormChangeTargetSpecies(gActiveBattler, FORM_CHANGE_BATTLE_MEGA_EVOLUTION_MOVE) != SPECIES_NONE)
|
||||
BattleScriptExecute(BattleScript_WishMegaEvolution);
|
||||
else
|
||||
BattleScriptExecute(BattleScript_MegaEvolution);
|
||||
@ -5272,22 +5247,31 @@ static void HandleEndTurn_FinishBattle(void)
|
||||
#endif
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
{
|
||||
UndoMegaEvolution(i);
|
||||
UndoFormChange(i, B_SIDE_PLAYER, FALSE);
|
||||
DoBurmyFormChange(i);
|
||||
// TODO: UndoDynamax(i)
|
||||
}
|
||||
#if B_RECALCULATE_STATS >= GEN_5
|
||||
// Recalculate the stats of every party member before the end
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
{
|
||||
if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_NONE
|
||||
&& GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG)
|
||||
{
|
||||
bool8 changedForm = FALSE;
|
||||
|
||||
// Appeared in battle and didn't faint
|
||||
if ((gBattleStruct->appearedInBattle & gBitTable[i]) && GetMonData(&gPlayerParty[i], MON_DATA_HP, NULL) != 0)
|
||||
changedForm = TryFormChange(i, B_SIDE_PLAYER, FORM_CHANGE_END_BATTLE_TERRAIN);
|
||||
|
||||
if (!changedForm)
|
||||
changedForm = TryFormChange(i, B_SIDE_PLAYER, FORM_CHANGE_END_BATTLE);
|
||||
|
||||
// Clear original species field
|
||||
gBattleStruct->changedSpecies[i] = SPECIES_NONE;
|
||||
|
||||
#if B_RECALCULATE_STATS >= GEN_5
|
||||
// Recalculate the stats of every party member before the end
|
||||
if (!changedForm)
|
||||
CalculateMonStats(&gPlayerParty[i]);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
// Clear battle mon species to avoid a bug on the next battle that causes
|
||||
// healthboxes loading incorrectly due to it trying to create a Mega Indicator
|
||||
// if the previous battler would've had it.
|
||||
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
|
||||
{
|
||||
gBattleMons[i].species = SPECIES_NONE;
|
||||
}
|
||||
#endif
|
||||
gBattleMainFunc = FreeResetData_ReturnToOvOrDoEvolutions;
|
||||
gCB2_AfterEvolution = BattleMainCB2;
|
||||
}
|
||||
|
||||
@ -4392,15 +4392,7 @@ static void Cmd_getexp(void)
|
||||
|
||||
if (battlerId != 0xFF)
|
||||
{
|
||||
gBattleMons[battlerId].level = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_LEVEL);
|
||||
gBattleMons[battlerId].hp = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_HP);
|
||||
gBattleMons[battlerId].maxHP = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_MAX_HP);
|
||||
gBattleMons[battlerId].attack = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_ATK);
|
||||
gBattleMons[battlerId].defense = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_DEF);
|
||||
gBattleMons[battlerId].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPEED);
|
||||
gBattleMons[battlerId].spAttack = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPATK);
|
||||
gBattleMons[battlerId].spDefense = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPDEF);
|
||||
|
||||
CopyMonLevelAndBaseStatsToBattleMon(battlerId, &gPlayerParty[gBattleStruct->expGetterMonId]);
|
||||
if (gStatuses3[battlerId] & STATUS3_POWER_TRICK)
|
||||
SWAP(gBattleMons[battlerId].attack, gBattleMons[battlerId].defense, temp);
|
||||
}
|
||||
@ -8540,24 +8532,6 @@ u32 IsAbilityStatusProtected(u32 battler)
|
||||
|| IsShieldsDownProtected(battler);
|
||||
}
|
||||
|
||||
static void RecalcBattlerStats(u32 battler, struct Pokemon *mon)
|
||||
{
|
||||
CalculateMonStats(mon);
|
||||
if (IsDynamaxed(battler) && gChosenActionByBattler[battler] != B_ACTION_SWITCH)
|
||||
ApplyDynamaxHPMultiplier(battler, mon);
|
||||
gBattleMons[battler].level = GetMonData(mon, MON_DATA_LEVEL);
|
||||
gBattleMons[battler].hp = GetMonData(mon, MON_DATA_HP);
|
||||
gBattleMons[battler].maxHP = GetMonData(mon, MON_DATA_MAX_HP);
|
||||
gBattleMons[battler].attack = GetMonData(mon, MON_DATA_ATK);
|
||||
gBattleMons[battler].defense = GetMonData(mon, MON_DATA_DEF);
|
||||
gBattleMons[battler].speed = GetMonData(mon, MON_DATA_SPEED);
|
||||
gBattleMons[battler].spAttack = GetMonData(mon, MON_DATA_SPATK);
|
||||
gBattleMons[battler].spDefense = GetMonData(mon, MON_DATA_SPDEF);
|
||||
gBattleMons[battler].ability = GetMonAbility(mon);
|
||||
gBattleMons[battler].type1 = gSpeciesInfo[gBattleMons[battler].species].types[0];
|
||||
gBattleMons[battler].type2 = gSpeciesInfo[gBattleMons[battler].species].types[1];
|
||||
}
|
||||
|
||||
u32 GetHighestStatId(u32 battlerId)
|
||||
{
|
||||
u32 i, highestId = STAT_ATK, highestStat = gBattleMons[battlerId].attack;
|
||||
@ -8726,32 +8700,14 @@ static void HandleScriptMegaPrimal(u32 caseId, u32 battlerId, bool32 isMega)
|
||||
u16 newSpecies;
|
||||
if (isMega)
|
||||
{
|
||||
gBattleStruct->mega.evolvedSpecies[battlerId] = gBattleMons[battlerId].species;
|
||||
if (position == B_POSITION_PLAYER_LEFT
|
||||
|| (position == B_POSITION_PLAYER_RIGHT && !(gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER))))
|
||||
{
|
||||
gBattleStruct->mega.playerEvolvedSpecies = gBattleStruct->mega.evolvedSpecies[battlerId];
|
||||
}
|
||||
//Checks regular Mega Evolution
|
||||
newSpecies = GetMegaEvolutionSpecies(gBattleStruct->mega.evolvedSpecies[battlerId], gBattleMons[battlerId].item);
|
||||
newSpecies = GetBattleFormChangeTargetSpecies(battlerId, FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM);
|
||||
//Checks Wish Mega Evolution
|
||||
if (newSpecies == SPECIES_NONE)
|
||||
{
|
||||
newSpecies = GetWishMegaEvolutionSpecies(gBattleStruct->mega.evolvedSpecies[battlerId],
|
||||
gBattleMons[battlerId].moves[0], gBattleMons[battlerId].moves[1], gBattleMons[battlerId].moves[2], gBattleMons[battlerId].moves[3]);
|
||||
}
|
||||
newSpecies = GetBattleFormChangeTargetSpecies(battlerId, FORM_CHANGE_BATTLE_MEGA_EVOLUTION_MOVE);
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleStruct->mega.primalRevertedSpecies[battlerId] = gBattleMons[battlerId].species;
|
||||
if (position == B_POSITION_PLAYER_LEFT
|
||||
|| (position == B_POSITION_PLAYER_RIGHT && !(gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER))))
|
||||
{
|
||||
gBattleStruct->mega.playerPrimalRevertedSpecies = gBattleStruct->mega.primalRevertedSpecies[battlerId];
|
||||
}
|
||||
// Checks Primal Reversion.
|
||||
newSpecies = GetPrimalReversionSpecies(gBattleStruct->mega.primalRevertedSpecies[battlerId], gBattleMons[battlerId].item);
|
||||
}
|
||||
newSpecies = GetBattleFormChangeTargetSpecies(battlerId, FORM_CHANGE_BATTLE_PRIMAL_REVERSION);
|
||||
|
||||
gBattleMons[battlerId].species = newSpecies;
|
||||
PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[battlerId].species);
|
||||
@ -8764,14 +8720,7 @@ static void HandleScriptMegaPrimal(u32 caseId, u32 battlerId, bool32 isMega)
|
||||
{
|
||||
RecalcBattlerStats(battlerId, mon);
|
||||
if (isMega)
|
||||
{
|
||||
gBattleStruct->mega.alreadyEvolved[position] = TRUE;
|
||||
gBattleStruct->mega.evolvedPartyIds[side] |= gBitTable[gBattlerPartyIndexes[battlerId]];
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleStruct->mega.primalRevertedPartyIds[side] |= gBitTable[gBattlerPartyIndexes[battlerId]];
|
||||
}
|
||||
}
|
||||
// Update healthbox and elevation and play cry.
|
||||
else
|
||||
@ -10683,15 +10632,7 @@ static void Cmd_various(void)
|
||||
case VARIOUS_JUMP_IF_CANT_REVERT_TO_PRIMAL:
|
||||
{
|
||||
VARIOUS_ARGS(const u8 *jumpInstr);
|
||||
bool8 canDoPrimalReversion = FALSE;
|
||||
|
||||
for (i = 0; i < EVOS_PER_MON; i++)
|
||||
{
|
||||
if (gEvolutionTable[gBattleMons[gActiveBattler].species][i].method == EVO_PRIMAL_REVERSION
|
||||
&& gEvolutionTable[gBattleMons[gActiveBattler].species][i].param == gBattleMons[gActiveBattler].item)
|
||||
canDoPrimalReversion = TRUE;
|
||||
}
|
||||
if (!canDoPrimalReversion)
|
||||
if (GetBattleFormChangeTargetSpecies(gActiveBattler, FORM_CHANGE_BATTLE_PRIMAL_REVERSION) == SPECIES_NONE)
|
||||
gBattlescriptCurrInstr = cmd->jumpInstr;
|
||||
else
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
@ -15830,7 +15771,7 @@ static void Cmd_handleballthrow(void)
|
||||
{
|
||||
BtlController_EmitBallThrowAnim(BUFFER_A, BALL_3_SHAKES_SUCCESS);
|
||||
MarkBattlerForControllerExec(gActiveBattler);
|
||||
UndoFormChange(gBattlerPartyIndexes[gBattlerTarget], GET_BATTLER_SIDE(gBattlerTarget), FALSE);
|
||||
TryBattleFormChange(gBattlerTarget, FORM_CHANGE_END_BATTLE);
|
||||
gBattlescriptCurrInstr = BattleScript_SuccessBallThrow;
|
||||
SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_POKEBALL, &gLastUsedItem);
|
||||
|
||||
@ -15884,7 +15825,7 @@ static void Cmd_handleballthrow(void)
|
||||
if (IsCriticalCapture())
|
||||
gBattleSpritesDataPtr->animationData->criticalCaptureSuccess = TRUE;
|
||||
|
||||
UndoFormChange(gBattlerPartyIndexes[gBattlerTarget], GET_BATTLER_SIDE(gBattlerTarget), FALSE);
|
||||
TryBattleFormChange(gBattlerTarget, FORM_CHANGE_END_BATTLE);
|
||||
gBattlescriptCurrInstr = BattleScript_SuccessBallThrow;
|
||||
SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_POKEBALL, &gLastUsedItem);
|
||||
|
||||
|
||||
@ -552,7 +552,7 @@ void HandleAction_Switch(void)
|
||||
if (gBattleResults.playerSwitchesCounter < 255)
|
||||
gBattleResults.playerSwitchesCounter++;
|
||||
|
||||
UndoFormChange(gBattlerPartyIndexes[gBattlerAttacker], GetBattlerSide(gBattlerAttacker), TRUE);
|
||||
TryBattleFormChange(gBattlerAttacker, FORM_CHANGE_BATTLE_SWITCH);
|
||||
}
|
||||
|
||||
void HandleAction_UseItem(void)
|
||||
@ -4257,51 +4257,6 @@ static bool32 TryChangeBattleTerrain(u32 battler, u32 statusFlag, u8 *timer)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool32 ShouldChangeFormHpBased(u32 battler)
|
||||
{
|
||||
// Ability, form >, form <=, hp divided
|
||||
static const u16 forms[][4] =
|
||||
{
|
||||
{ABILITY_ZEN_MODE, SPECIES_DARMANITAN, SPECIES_DARMANITAN_ZEN_MODE, 2},
|
||||
{ABILITY_SHIELDS_DOWN, SPECIES_MINIOR, SPECIES_MINIOR_CORE_RED, 2},
|
||||
{ABILITY_SHIELDS_DOWN, SPECIES_MINIOR_METEOR_BLUE, SPECIES_MINIOR_CORE_BLUE, 2},
|
||||
{ABILITY_SHIELDS_DOWN, SPECIES_MINIOR_METEOR_GREEN, SPECIES_MINIOR_CORE_GREEN, 2},
|
||||
{ABILITY_SHIELDS_DOWN, SPECIES_MINIOR_METEOR_INDIGO, SPECIES_MINIOR_CORE_INDIGO, 2},
|
||||
{ABILITY_SHIELDS_DOWN, SPECIES_MINIOR_METEOR_ORANGE, SPECIES_MINIOR_CORE_ORANGE, 2},
|
||||
{ABILITY_SHIELDS_DOWN, SPECIES_MINIOR_METEOR_VIOLET, SPECIES_MINIOR_CORE_VIOLET, 2},
|
||||
{ABILITY_SHIELDS_DOWN, SPECIES_MINIOR_METEOR_YELLOW, SPECIES_MINIOR_CORE_YELLOW, 2},
|
||||
{ABILITY_SCHOOLING, SPECIES_WISHIWASHI_SCHOOL, SPECIES_WISHIWASHI, 4},
|
||||
{ABILITY_GULP_MISSILE, SPECIES_CRAMORANT, SPECIES_CRAMORANT_GORGING, 2},
|
||||
{ABILITY_GULP_MISSILE, SPECIES_CRAMORANT, SPECIES_CRAMORANT_GULPING, 1},
|
||||
{ABILITY_ZEN_MODE, SPECIES_DARMANITAN_GALARIAN, SPECIES_DARMANITAN_ZEN_MODE_GALARIAN, 2},
|
||||
};
|
||||
u32 i;
|
||||
u16 battlerAbility = GetBattlerAbility(battler);
|
||||
|
||||
if (gBattleMons[battler].status2 & STATUS2_TRANSFORMED)
|
||||
return FALSE;
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(forms); i++)
|
||||
{
|
||||
if (battlerAbility == forms[i][0])
|
||||
{
|
||||
if (gBattleMons[battler].species == forms[i][2]
|
||||
&& gBattleMons[battler].hp > gBattleMons[battler].maxHP / forms[i][3])
|
||||
{
|
||||
gBattleMons[battler].species = forms[i][1];
|
||||
return TRUE;
|
||||
}
|
||||
if (gBattleMons[battler].species == forms[i][1]
|
||||
&& gBattleMons[battler].hp <= gBattleMons[battler].maxHP / forms[i][3])
|
||||
{
|
||||
gBattleMons[battler].species = forms[i][2];
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static u8 ForewarnChooseMove(u32 battler)
|
||||
{
|
||||
struct Forewarn {
|
||||
@ -4855,8 +4810,10 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move
|
||||
case ABILITY_SCHOOLING:
|
||||
if (gBattleMons[battler].level < 20)
|
||||
break;
|
||||
// Fallthrough
|
||||
case ABILITY_ZEN_MODE:
|
||||
case ABILITY_SHIELDS_DOWN:
|
||||
if (ShouldChangeFormHpBased(battler))
|
||||
if (TryBattleFormChange(battler, FORM_CHANGE_BATTLE_HP_PERCENT))
|
||||
{
|
||||
BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3);
|
||||
effect++;
|
||||
@ -5127,17 +5084,12 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move
|
||||
case ABILITY_SCHOOLING:
|
||||
if (gBattleMons[battler].level < 20)
|
||||
break;
|
||||
// Fallthrough
|
||||
case ABILITY_ZEN_MODE:
|
||||
case ABILITY_SHIELDS_DOWN:
|
||||
if ((effect = ShouldChangeFormHpBased(battler)))
|
||||
BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3);
|
||||
break;
|
||||
case ABILITY_POWER_CONSTRUCT:
|
||||
if ((gBattleMons[battler].species == SPECIES_ZYGARDE || gBattleMons[battler].species == SPECIES_ZYGARDE_10)
|
||||
&& gBattleMons[battler].hp <= gBattleMons[battler].maxHP / 2)
|
||||
if (TryBattleFormChange(battler, FORM_CHANGE_BATTLE_HP_PERCENT))
|
||||
{
|
||||
gBattleStruct->changedSpecies[gBattlerPartyIndexes[battler]] = gBattleMons[battler].species;
|
||||
gBattleMons[battler].species = SPECIES_ZYGARDE_COMPLETE;
|
||||
BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3);
|
||||
effect++;
|
||||
}
|
||||
@ -5157,18 +5109,9 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move
|
||||
}
|
||||
break;
|
||||
case ABILITY_HUNGER_SWITCH:
|
||||
if (!(gBattleMons[battler].status2 & STATUS2_TRANSFORMED))
|
||||
if (TryBattleFormChange(battler, FORM_CHANGE_BATTLE_TURN_END))
|
||||
{
|
||||
if (gBattleMons[battler].species == SPECIES_MORPEKO)
|
||||
{
|
||||
gBattleMons[battler].species = SPECIES_MORPEKO_HANGRY;
|
||||
BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3NoPopup);
|
||||
}
|
||||
else if (gBattleMons[battler].species == SPECIES_MORPEKO_HANGRY)
|
||||
{
|
||||
gBattleMons[battler].species = SPECIES_MORPEKO;
|
||||
BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3NoPopup);
|
||||
}
|
||||
BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3NoPopup);
|
||||
effect++;
|
||||
}
|
||||
break;
|
||||
@ -5852,7 +5795,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move
|
||||
{
|
||||
if (gBattleMons[gBattlerTarget].species == SPECIES_CRAMORANT_GORGING)
|
||||
{
|
||||
gBattleStruct->changedSpecies[gBattlerPartyIndexes[gBattlerTarget]] = gBattleMons[gBattlerTarget].species;
|
||||
gBattleMons[gBattlerTarget].species = SPECIES_CRAMORANT;
|
||||
if (GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD)
|
||||
{
|
||||
@ -5866,7 +5808,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move
|
||||
}
|
||||
else if (gBattleMons[gBattlerTarget].species == SPECIES_CRAMORANT_GULPING)
|
||||
{
|
||||
gBattleStruct->changedSpecies[gBattlerPartyIndexes[gBattlerTarget]] = gBattleMons[gBattlerTarget].species;
|
||||
gBattleMons[gBattlerTarget].species = SPECIES_CRAMORANT;
|
||||
if (GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD)
|
||||
{
|
||||
@ -5988,7 +5929,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move
|
||||
break;
|
||||
case ABILITY_GULP_MISSILE:
|
||||
if (((gCurrentMove == MOVE_SURF && TARGET_TURN_DAMAGED) || gStatuses3[gBattlerAttacker] & STATUS3_UNDERWATER)
|
||||
&& (effect = ShouldChangeFormHpBased(gBattlerAttacker)))
|
||||
&& TryBattleFormChange(gBattlerAttacker, FORM_CHANGE_BATTLE_HP_PERCENT))
|
||||
{
|
||||
BattleScriptPushCursor();
|
||||
gBattlescriptCurrInstr = BattleScript_AttackerFormChange;
|
||||
@ -9446,10 +9387,7 @@ static bool32 CanEvolve(u32 species)
|
||||
|
||||
for (i = 0; i < EVOS_PER_MON; i++)
|
||||
{
|
||||
if (gEvolutionTable[species][i].method
|
||||
&& gEvolutionTable[species][i].method != EVO_MEGA_EVOLUTION
|
||||
&& gEvolutionTable[species][i].method != EVO_MOVE_MEGA_EVOLUTION
|
||||
&& gEvolutionTable[species][i].method != EVO_PRIMAL_REVERSION)
|
||||
if (gEvolutionTable[species][i].method)
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
@ -10110,46 +10048,27 @@ bool32 IsPartnerMonFromSameTrainer(u8 battlerId)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
u16 GetMegaEvolutionSpecies(u16 preEvoSpecies, u16 heldItemId)
|
||||
bool32 DoesSpeciesUseHoldItemToChangeForm(u16 species, u16 heldItemId)
|
||||
{
|
||||
u32 i;
|
||||
const struct FormChange *formChanges = gFormChangeTablePointers[species];
|
||||
|
||||
for (i = 0; i < EVOS_PER_MON; i++)
|
||||
if (formChanges != NULL)
|
||||
{
|
||||
if (gEvolutionTable[preEvoSpecies][i].method == EVO_MEGA_EVOLUTION
|
||||
&& gEvolutionTable[preEvoSpecies][i].param == heldItemId)
|
||||
return gEvolutionTable[preEvoSpecies][i].targetSpecies;
|
||||
}
|
||||
return SPECIES_NONE;
|
||||
}
|
||||
|
||||
u16 GetPrimalReversionSpecies(u16 preEvoSpecies, u16 heldItemId)
|
||||
{
|
||||
u32 i;
|
||||
|
||||
for (i = 0; i < EVOS_PER_MON; i++)
|
||||
{
|
||||
if (gEvolutionTable[preEvoSpecies][i].method == EVO_PRIMAL_REVERSION
|
||||
&& gEvolutionTable[preEvoSpecies][i].param == heldItemId)
|
||||
return gEvolutionTable[preEvoSpecies][i].targetSpecies;
|
||||
}
|
||||
return SPECIES_NONE;
|
||||
}
|
||||
|
||||
u16 GetWishMegaEvolutionSpecies(u16 preEvoSpecies, u16 moveId1, u16 moveId2, u16 moveId3, u16 moveId4)
|
||||
{
|
||||
u32 i, par;
|
||||
|
||||
for (i = 0; i < EVOS_PER_MON; i++)
|
||||
{
|
||||
if (gEvolutionTable[preEvoSpecies][i].method == EVO_MOVE_MEGA_EVOLUTION)
|
||||
for (i = 0; formChanges[i].method != FORM_CHANGE_TERMINATOR; i++)
|
||||
{
|
||||
par = gEvolutionTable[preEvoSpecies][i].param;
|
||||
if (par == moveId1 || par == moveId2 || par == moveId3 || par == moveId4)
|
||||
return gEvolutionTable[preEvoSpecies][i].targetSpecies;
|
||||
switch (formChanges[i].method)
|
||||
{
|
||||
case FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM:
|
||||
case FORM_CHANGE_BATTLE_PRIMAL_REVERSION:
|
||||
case FORM_CHANGE_ITEM_HOLD:
|
||||
if (formChanges[i].param1 == heldItemId)
|
||||
return TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return SPECIES_NONE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool32 CanMegaEvolve(u8 battlerId)
|
||||
@ -10192,7 +10111,7 @@ bool32 CanMegaEvolve(u8 battlerId)
|
||||
itemId = GetMonData(mon, MON_DATA_HELD_ITEM);
|
||||
|
||||
// Check if there is an entry in the evolution table for regular Mega Evolution.
|
||||
if (GetMegaEvolutionSpecies(species, itemId) != SPECIES_NONE)
|
||||
if (GetBattleFormChangeTargetSpecies(battlerId, FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM) != SPECIES_NONE)
|
||||
{
|
||||
#if DEBUG_BATTLE_MENU == TRUE
|
||||
if (gBattleStruct->debugHoldEffects[battlerId])
|
||||
@ -10210,85 +10129,140 @@ bool32 CanMegaEvolve(u8 battlerId)
|
||||
}
|
||||
|
||||
// Check if there is an entry in the evolution table for Wish Mega Evolution.
|
||||
if (GetWishMegaEvolutionSpecies(species, GetMonData(mon, MON_DATA_MOVE1), GetMonData(mon, MON_DATA_MOVE2), GetMonData(mon, MON_DATA_MOVE3), GetMonData(mon, MON_DATA_MOVE4)))
|
||||
if (GetBattleFormChangeTargetSpecies(battlerId, FORM_CHANGE_BATTLE_MEGA_EVOLUTION_MOVE) != SPECIES_NONE)
|
||||
return TRUE;
|
||||
|
||||
// No checks passed, the mon CAN'T mega evolve.
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void UndoMegaEvolution(u32 monId)
|
||||
bool32 IsBattlerMegaEvolved(u8 battlerId)
|
||||
{
|
||||
u16 baseSpecies = GET_BASE_SPECIES_ID(GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES));
|
||||
|
||||
if (gBattleStruct->mega.evolvedPartyIds[B_SIDE_PLAYER] & gBitTable[monId])
|
||||
{
|
||||
gBattleStruct->mega.evolvedPartyIds[B_SIDE_PLAYER] &= ~(gBitTable[monId]);
|
||||
SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &baseSpecies);
|
||||
CalculateMonStats(&gPlayerParty[monId]);
|
||||
}
|
||||
else if (gBattleStruct->mega.primalRevertedPartyIds[B_SIDE_PLAYER] & gBitTable[monId])
|
||||
{
|
||||
gBattleStruct->mega.primalRevertedPartyIds[B_SIDE_PLAYER] &= ~(gBitTable[monId]);
|
||||
SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &baseSpecies);
|
||||
CalculateMonStats(&gPlayerParty[monId]);
|
||||
}
|
||||
// While not exactly a mega evolution, Zygarde follows the same rules.
|
||||
else if (GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, NULL) == SPECIES_ZYGARDE_COMPLETE)
|
||||
{
|
||||
SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleStruct->changedSpecies[monId]);
|
||||
gBattleStruct->changedSpecies[monId] = 0;
|
||||
CalculateMonStats(&gPlayerParty[monId]);
|
||||
}
|
||||
return (gSpeciesInfo[gBattleMons[battlerId].species].flags & SPECIES_FLAG_MEGA_EVOLUTION);
|
||||
}
|
||||
|
||||
void UndoFormChange(u32 monId, u32 side, bool32 isSwitchingOut)
|
||||
bool32 IsBattlerPrimalReverted(u8 battlerId)
|
||||
{
|
||||
u32 i, currSpecies, targetSpecies;
|
||||
struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty;
|
||||
static const u16 species[][3] =
|
||||
{
|
||||
// Changed Form ID Default Form ID Should change on switch
|
||||
{SPECIES_EISCUE_NOICE_FACE, SPECIES_EISCUE, TRUE},
|
||||
{SPECIES_MIMIKYU_BUSTED, SPECIES_MIMIKYU, FALSE},
|
||||
{SPECIES_GRENINJA_ASH, SPECIES_GRENINJA_BATTLE_BOND, FALSE},
|
||||
{SPECIES_MELOETTA_PIROUETTE, SPECIES_MELOETTA, FALSE},
|
||||
{SPECIES_AEGISLASH_BLADE, SPECIES_AEGISLASH, TRUE},
|
||||
{SPECIES_DARMANITAN_ZEN_MODE, SPECIES_DARMANITAN, TRUE},
|
||||
{SPECIES_MINIOR, SPECIES_MINIOR_CORE_RED, TRUE},
|
||||
{SPECIES_MINIOR_METEOR_BLUE, SPECIES_MINIOR_CORE_BLUE, TRUE},
|
||||
{SPECIES_MINIOR_METEOR_GREEN, SPECIES_MINIOR_CORE_GREEN, TRUE},
|
||||
{SPECIES_MINIOR_METEOR_INDIGO, SPECIES_MINIOR_CORE_INDIGO, TRUE},
|
||||
{SPECIES_MINIOR_METEOR_ORANGE, SPECIES_MINIOR_CORE_ORANGE, TRUE},
|
||||
{SPECIES_MINIOR_METEOR_VIOLET, SPECIES_MINIOR_CORE_VIOLET, TRUE},
|
||||
{SPECIES_MINIOR_METEOR_YELLOW, SPECIES_MINIOR_CORE_YELLOW, TRUE},
|
||||
{SPECIES_WISHIWASHI_SCHOOL, SPECIES_WISHIWASHI, TRUE},
|
||||
{SPECIES_CRAMORANT_GORGING, SPECIES_CRAMORANT, TRUE},
|
||||
{SPECIES_CRAMORANT_GULPING, SPECIES_CRAMORANT, TRUE},
|
||||
{SPECIES_MORPEKO_HANGRY, SPECIES_MORPEKO, TRUE},
|
||||
{SPECIES_DARMANITAN_ZEN_MODE_GALARIAN, SPECIES_DARMANITAN_GALARIAN, TRUE},
|
||||
};
|
||||
return (gSpeciesInfo[gBattleMons[battlerId].species].flags & SPECIES_FLAG_PRIMAL_REVERSION);
|
||||
}
|
||||
|
||||
currSpecies = GetMonData(&party[monId], MON_DATA_SPECIES, NULL);
|
||||
for (i = 0; i < ARRAY_COUNT(species); i++)
|
||||
// Returns SPECIES_NONE if no form change is possible
|
||||
u16 GetBattleFormChangeTargetSpecies(u8 battlerId, u16 method)
|
||||
{
|
||||
u32 i, j;
|
||||
u16 targetSpecies = SPECIES_NONE;
|
||||
u16 species = gBattleMons[battlerId].species;
|
||||
const struct FormChange *formChanges = gFormChangeTablePointers[species];
|
||||
u16 heldItem;
|
||||
u32 ability;
|
||||
|
||||
if (formChanges != NULL)
|
||||
{
|
||||
if (currSpecies == species[i][0] && (!isSwitchingOut || species[i][2] == TRUE))
|
||||
heldItem = gBattleMons[battlerId].item;
|
||||
ability = GetBattlerAbility(battlerId);
|
||||
|
||||
for (i = 0; formChanges[i].method != FORM_CHANGE_TERMINATOR; i++)
|
||||
{
|
||||
SetMonData(&party[monId], MON_DATA_SPECIES, &species[i][1]);
|
||||
CalculateMonStats(&party[monId]);
|
||||
break;
|
||||
if (method == formChanges[i].method && species != formChanges[i].targetSpecies)
|
||||
{
|
||||
switch (method)
|
||||
{
|
||||
case FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM:
|
||||
case FORM_CHANGE_BATTLE_PRIMAL_REVERSION:
|
||||
if (heldItem == formChanges[i].param1)
|
||||
targetSpecies = formChanges[i].targetSpecies;
|
||||
break;
|
||||
case FORM_CHANGE_BATTLE_MEGA_EVOLUTION_MOVE:
|
||||
if (gBattleMons[battlerId].moves[0] == formChanges[i].param1
|
||||
|| gBattleMons[battlerId].moves[1] == formChanges[i].param1
|
||||
|| gBattleMons[battlerId].moves[2] == formChanges[i].param1
|
||||
|| gBattleMons[battlerId].moves[3] == formChanges[i].param1)
|
||||
targetSpecies = formChanges[i].targetSpecies;
|
||||
break;
|
||||
case FORM_CHANGE_BATTLE_SWITCH:
|
||||
targetSpecies = formChanges[i].targetSpecies;
|
||||
break;
|
||||
case FORM_CHANGE_BATTLE_HP_PERCENT:
|
||||
if (formChanges[i].param1 == GetBattlerAbility(battlerId))
|
||||
{
|
||||
// We multiply by 100 to make sure that integer division doesn't mess with the health check.
|
||||
u32 hpCheck = gBattleMons[battlerId].hp * 100 * 100 / gBattleMons[battlerId].maxHP;
|
||||
switch(formChanges[i].param2)
|
||||
{
|
||||
case HP_HIGHER_THAN:
|
||||
if (hpCheck > formChanges[i].param3 * 100)
|
||||
targetSpecies = formChanges[i].targetSpecies;
|
||||
break;
|
||||
case HP_LOWER_EQ_THAN:
|
||||
if (hpCheck <= formChanges[i].param3 * 100)
|
||||
targetSpecies = formChanges[i].targetSpecies;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case FORM_CHANGE_BATTLE_TURN_END:
|
||||
if (formChanges[i].param1 == GetBattlerAbility(battlerId))
|
||||
targetSpecies = formChanges[i].targetSpecies;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!isSwitchingOut)
|
||||
|
||||
return targetSpecies;
|
||||
}
|
||||
|
||||
bool32 TryBattleFormChange(u8 battlerId, u16 method)
|
||||
{
|
||||
u8 monId = gBattlerPartyIndexes[battlerId];
|
||||
u8 side = GET_BATTLER_SIDE(battlerId);
|
||||
struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty;
|
||||
u16 targetSpecies;
|
||||
|
||||
// Can't change form if transformed.
|
||||
if (gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED)
|
||||
return FALSE;
|
||||
|
||||
if (!DoesSpeciesHaveFormChangeMethod(gBattleMons[battlerId].species, method))
|
||||
return FALSE;
|
||||
|
||||
targetSpecies = GetBattleFormChangeTargetSpecies(battlerId, method);
|
||||
if (targetSpecies != SPECIES_NONE)
|
||||
{
|
||||
targetSpecies = GetFormChangeTargetSpecies(&party[monId], FORM_BATTLE_END, 0);
|
||||
if (targetSpecies != SPECIES_NONE)
|
||||
{
|
||||
SetMonData(&party[monId], MON_DATA_SPECIES, &targetSpecies);
|
||||
CalculateMonStats(&party[monId]);
|
||||
TryToSetBattleFormChangeMoves(&party[monId]);
|
||||
}
|
||||
// Saves the original species on the first form change for the player.
|
||||
if (side == B_SIDE_PLAYER && gBattleStruct->changedSpecies[monId] == SPECIES_NONE)
|
||||
gBattleStruct->changedSpecies[monId] = gBattleMons[battlerId].species;
|
||||
|
||||
TryToSetBattleFormChangeMoves(&party[monId], method);
|
||||
SetMonData(&party[monId], MON_DATA_SPECIES, &targetSpecies);
|
||||
gBattleMons[battlerId].species = targetSpecies;
|
||||
RecalcBattlerStats(battlerId, &party[monId]);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
targetSpecies = GetFormChangeTargetSpecies(&party[monId], method, 0);
|
||||
if (targetSpecies != SPECIES_NONE)
|
||||
{
|
||||
// Saves the original species on the first form change for the player.
|
||||
if (side == B_SIDE_PLAYER && gBattleStruct->changedSpecies[monId] == SPECIES_NONE)
|
||||
gBattleStruct->changedSpecies[monId] = targetSpecies;
|
||||
|
||||
TryToSetBattleFormChangeMoves(&party[monId], method);
|
||||
SetMonData(&party[monId], MON_DATA_SPECIES, &targetSpecies);
|
||||
gBattleMons[battlerId].species = targetSpecies;
|
||||
RecalcBattlerStats(battlerId, &party[monId]);
|
||||
return TRUE;
|
||||
}
|
||||
else if ((method == FORM_CHANGE_END_BATTLE || method == FORM_CHANGE_FAINT)
|
||||
&& gBattleStruct->changedSpecies[monId] != SPECIES_NONE)
|
||||
{
|
||||
TryToSetBattleFormChangeMoves(&party[monId], method);
|
||||
SetMonData(&party[monId], MON_DATA_SPECIES, &gBattleStruct->changedSpecies[monId]);
|
||||
RecalcBattlerStats(battlerId, &party[monId]);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool32 DoBattlersShareType(u32 battler1, u32 battler2)
|
||||
@ -10319,24 +10293,10 @@ bool32 CanBattlerGetOrLoseItem(u8 battlerId, u16 itemId)
|
||||
// Mail can be stolen now
|
||||
if (itemId == ITEM_ENIGMA_BERRY_E_READER)
|
||||
return FALSE;
|
||||
// Primal Reversion inducing items cannot be lost if pokemon's base species can undergo primal reversion with it.
|
||||
else if (holdEffect == HOLD_EFFECT_PRIMAL_ORB && (GetPrimalReversionSpecies(GET_BASE_SPECIES_ID(species), itemId) != SPECIES_NONE))
|
||||
else if (DoesSpeciesUseHoldItemToChangeForm(species, itemId))
|
||||
return FALSE;
|
||||
// Mega stone cannot be lost if pokemon's base species can mega evolve with it.
|
||||
else if (holdEffect == HOLD_EFFECT_MEGA_STONE && (GetMegaEvolutionSpecies(GET_BASE_SPECIES_ID(species), itemId) != SPECIES_NONE))
|
||||
return FALSE;
|
||||
else if (GET_BASE_SPECIES_ID(species) == SPECIES_GIRATINA && itemId == ITEM_GRISEOUS_ORB)
|
||||
return FALSE;
|
||||
else if (GET_BASE_SPECIES_ID(species) == SPECIES_GENESECT && holdEffect == HOLD_EFFECT_DRIVE)
|
||||
return FALSE;
|
||||
else if (GET_BASE_SPECIES_ID(species) == SPECIES_SILVALLY && holdEffect == HOLD_EFFECT_MEMORY)
|
||||
return FALSE;
|
||||
else if (GET_BASE_SPECIES_ID(species) == SPECIES_ARCEUS && holdEffect == HOLD_EFFECT_PLATE)
|
||||
return FALSE;
|
||||
#ifdef HOLD_EFFECT_Z_CRYSTAL
|
||||
else if (holdEffect == HOLD_EFFECT_Z_CRYSTAL)
|
||||
return FALSE;
|
||||
#endif
|
||||
else
|
||||
return TRUE;
|
||||
}
|
||||
@ -10861,46 +10821,6 @@ bool32 TryRoomService(u8 battlerId)
|
||||
}
|
||||
}
|
||||
|
||||
void DoBurmyFormChange(u32 monId)
|
||||
{
|
||||
u16 newSpecies, currSpecies;
|
||||
struct Pokemon *party = gPlayerParty;
|
||||
|
||||
currSpecies = GetMonData(&party[monId], MON_DATA_SPECIES, NULL);
|
||||
|
||||
if ((GET_BASE_SPECIES_ID(currSpecies) == SPECIES_BURMY)
|
||||
&& (gBattleStruct->appearedInBattle & gBitTable[monId]) // Burmy appeared in battle
|
||||
&& GetMonData(&party[monId], MON_DATA_HP, NULL) != 0) // Burmy isn't fainted
|
||||
{
|
||||
switch (gBattleTerrain)
|
||||
{
|
||||
case BATTLE_TERRAIN_GRASS:
|
||||
case BATTLE_TERRAIN_LONG_GRASS:
|
||||
case BATTLE_TERRAIN_POND:
|
||||
case BATTLE_TERRAIN_MOUNTAIN:
|
||||
case BATTLE_TERRAIN_PLAIN:
|
||||
newSpecies = SPECIES_BURMY;
|
||||
break;
|
||||
case BATTLE_TERRAIN_CAVE:
|
||||
case BATTLE_TERRAIN_SAND:
|
||||
newSpecies = SPECIES_BURMY_SANDY_CLOAK;
|
||||
break;
|
||||
case BATTLE_TERRAIN_BUILDING:
|
||||
newSpecies = SPECIES_BURMY_TRASH_CLOAK;
|
||||
break;
|
||||
default: // Don't change form if last battle was water-related
|
||||
newSpecies = SPECIES_NONE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (newSpecies != SPECIES_NONE)
|
||||
{
|
||||
SetMonData(&party[monId], MON_DATA_SPECIES, &newSpecies);
|
||||
CalculateMonStats(&party[monId]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool32 BlocksPrankster(u16 move, u8 battlerPrankster, u8 battlerDef, bool32 checkTarget)
|
||||
{
|
||||
#if B_PRANKSTER_DARK_TYPES >= GEN_7
|
||||
@ -10993,3 +10913,32 @@ static void SetRandomMultiHitCounter()
|
||||
gMultiHitCounter = 5 - (Random() & 1);
|
||||
}
|
||||
}
|
||||
|
||||
void CopyMonLevelAndBaseStatsToBattleMon(u32 battler, struct Pokemon *mon)
|
||||
{
|
||||
gBattleMons[battler].level = GetMonData(mon, MON_DATA_LEVEL);
|
||||
gBattleMons[battler].hp = GetMonData(mon, MON_DATA_HP);
|
||||
gBattleMons[battler].maxHP = GetMonData(mon, MON_DATA_MAX_HP);
|
||||
gBattleMons[battler].attack = GetMonData(mon, MON_DATA_ATK);
|
||||
gBattleMons[battler].defense = GetMonData(mon, MON_DATA_DEF);
|
||||
gBattleMons[battler].speed = GetMonData(mon, MON_DATA_SPEED);
|
||||
gBattleMons[battler].spAttack = GetMonData(mon, MON_DATA_SPATK);
|
||||
gBattleMons[battler].spDefense = GetMonData(mon, MON_DATA_SPDEF);
|
||||
}
|
||||
|
||||
void CopyMonAbilityAndTypesToBattleMon(u32 battler, struct Pokemon *mon)
|
||||
{
|
||||
gBattleMons[battler].ability = GetMonAbility(mon);
|
||||
gBattleMons[battler].type1 = gSpeciesInfo[gBattleMons[battler].species].types[0];
|
||||
gBattleMons[battler].type2 = gSpeciesInfo[gBattleMons[battler].species].types[1];
|
||||
gBattleMons[battler].type3 = TYPE_MYSTERY;
|
||||
}
|
||||
|
||||
void RecalcBattlerStats(u32 battler, struct Pokemon *mon)
|
||||
{
|
||||
CalculateMonStats(mon);
|
||||
if (IsDynamaxed(battler) && gChosenActionByBattler[battler] != B_ACTION_SWITCH)
|
||||
ApplyDynamaxHPMultiplier(battler, mon);
|
||||
CopyMonLevelAndBaseStatsToBattleMon(battler, mon);
|
||||
CopyMonAbilityAndTypesToBattleMon(battler, mon);
|
||||
}
|
||||
|
||||
@ -3193,7 +3193,6 @@ const struct Item gItems[] =
|
||||
.pocket = POCKET_ITEMS,
|
||||
.type = ITEM_USE_PARTY_MENU,
|
||||
.fieldUseFunc = ItemUseOutOfBattle_FormChange_ConsumedOnUse,
|
||||
.secondaryId = FORM_ITEM_USE,
|
||||
.flingPower = 10,
|
||||
},
|
||||
|
||||
@ -3207,7 +3206,6 @@ const struct Item gItems[] =
|
||||
.pocket = POCKET_ITEMS,
|
||||
.type = ITEM_USE_PARTY_MENU,
|
||||
.fieldUseFunc = ItemUseOutOfBattle_FormChange_ConsumedOnUse,
|
||||
.secondaryId = FORM_ITEM_USE,
|
||||
.flingPower = 10,
|
||||
},
|
||||
|
||||
@ -3221,7 +3219,6 @@ const struct Item gItems[] =
|
||||
.pocket = POCKET_ITEMS,
|
||||
.type = ITEM_USE_PARTY_MENU,
|
||||
.fieldUseFunc = ItemUseOutOfBattle_FormChange_ConsumedOnUse,
|
||||
.secondaryId = FORM_ITEM_USE,
|
||||
.flingPower = 10,
|
||||
},
|
||||
|
||||
@ -3235,7 +3232,6 @@ const struct Item gItems[] =
|
||||
.pocket = POCKET_ITEMS,
|
||||
.type = ITEM_USE_PARTY_MENU,
|
||||
.fieldUseFunc = ItemUseOutOfBattle_FormChange_ConsumedOnUse,
|
||||
.secondaryId = FORM_ITEM_USE,
|
||||
.flingPower = 10,
|
||||
},
|
||||
|
||||
@ -9071,7 +9067,6 @@ const struct Item gItems[] =
|
||||
.pocket = POCKET_KEY_ITEMS,
|
||||
.type = ITEM_USE_PARTY_MENU,
|
||||
.fieldUseFunc = ItemUseOutOfBattle_FormChange,
|
||||
.secondaryId = FORM_ITEM_USE,
|
||||
},
|
||||
|
||||
[ITEM_REVEAL_GLASS] =
|
||||
@ -9083,7 +9078,6 @@ const struct Item gItems[] =
|
||||
.pocket = POCKET_KEY_ITEMS,
|
||||
.type = ITEM_USE_PARTY_MENU,
|
||||
.fieldUseFunc = ItemUseOutOfBattle_FormChange,
|
||||
.secondaryId = FORM_ITEM_USE,
|
||||
},
|
||||
|
||||
[ITEM_DNA_SPLICERS] =
|
||||
@ -9093,9 +9087,8 @@ const struct Item gItems[] =
|
||||
.price = 0,
|
||||
.description = sDNASplicersDesc,
|
||||
.pocket = POCKET_KEY_ITEMS,
|
||||
.type = ITEM_USE_PARTY_MENU,
|
||||
.fieldUseFunc = ItemUseOutOfBattle_FormChange,
|
||||
.secondaryId = FORM_ITEM_USE,
|
||||
.type = ITEM_USE_BAG_MENU,
|
||||
.fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo: ItemUseOutOfBattle_FormChange_Fusion
|
||||
},
|
||||
|
||||
[ITEM_ZYGARDE_CUBE] =
|
||||
@ -9119,7 +9112,6 @@ const struct Item gItems[] =
|
||||
.pocket = POCKET_KEY_ITEMS,
|
||||
.type = ITEM_USE_PARTY_MENU,
|
||||
.fieldUseFunc = ItemUseOutOfBattle_FormChange,
|
||||
.secondaryId = FORM_ITEM_USE,
|
||||
},
|
||||
|
||||
[ITEM_N_SOLARIZER] =
|
||||
@ -9129,9 +9121,8 @@ const struct Item gItems[] =
|
||||
.price = 0,
|
||||
.description = sNSolarizerDesc,
|
||||
.pocket = POCKET_KEY_ITEMS,
|
||||
.type = ITEM_USE_PARTY_MENU,
|
||||
.fieldUseFunc = ItemUseOutOfBattle_FormChange,
|
||||
.secondaryId = FORM_ITEM_USE,
|
||||
.type = ITEM_USE_BAG_MENU,
|
||||
.fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo: ItemUseOutOfBattle_FormChange_Fusion
|
||||
},
|
||||
|
||||
[ITEM_N_LUNARIZER] =
|
||||
@ -9141,9 +9132,8 @@ const struct Item gItems[] =
|
||||
.price = 0,
|
||||
.description = sNLunarizerDesc,
|
||||
.pocket = POCKET_KEY_ITEMS,
|
||||
.type = ITEM_USE_PARTY_MENU,
|
||||
.fieldUseFunc = ItemUseOutOfBattle_FormChange,
|
||||
.secondaryId = FORM_ITEM_USE,
|
||||
.type = ITEM_USE_BAG_MENU,
|
||||
.fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo: ItemUseOutOfBattle_FormChange_Fusion
|
||||
},
|
||||
|
||||
[ITEM_REINS_OF_UNITY] =
|
||||
@ -9153,9 +9143,8 @@ const struct Item gItems[] =
|
||||
.price = 0,
|
||||
.description = sReinsOfUnityDesc,
|
||||
.pocket = POCKET_KEY_ITEMS,
|
||||
.type = ITEM_USE_PARTY_MENU,
|
||||
.fieldUseFunc = ItemUseOutOfBattle_FormChange,
|
||||
.secondaryId = FORM_ITEM_USE,
|
||||
.type = ITEM_USE_BAG_MENU,
|
||||
.fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo: ItemUseOutOfBattle_FormChange_Fusion
|
||||
},
|
||||
|
||||
// Battle Mechanic Key Items
|
||||
|
||||
@ -2,22 +2,16 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] =
|
||||
{
|
||||
[SPECIES_BULBASAUR] = {{EVO_LEVEL, 16, SPECIES_IVYSAUR}},
|
||||
[SPECIES_IVYSAUR] = {{EVO_LEVEL, 32, SPECIES_VENUSAUR}},
|
||||
[SPECIES_VENUSAUR] = {{EVO_MEGA_EVOLUTION, ITEM_VENUSAURITE, SPECIES_VENUSAUR_MEGA}},
|
||||
[SPECIES_CHARMANDER] = {{EVO_LEVEL, 16, SPECIES_CHARMELEON}},
|
||||
[SPECIES_CHARMELEON] = {{EVO_LEVEL, 36, SPECIES_CHARIZARD}},
|
||||
[SPECIES_CHARIZARD] = {{EVO_MEGA_EVOLUTION, ITEM_CHARIZARDITE_X, SPECIES_CHARIZARD_MEGA_X},
|
||||
{EVO_MEGA_EVOLUTION, ITEM_CHARIZARDITE_Y, SPECIES_CHARIZARD_MEGA_Y}},
|
||||
[SPECIES_SQUIRTLE] = {{EVO_LEVEL, 16, SPECIES_WARTORTLE}},
|
||||
[SPECIES_WARTORTLE] = {{EVO_LEVEL, 36, SPECIES_BLASTOISE}},
|
||||
[SPECIES_BLASTOISE] = {{EVO_MEGA_EVOLUTION, ITEM_BLASTOISINITE, SPECIES_BLASTOISE_MEGA}},
|
||||
[SPECIES_CATERPIE] = {{EVO_LEVEL, 7, SPECIES_METAPOD}},
|
||||
[SPECIES_METAPOD] = {{EVO_LEVEL, 10, SPECIES_BUTTERFREE}},
|
||||
[SPECIES_WEEDLE] = {{EVO_LEVEL, 7, SPECIES_KAKUNA}},
|
||||
[SPECIES_KAKUNA] = {{EVO_LEVEL, 10, SPECIES_BEEDRILL}},
|
||||
[SPECIES_BEEDRILL] = {{EVO_MEGA_EVOLUTION, ITEM_BEEDRILLITE, SPECIES_BEEDRILL_MEGA}},
|
||||
[SPECIES_PIDGEY] = {{EVO_LEVEL, 18, SPECIES_PIDGEOTTO}},
|
||||
[SPECIES_PIDGEOTTO] = {{EVO_LEVEL, 36, SPECIES_PIDGEOT}},
|
||||
[SPECIES_PIDGEOT] = {{EVO_MEGA_EVOLUTION, ITEM_PIDGEOTITE, SPECIES_PIDGEOT_MEGA}},
|
||||
[SPECIES_RATTATA] = {{EVO_LEVEL, 20, SPECIES_RATICATE}},
|
||||
[SPECIES_SPEAROW] = {{EVO_LEVEL, 20, SPECIES_FEAROW}},
|
||||
[SPECIES_EKANS] = {{EVO_LEVEL, 22, SPECIES_ARBOK}},
|
||||
@ -48,7 +42,6 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] =
|
||||
{EVO_TRADE_ITEM, ITEM_KINGS_ROCK, SPECIES_POLITOED}},
|
||||
[SPECIES_ABRA] = {{EVO_LEVEL, 16, SPECIES_KADABRA}},
|
||||
[SPECIES_KADABRA] = {{EVO_TRADE, 0, SPECIES_ALAKAZAM}},
|
||||
[SPECIES_ALAKAZAM] = {{EVO_MEGA_EVOLUTION, ITEM_ALAKAZITE, SPECIES_ALAKAZAM_MEGA}},
|
||||
[SPECIES_MACHOP] = {{EVO_LEVEL, 28, SPECIES_MACHOKE}},
|
||||
[SPECIES_MACHOKE] = {{EVO_TRADE, 0, SPECIES_MACHAMP}},
|
||||
[SPECIES_BELLSPROUT] = {{EVO_LEVEL, 21, SPECIES_WEEPINBELL}},
|
||||
@ -59,7 +52,6 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] =
|
||||
[SPECIES_PONYTA] = {{EVO_LEVEL, 40, SPECIES_RAPIDASH}},
|
||||
[SPECIES_SLOWPOKE] = {{EVO_LEVEL, 37, SPECIES_SLOWBRO},
|
||||
{EVO_TRADE_ITEM, ITEM_KINGS_ROCK, SPECIES_SLOWKING}},
|
||||
[SPECIES_SLOWBRO] = {{EVO_MEGA_EVOLUTION, ITEM_SLOWBRONITE, SPECIES_SLOWBRO_MEGA}},
|
||||
[SPECIES_MAGNEMITE] = {{EVO_LEVEL, 30, SPECIES_MAGNETON}},
|
||||
#if P_GEN_4_POKEMON == TRUE
|
||||
[SPECIES_MAGNETON] = {{EVO_MAPSEC, MAPSEC_NEW_MAUVILLE, SPECIES_MAGNEZONE},
|
||||
@ -71,7 +63,6 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] =
|
||||
[SPECIES_SHELLDER] = {{EVO_ITEM, ITEM_WATER_STONE, SPECIES_CLOYSTER}},
|
||||
[SPECIES_GASTLY] = {{EVO_LEVEL, 25, SPECIES_HAUNTER}},
|
||||
[SPECIES_HAUNTER] = {{EVO_TRADE, 0, SPECIES_GENGAR}},
|
||||
[SPECIES_GENGAR] = {{EVO_MEGA_EVOLUTION, ITEM_GENGARITE, SPECIES_GENGAR_MEGA}},
|
||||
[SPECIES_ONIX] = {{EVO_TRADE_ITEM, ITEM_METAL_COAT, SPECIES_STEELIX}},
|
||||
[SPECIES_DROWZEE] = {{EVO_LEVEL, 26, SPECIES_HYPNO}},
|
||||
[SPECIES_KRABBY] = {{EVO_LEVEL, 28, SPECIES_KINGLER}},
|
||||
@ -92,7 +83,6 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] =
|
||||
#if P_GEN_4_POKEMON == TRUE
|
||||
[SPECIES_TANGELA] = {{EVO_MOVE, MOVE_ANCIENT_POWER, SPECIES_TANGROWTH}},
|
||||
#endif
|
||||
[SPECIES_KANGASKHAN] = {{EVO_MEGA_EVOLUTION, ITEM_KANGASKHANITE, SPECIES_KANGASKHAN_MEGA}},
|
||||
[SPECIES_HORSEA] = {{EVO_LEVEL, 32, SPECIES_SEADRA}},
|
||||
[SPECIES_SEADRA] = {{EVO_TRADE_ITEM, ITEM_DRAGON_SCALE, SPECIES_KINGDRA}},
|
||||
[SPECIES_GOLDEEN] = {{EVO_LEVEL, 33, SPECIES_SEAKING}},
|
||||
@ -102,9 +92,7 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] =
|
||||
[SPECIES_ELECTABUZZ] = {{EVO_TRADE_ITEM, ITEM_ELECTIRIZER, SPECIES_ELECTIVIRE}},
|
||||
[SPECIES_MAGMAR] = {{EVO_TRADE_ITEM, ITEM_MAGMARIZER, SPECIES_MAGMORTAR}},
|
||||
#endif
|
||||
[SPECIES_PINSIR] = {{EVO_MEGA_EVOLUTION, ITEM_PINSIRITE, SPECIES_PINSIR_MEGA}},
|
||||
[SPECIES_MAGIKARP] = {{EVO_LEVEL, 20, SPECIES_GYARADOS}},
|
||||
[SPECIES_GYARADOS] = {{EVO_MEGA_EVOLUTION, ITEM_GYARADOSITE, SPECIES_GYARADOS_MEGA}},
|
||||
[SPECIES_EEVEE] = {{EVO_ITEM, ITEM_THUNDER_STONE, SPECIES_JOLTEON},
|
||||
{EVO_ITEM, ITEM_WATER_STONE, SPECIES_VAPOREON},
|
||||
{EVO_ITEM, ITEM_FIRE_STONE, SPECIES_FLAREON},
|
||||
@ -123,11 +111,8 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] =
|
||||
[SPECIES_PORYGON] = {{EVO_TRADE_ITEM, ITEM_UPGRADE, SPECIES_PORYGON2}},
|
||||
[SPECIES_OMANYTE] = {{EVO_LEVEL, 40, SPECIES_OMASTAR}},
|
||||
[SPECIES_KABUTO] = {{EVO_LEVEL, 40, SPECIES_KABUTOPS}},
|
||||
[SPECIES_AERODACTYL] = {{EVO_MEGA_EVOLUTION, ITEM_AERODACTYLITE, SPECIES_AERODACTYL_MEGA}},
|
||||
[SPECIES_DRATINI] = {{EVO_LEVEL, 30, SPECIES_DRAGONAIR}},
|
||||
[SPECIES_DRAGONAIR] = {{EVO_LEVEL, 55, SPECIES_DRAGONITE}},
|
||||
[SPECIES_MEWTWO] = {{EVO_MEGA_EVOLUTION, ITEM_MEWTWONITE_X, SPECIES_MEWTWO_MEGA_X},
|
||||
{EVO_MEGA_EVOLUTION, ITEM_MEWTWONITE_Y, SPECIES_MEWTWO_MEGA_Y}},
|
||||
[SPECIES_CHIKORITA] = {{EVO_LEVEL, 16, SPECIES_BAYLEEF}},
|
||||
[SPECIES_BAYLEEF] = {{EVO_LEVEL, 32, SPECIES_MEGANIUM}},
|
||||
[SPECIES_CYNDAQUIL] = {{EVO_LEVEL, 14, SPECIES_QUILAVA}},
|
||||
@ -149,7 +134,6 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] =
|
||||
[SPECIES_NATU] = {{EVO_LEVEL, 25, SPECIES_XATU}},
|
||||
[SPECIES_MAREEP] = {{EVO_LEVEL, 15, SPECIES_FLAAFFY}},
|
||||
[SPECIES_FLAAFFY] = {{EVO_LEVEL, 30, SPECIES_AMPHAROS}},
|
||||
[SPECIES_AMPHAROS] = {{EVO_MEGA_EVOLUTION, ITEM_AMPHAROSITE, SPECIES_AMPHAROS_MEGA}},
|
||||
[SPECIES_MARILL] = {{EVO_LEVEL, 18, SPECIES_AZUMARILL}},
|
||||
[SPECIES_HOPPIP] = {{EVO_LEVEL, 18, SPECIES_SKIPLOOM}},
|
||||
[SPECIES_SKIPLOOM] = {{EVO_LEVEL, 27, SPECIES_JUMPLUFF}},
|
||||
@ -167,10 +151,7 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] =
|
||||
#if P_GEN_4_POKEMON == TRUE
|
||||
[SPECIES_GLIGAR] = {{EVO_ITEM_HOLD_NIGHT, ITEM_RAZOR_FANG, SPECIES_GLISCOR}},
|
||||
#endif
|
||||
[SPECIES_STEELIX] = {{EVO_MEGA_EVOLUTION, ITEM_STEELIXITE, SPECIES_STEELIX_MEGA}},
|
||||
[SPECIES_SNUBBULL] = {{EVO_LEVEL, 23, SPECIES_GRANBULL}},
|
||||
[SPECIES_SCIZOR] = {{EVO_MEGA_EVOLUTION, ITEM_SCIZORITE, SPECIES_SCIZOR_MEGA}},
|
||||
[SPECIES_HERACROSS] = {{EVO_MEGA_EVOLUTION, ITEM_HERACRONITE, SPECIES_HERACROSS_MEGA}},
|
||||
#if P_GEN_4_POKEMON == TRUE
|
||||
[SPECIES_SNEASEL] = {{EVO_ITEM_HOLD_NIGHT, ITEM_RAZOR_CLAW, SPECIES_WEAVILE}},
|
||||
#endif
|
||||
@ -182,7 +163,6 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] =
|
||||
#endif
|
||||
[SPECIES_REMORAID] = {{EVO_LEVEL, 25, SPECIES_OCTILLERY}},
|
||||
[SPECIES_HOUNDOUR] = {{EVO_LEVEL, 24, SPECIES_HOUNDOOM}},
|
||||
[SPECIES_HOUNDOOM] = {{EVO_MEGA_EVOLUTION, ITEM_HOUNDOOMINITE, SPECIES_HOUNDOOM_MEGA}},
|
||||
[SPECIES_PHANPY] = {{EVO_LEVEL, 25, SPECIES_DONPHAN}},
|
||||
#if P_GEN_4_POKEMON == TRUE
|
||||
[SPECIES_PORYGON2] = {{EVO_TRADE_ITEM, ITEM_DUBIOUS_DISC, SPECIES_PORYGON_Z}},
|
||||
@ -195,16 +175,12 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] =
|
||||
[SPECIES_MAGBY] = {{EVO_LEVEL, 30, SPECIES_MAGMAR}},
|
||||
[SPECIES_LARVITAR] = {{EVO_LEVEL, 30, SPECIES_PUPITAR}},
|
||||
[SPECIES_PUPITAR] = {{EVO_LEVEL, 55, SPECIES_TYRANITAR}},
|
||||
[SPECIES_TYRANITAR] = {{EVO_MEGA_EVOLUTION, ITEM_TYRANITARITE, SPECIES_TYRANITAR_MEGA}},
|
||||
[SPECIES_TREECKO] = {{EVO_LEVEL, 16, SPECIES_GROVYLE}},
|
||||
[SPECIES_GROVYLE] = {{EVO_LEVEL, 36, SPECIES_SCEPTILE}},
|
||||
[SPECIES_SCEPTILE] = {{EVO_MEGA_EVOLUTION, ITEM_SCEPTILITE, SPECIES_SCEPTILE_MEGA}},
|
||||
[SPECIES_TORCHIC] = {{EVO_LEVEL, 16, SPECIES_COMBUSKEN}},
|
||||
[SPECIES_COMBUSKEN] = {{EVO_LEVEL, 36, SPECIES_BLAZIKEN}},
|
||||
[SPECIES_BLAZIKEN] = {{EVO_MEGA_EVOLUTION, ITEM_BLAZIKENITE, SPECIES_BLAZIKEN_MEGA}},
|
||||
[SPECIES_MUDKIP] = {{EVO_LEVEL, 16, SPECIES_MARSHTOMP}},
|
||||
[SPECIES_MARSHTOMP] = {{EVO_LEVEL, 36, SPECIES_SWAMPERT}},
|
||||
[SPECIES_SWAMPERT] = {{EVO_MEGA_EVOLUTION, ITEM_SWAMPERTITE, SPECIES_SWAMPERT_MEGA}},
|
||||
[SPECIES_POOCHYENA] = {{EVO_LEVEL, 18, SPECIES_MIGHTYENA}},
|
||||
[SPECIES_ZIGZAGOON] = {{EVO_LEVEL, 20, SPECIES_LINOONE}},
|
||||
[SPECIES_WURMPLE] = {{EVO_LEVEL_SILCOON, 7, SPECIES_SILCOON},
|
||||
@ -227,20 +203,16 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] =
|
||||
#if P_GEN_4_POKEMON == TRUE
|
||||
[SPECIES_NOSEPASS] = {{EVO_MAPSEC, MAPSEC_NEW_MAUVILLE, SPECIES_PROBOPASS}},
|
||||
#endif
|
||||
[SPECIES_SABLEYE] = {{EVO_MEGA_EVOLUTION, ITEM_SABLENITE, SPECIES_SABLEYE_MEGA}},
|
||||
[SPECIES_BARBOACH] = {{EVO_LEVEL, 30, SPECIES_WHISCASH}},
|
||||
[SPECIES_CORPHISH] = {{EVO_LEVEL, 30, SPECIES_CRAWDAUNT}},
|
||||
[SPECIES_FEEBAS] = {{EVO_BEAUTY, 170, SPECIES_MILOTIC},
|
||||
{EVO_TRADE_ITEM, ITEM_PRISM_SCALE, SPECIES_MILOTIC}},
|
||||
[SPECIES_CARVANHA] = {{EVO_LEVEL, 30, SPECIES_SHARPEDO}},
|
||||
[SPECIES_SHARPEDO] = {{EVO_MEGA_EVOLUTION, ITEM_SHARPEDONITE, SPECIES_SHARPEDO_MEGA}},
|
||||
[SPECIES_TRAPINCH] = {{EVO_LEVEL, 35, SPECIES_VIBRAVA}},
|
||||
[SPECIES_VIBRAVA] = {{EVO_LEVEL, 45, SPECIES_FLYGON}},
|
||||
[SPECIES_MAKUHITA] = {{EVO_LEVEL, 24, SPECIES_HARIYAMA}},
|
||||
[SPECIES_ELECTRIKE] = {{EVO_LEVEL, 26, SPECIES_MANECTRIC}},
|
||||
[SPECIES_MANECTRIC] = {{EVO_MEGA_EVOLUTION, ITEM_MANECTITE, SPECIES_MANECTRIC_MEGA}},
|
||||
[SPECIES_NUMEL] = {{EVO_LEVEL, 33, SPECIES_CAMERUPT}},
|
||||
[SPECIES_CAMERUPT] = {{EVO_MEGA_EVOLUTION, ITEM_CAMERUPTITE, SPECIES_CAMERUPT_MEGA}},
|
||||
[SPECIES_SPHEAL] = {{EVO_LEVEL, 32, SPECIES_SEALEO}},
|
||||
[SPECIES_SEALEO] = {{EVO_LEVEL, 44, SPECIES_WALREIN}},
|
||||
[SPECIES_CACNEA] = {{EVO_LEVEL, 32, SPECIES_CACTURNE}},
|
||||
@ -249,14 +221,10 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] =
|
||||
{EVO_ITEM_FEMALE, ITEM_DAWN_STONE, SPECIES_FROSLASS}
|
||||
#endif
|
||||
},
|
||||
[SPECIES_GLALIE] = {{EVO_MEGA_EVOLUTION, ITEM_GLALITITE, SPECIES_GLALIE_MEGA}},
|
||||
[SPECIES_AZURILL] = {{EVO_FRIENDSHIP, 0, SPECIES_MARILL}},
|
||||
[SPECIES_SPOINK] = {{EVO_LEVEL, 32, SPECIES_GRUMPIG}},
|
||||
[SPECIES_MAWILE] = {{EVO_MEGA_EVOLUTION, ITEM_MAWILITE, SPECIES_MAWILE_MEGA}},
|
||||
[SPECIES_MEDITITE] = {{EVO_LEVEL, 37, SPECIES_MEDICHAM}},
|
||||
[SPECIES_MEDICHAM] = {{EVO_MEGA_EVOLUTION, ITEM_MEDICHAMITE, SPECIES_MEDICHAM_MEGA}},
|
||||
[SPECIES_SWABLU] = {{EVO_LEVEL, 35, SPECIES_ALTARIA}},
|
||||
[SPECIES_ALTARIA] = {{EVO_MEGA_EVOLUTION, ITEM_ALTARIANITE, SPECIES_ALTARIA_MEGA}},
|
||||
[SPECIES_WYNAUT] = {{EVO_LEVEL, 15, SPECIES_WOBBUFFET}},
|
||||
[SPECIES_DUSKULL] = {{EVO_LEVEL, 37, SPECIES_DUSCLOPS}},
|
||||
#if P_GEN_4_POKEMON == TRUE
|
||||
@ -270,12 +238,9 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] =
|
||||
[SPECIES_LOUDRED] = {{EVO_LEVEL, 40, SPECIES_EXPLOUD}},
|
||||
[SPECIES_CLAMPERL] = {{EVO_TRADE_ITEM, ITEM_DEEP_SEA_TOOTH, SPECIES_HUNTAIL},
|
||||
{EVO_TRADE_ITEM, ITEM_DEEP_SEA_SCALE, SPECIES_GOREBYSS}},
|
||||
[SPECIES_ABSOL] = {{EVO_MEGA_EVOLUTION, ITEM_ABSOLITE, SPECIES_ABSOL_MEGA}},
|
||||
[SPECIES_SHUPPET] = {{EVO_LEVEL, 37, SPECIES_BANETTE}},
|
||||
[SPECIES_BANETTE] = {{EVO_MEGA_EVOLUTION, ITEM_BANETTITE, SPECIES_BANETTE_MEGA}},
|
||||
[SPECIES_ARON] = {{EVO_LEVEL, 32, SPECIES_LAIRON}},
|
||||
[SPECIES_LAIRON] = {{EVO_LEVEL, 42, SPECIES_AGGRON}},
|
||||
[SPECIES_AGGRON] = {{EVO_MEGA_EVOLUTION, ITEM_AGGRONITE, SPECIES_AGGRON_MEGA}},
|
||||
[SPECIES_LILEEP] = {{EVO_LEVEL, 40, SPECIES_CRADILY}},
|
||||
[SPECIES_ANORITH] = {{EVO_LEVEL, 40, SPECIES_ARMALDO}},
|
||||
[SPECIES_RALTS] = {{EVO_LEVEL, 20, SPECIES_KIRLIA}},
|
||||
@ -284,19 +249,10 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] =
|
||||
{EVO_ITEM_MALE, ITEM_DAWN_STONE, SPECIES_GALLADE}
|
||||
#endif
|
||||
},
|
||||
[SPECIES_GARDEVOIR] = {{EVO_MEGA_EVOLUTION, ITEM_GARDEVOIRITE, SPECIES_GARDEVOIR_MEGA}},
|
||||
[SPECIES_BAGON] = {{EVO_LEVEL, 30, SPECIES_SHELGON}},
|
||||
[SPECIES_SHELGON] = {{EVO_LEVEL, 50, SPECIES_SALAMENCE}},
|
||||
[SPECIES_SALAMENCE] = {{EVO_MEGA_EVOLUTION, ITEM_SALAMENCITE, SPECIES_SALAMENCE_MEGA}},
|
||||
[SPECIES_BELDUM] = {{EVO_LEVEL, 20, SPECIES_METANG}},
|
||||
[SPECIES_METANG] = {{EVO_LEVEL, 45, SPECIES_METAGROSS}},
|
||||
[SPECIES_METAGROSS] = {{EVO_MEGA_EVOLUTION, ITEM_METAGROSSITE, SPECIES_METAGROSS_MEGA}},
|
||||
[SPECIES_LATIAS] = {{EVO_MEGA_EVOLUTION, ITEM_LATIASITE, SPECIES_LATIAS_MEGA}},
|
||||
[SPECIES_LATIOS] = {{EVO_MEGA_EVOLUTION, ITEM_LATIOSITE, SPECIES_LATIOS_MEGA}},
|
||||
[SPECIES_KYOGRE] = {{EVO_PRIMAL_REVERSION, ITEM_BLUE_ORB, SPECIES_KYOGRE_PRIMAL}},
|
||||
[SPECIES_GROUDON] = {{EVO_PRIMAL_REVERSION, ITEM_RED_ORB, SPECIES_GROUDON_PRIMAL}},
|
||||
[SPECIES_RAYQUAZA] = {{EVO_MOVE_MEGA_EVOLUTION, MOVE_DRAGON_ASCENT, SPECIES_RAYQUAZA_MEGA}},
|
||||
|
||||
#if P_GEN_4_POKEMON == TRUE
|
||||
// Gens 4-7
|
||||
[SPECIES_TURTWIG] = {{EVO_LEVEL, 18, SPECIES_GROTLE}},
|
||||
@ -322,7 +278,6 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] =
|
||||
[SPECIES_SHELLOS] = {{EVO_LEVEL, 30, SPECIES_GASTRODON}},
|
||||
[SPECIES_DRIFLOON] = {{EVO_LEVEL, 28, SPECIES_DRIFBLIM}},
|
||||
[SPECIES_BUNEARY] = {{EVO_FRIENDSHIP, 0, SPECIES_LOPUNNY}},
|
||||
[SPECIES_LOPUNNY] = {{EVO_MEGA_EVOLUTION, ITEM_LOPUNNITE, SPECIES_LOPUNNY_MEGA}},
|
||||
[SPECIES_GLAMEOW] = {{EVO_LEVEL, 38, SPECIES_PURUGLY}},
|
||||
[SPECIES_CHINGLING] = {{EVO_FRIENDSHIP_NIGHT, 0, SPECIES_CHIMECHO}},
|
||||
[SPECIES_STUNKY] = {{EVO_LEVEL, 34, SPECIES_SKUNTANK}},
|
||||
@ -332,18 +287,14 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] =
|
||||
[SPECIES_HAPPINY] = {{EVO_ITEM_HOLD_DAY, ITEM_OVAL_STONE, SPECIES_CHANSEY}},
|
||||
[SPECIES_GIBLE] = {{EVO_LEVEL, 24, SPECIES_GABITE}},
|
||||
[SPECIES_GABITE] = {{EVO_LEVEL, 48, SPECIES_GARCHOMP}},
|
||||
[SPECIES_GARCHOMP] = {{EVO_MEGA_EVOLUTION, ITEM_GARCHOMPITE, SPECIES_GARCHOMP_MEGA}},
|
||||
[SPECIES_MUNCHLAX] = {{EVO_FRIENDSHIP, 0, SPECIES_SNORLAX}},
|
||||
[SPECIES_RIOLU] = {{EVO_FRIENDSHIP_DAY, 0, SPECIES_LUCARIO}},
|
||||
[SPECIES_LUCARIO] = {{EVO_MEGA_EVOLUTION, ITEM_LUCARIONITE, SPECIES_LUCARIO_MEGA}},
|
||||
[SPECIES_HIPPOPOTAS] = {{EVO_LEVEL, 34, SPECIES_HIPPOWDON}},
|
||||
[SPECIES_SKORUPI] = {{EVO_LEVEL, 40, SPECIES_DRAPION}},
|
||||
[SPECIES_CROAGUNK] = {{EVO_LEVEL, 37, SPECIES_TOXICROAK}},
|
||||
[SPECIES_FINNEON] = {{EVO_LEVEL, 31, SPECIES_LUMINEON}},
|
||||
[SPECIES_MANTYKE] = {{EVO_SPECIFIC_MON_IN_PARTY, SPECIES_REMORAID, SPECIES_MANTINE}},
|
||||
[SPECIES_SNOVER] = {{EVO_LEVEL, 40, SPECIES_ABOMASNOW}},
|
||||
[SPECIES_ABOMASNOW] = {{EVO_MEGA_EVOLUTION, ITEM_ABOMASITE, SPECIES_ABOMASNOW_MEGA}},
|
||||
[SPECIES_GALLADE] = {{EVO_MEGA_EVOLUTION, ITEM_GALLADITE, SPECIES_GALLADE_MEGA}},
|
||||
#endif
|
||||
#if P_GEN_5_POKEMON == TRUE
|
||||
[SPECIES_SNIVY] = {{EVO_LEVEL, 17, SPECIES_SERVINE}},
|
||||
@ -367,7 +318,6 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] =
|
||||
[SPECIES_BOLDORE] = {{EVO_TRADE, 0, SPECIES_GIGALITH}},
|
||||
[SPECIES_WOOBAT] = {{EVO_FRIENDSHIP, 0, SPECIES_SWOOBAT}},
|
||||
[SPECIES_DRILBUR] = {{EVO_LEVEL, 31, SPECIES_EXCADRILL}},
|
||||
[SPECIES_AUDINO] = {{EVO_MEGA_EVOLUTION, ITEM_AUDINITE, SPECIES_AUDINO_MEGA}},
|
||||
[SPECIES_TIMBURR] = {{EVO_LEVEL, 25, SPECIES_GURDURR}},
|
||||
[SPECIES_GURDURR] = {{EVO_TRADE, 0, SPECIES_CONKELDURR}},
|
||||
[SPECIES_TYMPOLE] = {{EVO_LEVEL, 25, SPECIES_PALPITOAD}},
|
||||
@ -458,7 +408,6 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] =
|
||||
[SPECIES_PUMPKABOO] = {{EVO_TRADE, 0, SPECIES_GOURGEIST}},
|
||||
[SPECIES_BERGMITE] = {{EVO_LEVEL, 37, SPECIES_AVALUGG}},
|
||||
[SPECIES_NOIBAT] = {{EVO_LEVEL, 48, SPECIES_NOIVERN}},
|
||||
[SPECIES_DIANCIE] = {{EVO_MEGA_EVOLUTION, ITEM_DIANCITE, SPECIES_DIANCIE_MEGA}},
|
||||
#endif
|
||||
#if P_GEN_7_POKEMON == TRUE
|
||||
[SPECIES_ROWLET] = {{EVO_LEVEL, 17, SPECIES_DARTRIX}},
|
||||
|
||||
@ -1,6 +1,123 @@
|
||||
const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] =
|
||||
{
|
||||
[SPECIES_VENUSAUR] = sVenusaurFormChangeTable,
|
||||
[SPECIES_VENUSAUR_MEGA] = sVenusaurFormChangeTable,
|
||||
[SPECIES_VENUSAUR_GMAX] = sVenusaurFormChangeTable,
|
||||
[SPECIES_CHARIZARD] = sCharizardFormChangeTable,
|
||||
[SPECIES_CHARIZARD_MEGA_X] = sCharizardFormChangeTable,
|
||||
[SPECIES_CHARIZARD_MEGA_Y] = sCharizardFormChangeTable,
|
||||
[SPECIES_CHARIZARD_GMAX] = sCharizardFormChangeTable,
|
||||
[SPECIES_BLASTOISE] = sBlastoiseFormChangeTable,
|
||||
[SPECIES_BLASTOISE_MEGA] = sBlastoiseFormChangeTable,
|
||||
[SPECIES_BLASTOISE_GMAX] = sBlastoiseFormChangeTable,
|
||||
[SPECIES_BUTTERFREE] = sButterfreeFormChangeTable,
|
||||
[SPECIES_BUTTERFREE_GMAX] = sButterfreeFormChangeTable,
|
||||
[SPECIES_BEEDRILL] = sBeedrillFormChangeTable,
|
||||
[SPECIES_BEEDRILL_MEGA] = sBeedrillFormChangeTable,
|
||||
[SPECIES_PIDGEOT] = sPidgeotFormChangeTable,
|
||||
[SPECIES_PIDGEOT_MEGA] = sPidgeotFormChangeTable,
|
||||
[SPECIES_PIKACHU] = sPikachuFormChangeTable,
|
||||
[SPECIES_PIKACHU_GMAX] = sPikachuFormChangeTable,
|
||||
[SPECIES_MEOWTH] = sMeowthFormChangeTable,
|
||||
[SPECIES_MEOWTH_GMAX] = sMeowthFormChangeTable,
|
||||
[SPECIES_ALAKAZAM] = sAlakazamFormChangeTable,
|
||||
[SPECIES_ALAKAZAM_MEGA] = sAlakazamFormChangeTable,
|
||||
[SPECIES_MACHAMP] = sMachampFormChangeTable,
|
||||
[SPECIES_MACHAMP_GMAX] = sMachampFormChangeTable,
|
||||
[SPECIES_SLOWBRO] = sSlowbroFormChangeTable,
|
||||
[SPECIES_SLOWBRO_MEGA] = sSlowbroFormChangeTable,
|
||||
[SPECIES_GENGAR] = sGengarFormChangeTable,
|
||||
[SPECIES_GENGAR_MEGA] = sGengarFormChangeTable,
|
||||
[SPECIES_GENGAR_GMAX] = sGengarFormChangeTable,
|
||||
[SPECIES_KINGLER] = sKinglerFormChangeTable,
|
||||
[SPECIES_KINGLER_GMAX] = sKinglerFormChangeTable,
|
||||
[SPECIES_KANGASKHAN] = sKangaskhanFormChangeTable,
|
||||
[SPECIES_KANGASKHAN_MEGA] = sKangaskhanFormChangeTable,
|
||||
[SPECIES_PINSIR] = sPinsirFormChangeTable,
|
||||
[SPECIES_PINSIR_MEGA] = sPinsirFormChangeTable,
|
||||
[SPECIES_GYARADOS] = sGyaradosFormChangeTable,
|
||||
[SPECIES_GYARADOS_MEGA] = sGyaradosFormChangeTable,
|
||||
[SPECIES_LAPRAS] = sLaprasFormChangeTable,
|
||||
[SPECIES_LAPRAS_GMAX] = sLaprasFormChangeTable,
|
||||
[SPECIES_EEVEE] = sEeveeFormChangeTable,
|
||||
[SPECIES_EEVEE_GMAX] = sEeveeFormChangeTable,
|
||||
[SPECIES_AERODACTYL] = sAerodactylFormChangeTable,
|
||||
[SPECIES_AERODACTYL_MEGA] = sAerodactylFormChangeTable,
|
||||
[SPECIES_SNORLAX] = sSnorlaxFormChangeTable,
|
||||
[SPECIES_SNORLAX_GMAX] = sSnorlaxFormChangeTable,
|
||||
[SPECIES_MEWTWO] = sMewtwoFormChangeTable,
|
||||
[SPECIES_MEWTWO_MEGA_X] = sMewtwoFormChangeTable,
|
||||
[SPECIES_MEWTWO_MEGA_Y] = sMewtwoFormChangeTable,
|
||||
[SPECIES_AMPHAROS] = sAmpharosFormChangeTable,
|
||||
[SPECIES_AMPHAROS_MEGA] = sAmpharosFormChangeTable,
|
||||
[SPECIES_STEELIX] = sSteelixFormChangeTable,
|
||||
[SPECIES_STEELIX_MEGA] = sSteelixFormChangeTable,
|
||||
[SPECIES_SCIZOR] = sScizorFormChangeTable,
|
||||
[SPECIES_SCIZOR_MEGA] = sScizorFormChangeTable,
|
||||
[SPECIES_HERACROSS] = sHeracrossFormChangeTable,
|
||||
[SPECIES_HERACROSS_MEGA] = sHeracrossFormChangeTable,
|
||||
[SPECIES_HOUNDOOM] = sHoundoomFormChangeTable,
|
||||
[SPECIES_HOUNDOOM_MEGA] = sHoundoomFormChangeTable,
|
||||
[SPECIES_TYRANITAR] = sTyranitarFormChangeTable,
|
||||
[SPECIES_TYRANITAR_MEGA] = sTyranitarFormChangeTable,
|
||||
[SPECIES_SCEPTILE] = sSceptileFormChangeTable,
|
||||
[SPECIES_SCEPTILE_MEGA] = sSceptileFormChangeTable,
|
||||
[SPECIES_BLAZIKEN] = sBlazikenFormChangeTable,
|
||||
[SPECIES_BLAZIKEN_MEGA] = sBlazikenFormChangeTable,
|
||||
[SPECIES_SWAMPERT] = sSwampertFormChangeTable,
|
||||
[SPECIES_SWAMPERT_MEGA] = sSwampertFormChangeTable,
|
||||
[SPECIES_SABLEYE] = sSableyeFormChangeTable,
|
||||
[SPECIES_SABLEYE_MEGA] = sSableyeFormChangeTable,
|
||||
[SPECIES_SHARPEDO] = sSharpedoFormChangeTable,
|
||||
[SPECIES_SHARPEDO_MEGA] = sSharpedoFormChangeTable,
|
||||
[SPECIES_MANECTRIC] = sManectricFormChangeTable,
|
||||
[SPECIES_MANECTRIC_MEGA] = sManectricFormChangeTable,
|
||||
[SPECIES_CAMERUPT] = sCameruptFormChangeTable,
|
||||
[SPECIES_CAMERUPT_MEGA] = sCameruptFormChangeTable,
|
||||
[SPECIES_GLALIE] = sGlalieFormChangeTable,
|
||||
[SPECIES_GLALIE_MEGA] = sGlalieFormChangeTable,
|
||||
[SPECIES_MAWILE] = sMawileFormChangeTable,
|
||||
[SPECIES_MAWILE_MEGA] = sMawileFormChangeTable,
|
||||
[SPECIES_MEDICHAM] = sMedichamFormChangeTable,
|
||||
[SPECIES_MEDICHAM_MEGA] = sMedichamFormChangeTable,
|
||||
[SPECIES_ALTARIA] = sAltariaFormChangeTable,
|
||||
[SPECIES_ALTARIA_MEGA] = sAltariaFormChangeTable,
|
||||
[SPECIES_ABSOL] = sAbsolFormChangeTable,
|
||||
[SPECIES_ABSOL_MEGA] = sAbsolFormChangeTable,
|
||||
[SPECIES_BANETTE] = sBanetteFormChangeTable,
|
||||
[SPECIES_BANETTE_MEGA] = sBanetteFormChangeTable,
|
||||
[SPECIES_AGGRON] = sAggronFormChangeTable,
|
||||
[SPECIES_AGGRON_MEGA] = sAggronFormChangeTable,
|
||||
[SPECIES_GARDEVOIR] = sGardevoirFormChangeTable,
|
||||
[SPECIES_GARDEVOIR_MEGA] = sGardevoirFormChangeTable,
|
||||
[SPECIES_SALAMENCE] = sSalamenceFormChangeTable,
|
||||
[SPECIES_SALAMENCE_MEGA] = sSalamenceFormChangeTable,
|
||||
[SPECIES_METAGROSS] = sMetagrossFormChangeTable,
|
||||
[SPECIES_METAGROSS_MEGA] = sMetagrossFormChangeTable,
|
||||
[SPECIES_LATIAS] = sLatiasFormChangeTable,
|
||||
[SPECIES_LATIAS_MEGA] = sLatiasFormChangeTable,
|
||||
[SPECIES_LATIOS] = sLatiosFormChangeTable,
|
||||
[SPECIES_LATIOS_MEGA] = sLatiosFormChangeTable,
|
||||
[SPECIES_KYOGRE] = sKyogreFormChangeTable,
|
||||
[SPECIES_KYOGRE_PRIMAL] = sKyogreFormChangeTable,
|
||||
[SPECIES_GROUDON] = sGroudonFormChangeTable,
|
||||
[SPECIES_GROUDON_PRIMAL] = sGroudonFormChangeTable,
|
||||
[SPECIES_RAYQUAZA] = sRayquazaFormChangeTable,
|
||||
[SPECIES_RAYQUAZA_MEGA] = sRayquazaFormChangeTable,
|
||||
#if P_GEN_4_POKEMON == TRUE
|
||||
[SPECIES_BURMY] = sBurmyFormChangeTable,
|
||||
[SPECIES_BURMY_SANDY_CLOAK] = sBurmyFormChangeTable,
|
||||
[SPECIES_BURMY_TRASH_CLOAK] = sBurmyFormChangeTable,
|
||||
[SPECIES_LOPUNNY] = sLopunnyFormChangeTable,
|
||||
[SPECIES_LOPUNNY_MEGA] = sLopunnyFormChangeTable,
|
||||
[SPECIES_GARCHOMP] = sGarchompFormChangeTable,
|
||||
[SPECIES_GARCHOMP_MEGA] = sGarchompFormChangeTable,
|
||||
[SPECIES_LUCARIO] = sLucarioFormChangeTable,
|
||||
[SPECIES_LUCARIO_MEGA] = sLucarioFormChangeTable,
|
||||
[SPECIES_ABOMASNOW] = sAbomasnowFormChangeTable,
|
||||
[SPECIES_ABOMASNOW_MEGA] = sAbomasnowFormChangeTable,
|
||||
[SPECIES_GALLADE] = sGalladeFormChangeTable,
|
||||
[SPECIES_GALLADE_MEGA] = sGalladeFormChangeTable,
|
||||
[SPECIES_GIRATINA] = sGiratinaFormChangeTable,
|
||||
[SPECIES_GIRATINA_ORIGIN] = sGiratinaFormChangeTable,
|
||||
[SPECIES_SHAYMIN] = sShayminFormChangeTable,
|
||||
@ -25,6 +142,14 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] =
|
||||
[SPECIES_ARCEUS_FAIRY] = sArceusFormChangeTable,
|
||||
#endif
|
||||
#if P_GEN_5_POKEMON == TRUE
|
||||
[SPECIES_AUDINO] = sAudinoFormChangeTable,
|
||||
[SPECIES_AUDINO_MEGA] = sAudinoFormChangeTable,
|
||||
[SPECIES_DARMANITAN] = sDarmanitanFormChangeTable,
|
||||
[SPECIES_DARMANITAN_ZEN_MODE] = sDarmanitanFormChangeTable,
|
||||
[SPECIES_DARMANITAN_GALARIAN] = sDarmanitanGalarianFormChangeTable,
|
||||
[SPECIES_DARMANITAN_ZEN_MODE_GALARIAN] = sDarmanitanGalarianFormChangeTable,
|
||||
[SPECIES_GARBODOR] = sGarbodorFormChangeTable,
|
||||
[SPECIES_GARBODOR_GMAX] = sGarbodorFormChangeTable,
|
||||
[SPECIES_TORNADUS] = sTornadusFormChangeTable,
|
||||
[SPECIES_TORNADUS_THERIAN] = sTornadusFormChangeTable,
|
||||
[SPECIES_THUNDURUS] = sThundurusFormChangeTable,
|
||||
@ -33,6 +158,8 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] =
|
||||
[SPECIES_LANDORUS_THERIAN] = sLandorusFormChangeTable,
|
||||
[SPECIES_KELDEO] = sKeldeoFormChangeTable,
|
||||
[SPECIES_KELDEO_RESOLUTE] = sKeldeoFormChangeTable,
|
||||
[SPECIES_MELOETTA] = sMeloettaFormChangeTable,
|
||||
[SPECIES_MELOETTA_PIROUETTE] = sMeloettaFormChangeTable,
|
||||
[SPECIES_GENESECT] = sGenesectFormChangeTable,
|
||||
[SPECIES_GENESECT_DOUSE_DRIVE] = sGenesectFormChangeTable,
|
||||
[SPECIES_GENESECT_SHOCK_DRIVE] = sGenesectFormChangeTable,
|
||||
@ -40,8 +167,17 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] =
|
||||
[SPECIES_GENESECT_CHILL_DRIVE] = sGenesectFormChangeTable,
|
||||
#endif
|
||||
#if P_GEN_6_POKEMON == TRUE
|
||||
[SPECIES_GRENINJA_BATTLE_BOND] = sGreninjaBattleBondFormChangeTable,
|
||||
[SPECIES_GRENINJA_ASH] = sGreninjaBattleBondFormChangeTable,
|
||||
[SPECIES_AEGISLASH] = sAegislashFormChangeTable,
|
||||
[SPECIES_AEGISLASH_BLADE] = sAegislashFormChangeTable,
|
||||
[SPECIES_XERNEAS] = sXerneasFormChangeTable,
|
||||
[SPECIES_XERNEAS_ACTIVE] = sXerneasFormChangeTable,
|
||||
[SPECIES_ZYGARDE_10_POWER_CONSTRUCT] = sZygardePowerConstructFormChangeTable,
|
||||
[SPECIES_ZYGARDE_50_POWER_CONSTRUCT] = sZygardePowerConstructFormChangeTable,
|
||||
[SPECIES_ZYGARDE_COMPLETE] = sZygardePowerConstructFormChangeTable,
|
||||
[SPECIES_DIANCIE] = sDiancieFormChangeTable,
|
||||
[SPECIES_DIANCIE_MEGA] = sDiancieFormChangeTable,
|
||||
[SPECIES_HOOPA] = sHoopaFormChangeTable,
|
||||
[SPECIES_HOOPA_UNBOUND] = sHoopaFormChangeTable,
|
||||
#endif
|
||||
@ -50,6 +186,8 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] =
|
||||
[SPECIES_ORICORIO_POM_POM] = sOricorioFormChangeTable,
|
||||
[SPECIES_ORICORIO_PAU] = sOricorioFormChangeTable,
|
||||
[SPECIES_ORICORIO_SENSU] = sOricorioFormChangeTable,
|
||||
[SPECIES_WISHIWASHI] = sWishiwashiFormChangeTable,
|
||||
[SPECIES_WISHIWASHI_SCHOOL] = sWishiwashiFormChangeTable,
|
||||
[SPECIES_SILVALLY] = sSilvallyFormChangeTable,
|
||||
[SPECIES_SILVALLY_BUG] = sSilvallyFormChangeTable,
|
||||
[SPECIES_SILVALLY_DARK] = sSilvallyFormChangeTable,
|
||||
@ -68,43 +206,26 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] =
|
||||
[SPECIES_SILVALLY_ROCK] = sSilvallyFormChangeTable,
|
||||
[SPECIES_SILVALLY_STEEL] = sSilvallyFormChangeTable,
|
||||
[SPECIES_SILVALLY_WATER] = sSilvallyFormChangeTable,
|
||||
#endif
|
||||
#if P_GEN_8_POKEMON == TRUE
|
||||
[SPECIES_ZACIAN] = sZacianFormChangeTable,
|
||||
[SPECIES_ZACIAN_CROWNED_SWORD] = sZacianFormChangeTable,
|
||||
[SPECIES_ZAMAZENTA] = sZamazentaFormChangeTable,
|
||||
[SPECIES_ZAMAZENTA_CROWNED_SHIELD] = sZamazentaFormChangeTable,
|
||||
[SPECIES_ENAMORUS] = sEnamorusFormChangeTable,
|
||||
[SPECIES_ENAMORUS_THERIAN] = sEnamorusFormChangeTable,
|
||||
// Gigantamax Forms
|
||||
[SPECIES_VENUSAUR] = sVenusaurFormChangeTable,
|
||||
[SPECIES_VENUSAUR_GMAX] = sVenusaurFormChangeTable,
|
||||
[SPECIES_CHARIZARD] = sCharizardFormChangeTable,
|
||||
[SPECIES_CHARIZARD_GMAX] = sCharizardFormChangeTable,
|
||||
[SPECIES_BLASTOISE] = sBlastoiseFormChangeTable,
|
||||
[SPECIES_BLASTOISE_GMAX] = sBlastoiseFormChangeTable,
|
||||
[SPECIES_BUTTERFREE] = sButterfreeFormChangeTable,
|
||||
[SPECIES_BUTTERFREE_GMAX] = sButterfreeFormChangeTable,
|
||||
[SPECIES_PIKACHU] = sPikachuFormChangeTable,
|
||||
[SPECIES_PIKACHU_GMAX] = sPikachuFormChangeTable,
|
||||
[SPECIES_MEOWTH] = sMeowthFormChangeTable,
|
||||
[SPECIES_MEOWTH_GMAX] = sMeowthFormChangeTable,
|
||||
[SPECIES_MACHAMP] = sMachampFormChangeTable,
|
||||
[SPECIES_MACHAMP_GMAX] = sMachampFormChangeTable,
|
||||
[SPECIES_GENGAR] = sGengarFormChangeTable,
|
||||
[SPECIES_GENGAR_GMAX] = sGengarFormChangeTable,
|
||||
[SPECIES_KINGLER] = sKinglerFormChangeTable,
|
||||
[SPECIES_KINGLER_GMAX] = sKinglerFormChangeTable,
|
||||
[SPECIES_LAPRAS] = sLaprasFormChangeTable,
|
||||
[SPECIES_LAPRAS_GMAX] = sLaprasFormChangeTable,
|
||||
[SPECIES_EEVEE] = sEeveeFormChangeTable,
|
||||
[SPECIES_EEVEE_GMAX] = sEeveeFormChangeTable,
|
||||
[SPECIES_SNORLAX] = sSnorlaxFormChangeTable,
|
||||
[SPECIES_SNORLAX_GMAX] = sSnorlaxFormChangeTable,
|
||||
[SPECIES_GARBODOR] = sGarbodorFormChangeTable,
|
||||
[SPECIES_GARBODOR_GMAX] = sGarbodorFormChangeTable,
|
||||
[SPECIES_MIMIKYU] = sMimikyuFormChangeTable,
|
||||
[SPECIES_MIMIKYU_BUSTED] = sMimikyuFormChangeTable,
|
||||
[SPECIES_MINIOR] = sMiniorRedFormChangeTable,
|
||||
[SPECIES_MINIOR_CORE_RED] = sMiniorRedFormChangeTable,
|
||||
[SPECIES_MINIOR_METEOR_BLUE] = sMiniorBlueFormChangeTable,
|
||||
[SPECIES_MINIOR_CORE_BLUE] = sMiniorBlueFormChangeTable,
|
||||
[SPECIES_MINIOR_METEOR_GREEN] = sMiniorGreenFormChangeTable,
|
||||
[SPECIES_MINIOR_CORE_GREEN] = sMiniorGreenFormChangeTable,
|
||||
[SPECIES_MINIOR_METEOR_INDIGO] = sMiniorIndigoFormChangeTable,
|
||||
[SPECIES_MINIOR_CORE_INDIGO] = sMiniorIndigoFormChangeTable,
|
||||
[SPECIES_MINIOR_METEOR_ORANGE] = sMiniorOrangeFormChangeTable,
|
||||
[SPECIES_MINIOR_CORE_ORANGE] = sMiniorOrangeFormChangeTable,
|
||||
[SPECIES_MINIOR_METEOR_VIOLET] = sMiniorVioletFormChangeTable,
|
||||
[SPECIES_MINIOR_CORE_VIOLET] = sMiniorVioletFormChangeTable,
|
||||
[SPECIES_MINIOR_METEOR_YELLOW] = sMiniorYellowFormChangeTable,
|
||||
[SPECIES_MINIOR_CORE_YELLOW] = sMiniorYellowFormChangeTable,
|
||||
[SPECIES_MELMETAL] = sMelmetalFormChangeTable,
|
||||
[SPECIES_MELMETAL_GMAX] = sMelmetalFormChangeTable,
|
||||
#endif
|
||||
#if P_GEN_8_POKEMON == TRUE
|
||||
[SPECIES_RILLABOOM] = sRillaboomFormChangeTable,
|
||||
[SPECIES_RILLABOOM_GMAX] = sRillaboomFormChangeTable,
|
||||
[SPECIES_CINDERACE] = sCinderaceFormChangeTable,
|
||||
@ -125,6 +246,9 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] =
|
||||
[SPECIES_APPLETUN_GMAX] = sAppletunFormChangeTable,
|
||||
[SPECIES_SANDACONDA] = sSandacondaFormChangeTable,
|
||||
[SPECIES_SANDACONDA_GMAX] = sSandacondaFormChangeTable,
|
||||
[SPECIES_CRAMORANT] = sCramorantFormChangeTable,
|
||||
[SPECIES_CRAMORANT_GULPING] = sCramorantFormChangeTable,
|
||||
[SPECIES_CRAMORANT_GORGING] = sCramorantFormChangeTable,
|
||||
[SPECIES_TOXTRICITY] = sToxtricityFormChangeTable,
|
||||
[SPECIES_TOXTRICITY_GMAX] = sToxtricityFormChangeTable,
|
||||
[SPECIES_CENTISKORCH] = sCentiskorchFormChangeTable,
|
||||
@ -135,13 +259,23 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] =
|
||||
[SPECIES_GRIMMSNARL_GMAX] = sGrimmsnarlFormChangeTable,
|
||||
[SPECIES_ALCREMIE] = sAlcremieFormChangeTable,
|
||||
[SPECIES_ALCREMIE_GMAX] = sAlcremieFormChangeTable,
|
||||
[SPECIES_EISCUE] = sEiscueFormChangeTable,
|
||||
[SPECIES_EISCUE_NOICE_FACE] = sEiscueFormChangeTable,
|
||||
[SPECIES_MORPEKO] = sMorpekoFormChangeTable,
|
||||
[SPECIES_MORPEKO_HANGRY] = sMorpekoFormChangeTable,
|
||||
[SPECIES_COPPERAJAH] = sCopperajahFormChangeTable,
|
||||
[SPECIES_COPPERAJAH_GMAX] = sCopperajahFormChangeTable,
|
||||
[SPECIES_DURALUDON] = sDuraludonFormChangeTable,
|
||||
[SPECIES_DURALUDON_GMAX] = sDuraludonFormChangeTable,
|
||||
[SPECIES_ZACIAN] = sZacianFormChangeTable,
|
||||
[SPECIES_ZACIAN_CROWNED_SWORD] = sZacianFormChangeTable,
|
||||
[SPECIES_ZAMAZENTA] = sZamazentaFormChangeTable,
|
||||
[SPECIES_ZAMAZENTA_CROWNED_SHIELD] = sZamazentaFormChangeTable,
|
||||
[SPECIES_URSHIFU] = sUrshifuFormChangeTable,
|
||||
[SPECIES_URSHIFU_GMAX] = sUrshifuFormChangeTable,
|
||||
[SPECIES_URSHIFU_RAPID_STRIKE_STYLE] = sUrshifuRapidStrikeFormChangeTable,
|
||||
[SPECIES_URSHIFU_RAPID_STRIKE_STYLE_GMAX] = sUrshifuRapidStrikeFormChangeTable,
|
||||
[SPECIES_ENAMORUS] = sEnamorusFormChangeTable,
|
||||
[SPECIES_ENAMORUS_THERIAN] = sEnamorusFormChangeTable,
|
||||
#endif
|
||||
};
|
||||
|
||||
@ -1,223 +1,671 @@
|
||||
/*
|
||||
FORM_ITEM_HOLD:
|
||||
Form change activates when the specified item is given to or taken from the selected Pokémon.
|
||||
Alternatively, form change activates when the specified item is is given to or taken from
|
||||
the selected Pokémon that has a particular ability.
|
||||
param1 = item to hold
|
||||
param2 = ability to check for, optional
|
||||
static const struct FormChange sVenusaurFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_VENUSAUR_MEGA, ITEM_VENUSAURITE},
|
||||
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_VENUSAUR_GMAX},
|
||||
{FORM_CHANGE_FAINT, SPECIES_VENUSAUR},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_VENUSAUR},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
FORM_ITEM_USE:
|
||||
Form change activates when the item is used on the selected Pokémon.
|
||||
param1 = item to use
|
||||
param2 = DAY if form change activates in the daytime, optional
|
||||
NIGHT if form change activates at nighttime, optional
|
||||
static const struct FormChange sCharizardFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_CHARIZARD_MEGA_X, ITEM_CHARIZARDITE_X},
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_CHARIZARD_MEGA_Y, ITEM_CHARIZARDITE_Y},
|
||||
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_CHARIZARD_GMAX},
|
||||
{FORM_CHANGE_FAINT, SPECIES_CHARIZARD},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_CHARIZARD},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
FORM_MOVE:
|
||||
Form change activates when the Pokémon learns or forgets the move.
|
||||
param1 = move to check for
|
||||
param2 = WHEN_LEARNED if form change activates when move is forgotten
|
||||
WHEN_FORGOTTEN if form change activates when move is learned
|
||||
static const struct FormChange sBlastoiseFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_BLASTOISE_MEGA, ITEM_BLASTOISINITE},
|
||||
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_BLASTOISE_GMAX},
|
||||
{FORM_CHANGE_FAINT, SPECIES_BLASTOISE},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_BLASTOISE},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
FORM_WITHDRAW:
|
||||
Form change activates when the Pokémon is withdrawn from the PC or Daycare.
|
||||
no parameters
|
||||
static const struct FormChange sBeedrillFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_BEEDRILL_MEGA, ITEM_BEEDRILLITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_BEEDRILL},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_BEEDRILL},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
FORM_BATTLE_BEGIN:
|
||||
Form change activates when the Pokémon is sent out at the beginning of a battle
|
||||
param1 = item to hold, optional
|
||||
param2 = a move that will be replaced, optional
|
||||
param3 = a new move to replace it with, optional
|
||||
static const struct FormChange sPidgeotFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_PIDGEOT_MEGA, ITEM_PIDGEOTITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_PIDGEOT},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_PIDGEOT},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
FORM_BATTLE_END:
|
||||
Form change activates at the end of a battle
|
||||
param1 = item to hold, optional
|
||||
param2 = a move that will be replaced, optional
|
||||
param3 = a new move to replace it with, optional
|
||||
*/
|
||||
static const struct FormChange sAlakazamFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_ALAKAZAM_MEGA, ITEM_ALAKAZITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_ALAKAZAM},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_ALAKAZAM},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
// FORM_MOVE param2 Arguments
|
||||
#define WHEN_LEARNED 0
|
||||
#define WHEN_FORGOTTEN 1
|
||||
static const struct FormChange sSlowbroFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_SLOWBRO_MEGA, ITEM_SLOWBRONITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_SLOWBRO},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_SLOWBRO},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
// FORM_ITEM_USE param2 Arguments
|
||||
#define DAY 1
|
||||
#define NIGHT 2
|
||||
static const struct FormChange sGengarFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_GENGAR_MEGA, ITEM_GENGARITE},
|
||||
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_GENGAR_GMAX},
|
||||
{FORM_CHANGE_FAINT, SPECIES_GENGAR},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_GENGAR},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sKangaskhanFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_KANGASKHAN_MEGA, ITEM_KANGASKHANITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_KANGASKHAN},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_KANGASKHAN},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sPinsirFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_PINSIR_MEGA, ITEM_PINSIRITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_PINSIR},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_PINSIR},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sGyaradosFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_GYARADOS_MEGA, ITEM_GYARADOSITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_GYARADOS},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_GYARADOS},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sAerodactylFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_AERODACTYL_MEGA, ITEM_AERODACTYLITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_AERODACTYL},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_AERODACTYL},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sMewtwoFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_MEWTWO_MEGA_X, ITEM_MEWTWONITE_X},
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_MEWTWO_MEGA_Y, ITEM_MEWTWONITE_Y},
|
||||
{FORM_CHANGE_FAINT, SPECIES_MEWTWO},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_MEWTWO},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sAmpharosFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_AMPHAROS_MEGA, ITEM_AMPHAROSITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_AMPHAROS},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_AMPHAROS},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sSteelixFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_STEELIX_MEGA, ITEM_STEELIXITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_STEELIX},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_STEELIX},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sScizorFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_SCIZOR_MEGA, ITEM_SCIZORITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_SCIZOR},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_SCIZOR},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sHeracrossFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_HERACROSS_MEGA, ITEM_HERACRONITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_HERACROSS},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_HERACROSS},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sHoundoomFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_HOUNDOOM_MEGA, ITEM_HOUNDOOMINITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_HOUNDOOM},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_HOUNDOOM},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sTyranitarFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_TYRANITAR_MEGA, ITEM_TYRANITARITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_TYRANITAR},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_TYRANITAR},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sSceptileFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_SCEPTILE_MEGA, ITEM_SCEPTILITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_SCEPTILE},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_SCEPTILE},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sBlazikenFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_BLAZIKEN_MEGA, ITEM_BLAZIKENITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_BLAZIKEN},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_BLAZIKEN},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sSwampertFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_SWAMPERT_MEGA, ITEM_SWAMPERTITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_SWAMPERT},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_SWAMPERT},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sSableyeFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_SABLEYE_MEGA, ITEM_SABLENITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_SABLEYE},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_SABLEYE},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sSharpedoFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_SHARPEDO_MEGA, ITEM_SHARPEDONITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_SHARPEDO},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_SHARPEDO},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sManectricFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_MANECTRIC_MEGA, ITEM_MANECTITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_MANECTRIC},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_MANECTRIC},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sCameruptFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_CAMERUPT_MEGA, ITEM_CAMERUPTITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_CAMERUPT},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_CAMERUPT},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sGlalieFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_GLALIE_MEGA, ITEM_GLALITITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_GLALIE},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_GLALIE},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sMawileFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_MAWILE_MEGA, ITEM_MAWILITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_MAWILE},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_MAWILE},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sMedichamFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_MEDICHAM_MEGA, ITEM_MEDICHAMITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_MEDICHAM},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_MEDICHAM},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sAltariaFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_ALTARIA_MEGA, ITEM_ALTARIANITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_ALTARIA},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_ALTARIA},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sAbsolFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_ABSOL_MEGA, ITEM_ABSOLITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_ABSOL},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_ABSOL},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sBanetteFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_BANETTE_MEGA, ITEM_BANETTITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_BANETTE},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_BANETTE},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sAggronFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_AGGRON_MEGA, ITEM_AGGRONITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_AGGRON},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_AGGRON},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sGardevoirFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_GARDEVOIR_MEGA, ITEM_GARDEVOIRITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_GARDEVOIR},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_GARDEVOIR},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sSalamenceFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_SALAMENCE_MEGA, ITEM_SALAMENCITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_SALAMENCE},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_SALAMENCE},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sMetagrossFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_METAGROSS_MEGA, ITEM_METAGROSSITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_METAGROSS},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_METAGROSS},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sLatiasFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_LATIAS_MEGA, ITEM_LATIASITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_LATIAS},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_LATIAS},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sLatiosFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_LATIOS_MEGA, ITEM_LATIOSITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_LATIOS},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_LATIOS},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sKyogreFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_PRIMAL_REVERSION, SPECIES_KYOGRE_PRIMAL, ITEM_BLUE_ORB},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_KYOGRE},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sGroudonFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_PRIMAL_REVERSION, SPECIES_GROUDON_PRIMAL, ITEM_RED_ORB},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_GROUDON},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sRayquazaFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_MOVE, SPECIES_RAYQUAZA_MEGA, MOVE_DRAGON_ASCENT},
|
||||
{FORM_CHANGE_FAINT, SPECIES_RAYQUAZA},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_RAYQUAZA},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
#if P_GEN_4_POKEMON == TRUE
|
||||
static const struct FormChange sBurmyFormChangeTable[] = {
|
||||
{FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY, BATTLE_TERRAIN_GRASS},
|
||||
{FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY, BATTLE_TERRAIN_LONG_GRASS},
|
||||
{FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY, BATTLE_TERRAIN_POND},
|
||||
{FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY, BATTLE_TERRAIN_MOUNTAIN},
|
||||
{FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY, BATTLE_TERRAIN_PLAIN},
|
||||
{FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY_SANDY_CLOAK, BATTLE_TERRAIN_CAVE},
|
||||
{FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY_SANDY_CLOAK, BATTLE_TERRAIN_SAND},
|
||||
{FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY_TRASH_CLOAK, BATTLE_TERRAIN_BUILDING},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sLopunnyFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_LOPUNNY_MEGA, ITEM_LOPUNNITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_LOPUNNY},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_LOPUNNY},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sGarchompFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_GARCHOMP_MEGA, ITEM_GARCHOMPITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_GARCHOMP},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_GARCHOMP},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sLucarioFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_LUCARIO_MEGA, ITEM_LUCARIONITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_LUCARIO},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_LUCARIO},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sAbomasnowFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_ABOMASNOW_MEGA, ITEM_ABOMASITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_ABOMASNOW},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_ABOMASNOW},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sGalladeFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_GALLADE_MEGA, ITEM_GALLADITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_GALLADE},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_GALLADE},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sGiratinaFormChangeTable[] = {
|
||||
{FORM_ITEM_HOLD, SPECIES_GIRATINA, ITEM_NONE},
|
||||
{FORM_ITEM_HOLD, SPECIES_GIRATINA_ORIGIN, ITEM_GRISEOUS_ORB},
|
||||
{FORM_CHANGE_END},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_GIRATINA, ITEM_NONE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_GIRATINA_ORIGIN, ITEM_GRISEOUS_ORB},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sShayminFormChangeTable[] = {
|
||||
{FORM_ITEM_USE, SPECIES_SHAYMIN_SKY, ITEM_GRACIDEA, DAY},
|
||||
// {FORM_WITHDRAW, SPECIES_SHAYMIN},
|
||||
{FORM_CHANGE_END},
|
||||
{FORM_CHANGE_ITEM_USE, SPECIES_SHAYMIN_SKY, ITEM_GRACIDEA, DAY},
|
||||
// {FORM_CHANGE_WITHDRAW, SPECIES_SHAYMIN},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sArceusFormChangeTable[] = {
|
||||
{FORM_ITEM_HOLD, SPECIES_ARCEUS, ITEM_NONE, ABILITY_MULTITYPE},
|
||||
{FORM_ITEM_HOLD, SPECIES_ARCEUS_FIGHTING, ITEM_FIST_PLATE, ABILITY_MULTITYPE},
|
||||
{FORM_ITEM_HOLD, SPECIES_ARCEUS_FIGHTING, ITEM_FIGHTINIUM_Z, ABILITY_MULTITYPE},
|
||||
{FORM_ITEM_HOLD, SPECIES_ARCEUS_FLYING, ITEM_SKY_PLATE, ABILITY_MULTITYPE},
|
||||
{FORM_ITEM_HOLD, SPECIES_ARCEUS_FLYING, ITEM_FLYINIUM_Z, ABILITY_MULTITYPE},
|
||||
{FORM_ITEM_HOLD, SPECIES_ARCEUS_POISON, ITEM_TOXIC_PLATE, ABILITY_MULTITYPE},
|
||||
{FORM_ITEM_HOLD, SPECIES_ARCEUS_POISON, ITEM_POISONIUM_Z, ABILITY_MULTITYPE},
|
||||
{FORM_ITEM_HOLD, SPECIES_ARCEUS_ROCK, ITEM_STONE_PLATE, ABILITY_MULTITYPE},
|
||||
{FORM_ITEM_HOLD, SPECIES_ARCEUS_ROCK, ITEM_ROCKIUM_Z, ABILITY_MULTITYPE},
|
||||
{FORM_ITEM_HOLD, SPECIES_ARCEUS_GROUND, ITEM_EARTH_PLATE, ABILITY_MULTITYPE},
|
||||
{FORM_ITEM_HOLD, SPECIES_ARCEUS_GROUND, ITEM_GROUNDIUM_Z, ABILITY_MULTITYPE},
|
||||
{FORM_ITEM_HOLD, SPECIES_ARCEUS_BUG, ITEM_INSECT_PLATE, ABILITY_MULTITYPE},
|
||||
{FORM_ITEM_HOLD, SPECIES_ARCEUS_BUG, ITEM_BUGINIUM_Z, ABILITY_MULTITYPE},
|
||||
{FORM_ITEM_HOLD, SPECIES_ARCEUS_GHOST, ITEM_SPOOKY_PLATE, ABILITY_MULTITYPE},
|
||||
{FORM_ITEM_HOLD, SPECIES_ARCEUS_GHOST, ITEM_GHOSTIUM_Z, ABILITY_MULTITYPE},
|
||||
{FORM_ITEM_HOLD, SPECIES_ARCEUS_STEEL, ITEM_IRON_PLATE, ABILITY_MULTITYPE},
|
||||
{FORM_ITEM_HOLD, SPECIES_ARCEUS_STEEL, ITEM_STEELIUM_Z, ABILITY_MULTITYPE},
|
||||
{FORM_ITEM_HOLD, SPECIES_ARCEUS_FIRE, ITEM_FLAME_PLATE, ABILITY_MULTITYPE},
|
||||
{FORM_ITEM_HOLD, SPECIES_ARCEUS_FIRE, ITEM_FIRIUM_Z, ABILITY_MULTITYPE},
|
||||
{FORM_ITEM_HOLD, SPECIES_ARCEUS_WATER, ITEM_SPLASH_PLATE, ABILITY_MULTITYPE},
|
||||
{FORM_ITEM_HOLD, SPECIES_ARCEUS_WATER, ITEM_WATERIUM_Z, ABILITY_MULTITYPE},
|
||||
{FORM_ITEM_HOLD, SPECIES_ARCEUS_GRASS, ITEM_MEADOW_PLATE, ABILITY_MULTITYPE},
|
||||
{FORM_ITEM_HOLD, SPECIES_ARCEUS_GRASS, ITEM_GRASSIUM_Z, ABILITY_MULTITYPE},
|
||||
{FORM_ITEM_HOLD, SPECIES_ARCEUS_ELECTRIC, ITEM_ZAP_PLATE, ABILITY_MULTITYPE},
|
||||
{FORM_ITEM_HOLD, SPECIES_ARCEUS_ELECTRIC, ITEM_ELECTRIUM_Z, ABILITY_MULTITYPE},
|
||||
{FORM_ITEM_HOLD, SPECIES_ARCEUS_PSYCHIC, ITEM_MIND_PLATE, ABILITY_MULTITYPE},
|
||||
{FORM_ITEM_HOLD, SPECIES_ARCEUS_PSYCHIC, ITEM_PSYCHIUM_Z, ABILITY_MULTITYPE},
|
||||
{FORM_ITEM_HOLD, SPECIES_ARCEUS_ICE, ITEM_ICICLE_PLATE, ABILITY_MULTITYPE},
|
||||
{FORM_ITEM_HOLD, SPECIES_ARCEUS_ICE, ITEM_ICIUM_Z, ABILITY_MULTITYPE},
|
||||
{FORM_ITEM_HOLD, SPECIES_ARCEUS_DRAGON, ITEM_DRACO_PLATE, ABILITY_MULTITYPE},
|
||||
{FORM_ITEM_HOLD, SPECIES_ARCEUS_DRAGON, ITEM_DRAGONIUM_Z, ABILITY_MULTITYPE},
|
||||
{FORM_ITEM_HOLD, SPECIES_ARCEUS_DARK, ITEM_DREAD_PLATE, ABILITY_MULTITYPE},
|
||||
{FORM_ITEM_HOLD, SPECIES_ARCEUS_DARK, ITEM_DARKINIUM_Z, ABILITY_MULTITYPE},
|
||||
{FORM_ITEM_HOLD, SPECIES_ARCEUS_FAIRY, ITEM_PIXIE_PLATE, ABILITY_MULTITYPE},
|
||||
{FORM_ITEM_HOLD, SPECIES_ARCEUS_FAIRY, ITEM_FAIRIUM_Z, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_END},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS, ITEM_NONE, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_FIGHTING, ITEM_FIST_PLATE, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_FIGHTING, ITEM_FIGHTINIUM_Z, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_FLYING, ITEM_SKY_PLATE, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_FLYING, ITEM_FLYINIUM_Z, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_POISON, ITEM_TOXIC_PLATE, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_POISON, ITEM_POISONIUM_Z, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_ROCK, ITEM_STONE_PLATE, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_ROCK, ITEM_ROCKIUM_Z, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_GROUND, ITEM_EARTH_PLATE, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_GROUND, ITEM_GROUNDIUM_Z, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_BUG, ITEM_INSECT_PLATE, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_BUG, ITEM_BUGINIUM_Z, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_GHOST, ITEM_SPOOKY_PLATE, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_GHOST, ITEM_GHOSTIUM_Z, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_STEEL, ITEM_IRON_PLATE, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_STEEL, ITEM_STEELIUM_Z, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_FIRE, ITEM_FLAME_PLATE, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_FIRE, ITEM_FIRIUM_Z, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_WATER, ITEM_SPLASH_PLATE, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_WATER, ITEM_WATERIUM_Z, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_GRASS, ITEM_MEADOW_PLATE, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_GRASS, ITEM_GRASSIUM_Z, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_ELECTRIC, ITEM_ZAP_PLATE, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_ELECTRIC, ITEM_ELECTRIUM_Z, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_PSYCHIC, ITEM_MIND_PLATE, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_PSYCHIC, ITEM_PSYCHIUM_Z, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_ICE, ITEM_ICICLE_PLATE, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_ICE, ITEM_ICIUM_Z, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_DRAGON, ITEM_DRACO_PLATE, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_DRAGON, ITEM_DRAGONIUM_Z, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_DARK, ITEM_DREAD_PLATE, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_DARK, ITEM_DARKINIUM_Z, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_FAIRY, ITEM_PIXIE_PLATE, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_FAIRY, ITEM_FAIRIUM_Z, ABILITY_MULTITYPE},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
#endif
|
||||
|
||||
#if P_GEN_5_POKEMON == TRUE
|
||||
static const struct FormChange sAudinoFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_AUDINO_MEGA, ITEM_AUDINITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_AUDINO},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_AUDINO},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sDarmanitanFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_DARMANITAN, ABILITY_ZEN_MODE, HP_HIGHER_THAN, 50},
|
||||
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_DARMANITAN_ZEN_MODE, ABILITY_ZEN_MODE, HP_LOWER_EQ_THAN, 50},
|
||||
{FORM_CHANGE_FAINT, SPECIES_DARMANITAN},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_DARMANITAN},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sDarmanitanGalarianFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_DARMANITAN_GALARIAN, ABILITY_ZEN_MODE, HP_HIGHER_THAN, 50},
|
||||
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_DARMANITAN_ZEN_MODE_GALARIAN, ABILITY_ZEN_MODE, HP_LOWER_EQ_THAN, 50},
|
||||
{FORM_CHANGE_FAINT, SPECIES_DARMANITAN_GALARIAN},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_DARMANITAN_GALARIAN},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sMeloettaFormChangeTable[] = {
|
||||
{FORM_CHANGE_FAINT, SPECIES_MELOETTA},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_MELOETTA},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sTornadusFormChangeTable[] = {
|
||||
{FORM_ITEM_USE, SPECIES_TORNADUS_THERIAN, ITEM_REVEAL_GLASS},
|
||||
{FORM_ITEM_USE, SPECIES_TORNADUS, ITEM_REVEAL_GLASS},
|
||||
{FORM_CHANGE_END},
|
||||
{FORM_CHANGE_ITEM_USE, SPECIES_TORNADUS_THERIAN, ITEM_REVEAL_GLASS},
|
||||
{FORM_CHANGE_ITEM_USE, SPECIES_TORNADUS, ITEM_REVEAL_GLASS},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sThundurusFormChangeTable[] = {
|
||||
{FORM_ITEM_USE, SPECIES_THUNDURUS_THERIAN, ITEM_REVEAL_GLASS},
|
||||
{FORM_ITEM_USE, SPECIES_THUNDURUS, ITEM_REVEAL_GLASS},
|
||||
{FORM_CHANGE_END},
|
||||
{FORM_CHANGE_ITEM_USE, SPECIES_THUNDURUS_THERIAN, ITEM_REVEAL_GLASS},
|
||||
{FORM_CHANGE_ITEM_USE, SPECIES_THUNDURUS, ITEM_REVEAL_GLASS},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sLandorusFormChangeTable[] = {
|
||||
{FORM_ITEM_USE, SPECIES_LANDORUS_THERIAN, ITEM_REVEAL_GLASS},
|
||||
{FORM_ITEM_USE, SPECIES_LANDORUS, ITEM_REVEAL_GLASS},
|
||||
{FORM_CHANGE_END},
|
||||
{FORM_CHANGE_ITEM_USE, SPECIES_LANDORUS_THERIAN, ITEM_REVEAL_GLASS},
|
||||
{FORM_CHANGE_ITEM_USE, SPECIES_LANDORUS, ITEM_REVEAL_GLASS},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sKeldeoFormChangeTable[] = {
|
||||
// {FORM_MOVE, SPECIES_KELDEO_RESOLUTE, MOVE_SECRET_SWORD, WHEN_LEARNED},
|
||||
// {FORM_MOVE, SPECIES_KELDEO, MOVE_SECRET_SWORD, WHEN_FORGOTTEN},
|
||||
{FORM_CHANGE_END},
|
||||
// {FORM_CHANGE_MOVE, SPECIES_KELDEO_RESOLUTE, MOVE_SECRET_SWORD, WHEN_LEARNED},
|
||||
// {FORM_CHANGE_MOVE, SPECIES_KELDEO, MOVE_SECRET_SWORD, WHEN_FORGOTTEN},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sGenesectFormChangeTable[] = {
|
||||
{FORM_ITEM_HOLD, SPECIES_GENESECT, ITEM_NONE},
|
||||
{FORM_ITEM_HOLD, SPECIES_GENESECT_DOUSE_DRIVE, ITEM_DOUSE_DRIVE},
|
||||
{FORM_ITEM_HOLD, SPECIES_GENESECT_SHOCK_DRIVE, ITEM_SHOCK_DRIVE},
|
||||
{FORM_ITEM_HOLD, SPECIES_GENESECT_BURN_DRIVE, ITEM_BURN_DRIVE},
|
||||
{FORM_ITEM_HOLD, SPECIES_GENESECT_CHILL_DRIVE, ITEM_CHILL_DRIVE},
|
||||
{FORM_CHANGE_END},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_GENESECT, ITEM_NONE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_GENESECT_DOUSE_DRIVE, ITEM_DOUSE_DRIVE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_GENESECT_SHOCK_DRIVE, ITEM_SHOCK_DRIVE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_GENESECT_BURN_DRIVE, ITEM_BURN_DRIVE},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_GENESECT_CHILL_DRIVE, ITEM_CHILL_DRIVE},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
#endif
|
||||
|
||||
#if P_GEN_6_POKEMON == TRUE
|
||||
static const struct FormChange sGreninjaBattleBondFormChangeTable[] = {
|
||||
{FORM_CHANGE_FAINT, SPECIES_GRENINJA_BATTLE_BOND},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_GRENINJA_BATTLE_BOND},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sAegislashFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_SWITCH, SPECIES_AEGISLASH},
|
||||
{FORM_CHANGE_FAINT, SPECIES_AEGISLASH},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_AEGISLASH},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sXerneasFormChangeTable[] = {
|
||||
{FORM_BATTLE_BEGIN, SPECIES_XERNEAS_ACTIVE},
|
||||
{FORM_BATTLE_END, SPECIES_XERNEAS, },
|
||||
{FORM_CHANGE_END},
|
||||
{FORM_CHANGE_BEGIN_BATTLE, SPECIES_XERNEAS_ACTIVE},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_XERNEAS, },
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sZygardePowerConstructFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_ZYGARDE_COMPLETE, ABILITY_POWER_CONSTRUCT, HP_LOWER_EQ_THAN, 50},
|
||||
{FORM_CHANGE_FAINT},
|
||||
{FORM_CHANGE_END_BATTLE},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sDiancieFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_DIANCIE_MEGA, ITEM_DIANCITE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_DIANCIE},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_DIANCIE},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sHoopaFormChangeTable[] = {
|
||||
{FORM_ITEM_USE, SPECIES_HOOPA_UNBOUND, ITEM_PRISON_BOTTLE, SPECIES_HOOPA},
|
||||
// {FORM_WITHDRAW, SPECIES_HOOPA},
|
||||
{FORM_CHANGE_END},
|
||||
{FORM_CHANGE_ITEM_USE, SPECIES_HOOPA_UNBOUND, ITEM_PRISON_BOTTLE, SPECIES_HOOPA},
|
||||
{FORM_CHANGE_WITHDRAW, SPECIES_HOOPA},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
#endif
|
||||
|
||||
#if P_GEN_7_POKEMON == TRUE
|
||||
static const struct FormChange sOricorioFormChangeTable[] = {
|
||||
{FORM_ITEM_USE, SPECIES_ORICORIO, ITEM_RED_NECTAR},
|
||||
{FORM_ITEM_USE, SPECIES_ORICORIO_POM_POM, ITEM_YELLOW_NECTAR},
|
||||
{FORM_ITEM_USE, SPECIES_ORICORIO_PAU, ITEM_PINK_NECTAR},
|
||||
{FORM_ITEM_USE, SPECIES_ORICORIO_SENSU, ITEM_PURPLE_NECTAR},
|
||||
{FORM_CHANGE_END},
|
||||
{FORM_CHANGE_ITEM_USE, SPECIES_ORICORIO, ITEM_RED_NECTAR},
|
||||
{FORM_CHANGE_ITEM_USE, SPECIES_ORICORIO_POM_POM, ITEM_YELLOW_NECTAR},
|
||||
{FORM_CHANGE_ITEM_USE, SPECIES_ORICORIO_PAU, ITEM_PINK_NECTAR},
|
||||
{FORM_CHANGE_ITEM_USE, SPECIES_ORICORIO_SENSU, ITEM_PURPLE_NECTAR},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
static const struct FormChange sWishiwashiFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_WISHIWASHI_SCHOOL, ABILITY_SCHOOLING, HP_HIGHER_THAN, 25},
|
||||
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_WISHIWASHI, ABILITY_SCHOOLING, HP_LOWER_EQ_THAN, 25},
|
||||
{FORM_CHANGE_BATTLE_SWITCH, SPECIES_WISHIWASHI},
|
||||
{FORM_CHANGE_FAINT, SPECIES_WISHIWASHI},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_WISHIWASHI},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sSilvallyFormChangeTable[] = {
|
||||
{FORM_ITEM_HOLD, SPECIES_SILVALLY, ITEM_NONE, ABILITY_RKS_SYSTEM},
|
||||
{FORM_ITEM_HOLD, SPECIES_SILVALLY_FIGHTING, ITEM_FIGHTING_MEMORY, ABILITY_RKS_SYSTEM},
|
||||
{FORM_ITEM_HOLD, SPECIES_SILVALLY_FLYING, ITEM_FLYING_MEMORY, ABILITY_RKS_SYSTEM},
|
||||
{FORM_ITEM_HOLD, SPECIES_SILVALLY_POISON, ITEM_POISON_MEMORY, ABILITY_RKS_SYSTEM},
|
||||
{FORM_ITEM_HOLD, SPECIES_SILVALLY_GROUND, ITEM_GROUND_MEMORY, ABILITY_RKS_SYSTEM},
|
||||
{FORM_ITEM_HOLD, SPECIES_SILVALLY_ROCK, ITEM_ROCK_MEMORY, ABILITY_RKS_SYSTEM},
|
||||
{FORM_ITEM_HOLD, SPECIES_SILVALLY_BUG, ITEM_BUG_MEMORY, ABILITY_RKS_SYSTEM},
|
||||
{FORM_ITEM_HOLD, SPECIES_SILVALLY_GHOST, ITEM_GHOST_MEMORY, ABILITY_RKS_SYSTEM},
|
||||
{FORM_ITEM_HOLD, SPECIES_SILVALLY_STEEL, ITEM_STEEL_MEMORY, ABILITY_RKS_SYSTEM},
|
||||
{FORM_ITEM_HOLD, SPECIES_SILVALLY_FIRE, ITEM_FIRE_MEMORY, ABILITY_RKS_SYSTEM},
|
||||
{FORM_ITEM_HOLD, SPECIES_SILVALLY_WATER, ITEM_WATER_MEMORY, ABILITY_RKS_SYSTEM},
|
||||
{FORM_ITEM_HOLD, SPECIES_SILVALLY_GRASS, ITEM_GRASS_MEMORY, ABILITY_RKS_SYSTEM},
|
||||
{FORM_ITEM_HOLD, SPECIES_SILVALLY_ELECTRIC, ITEM_ELECTRIC_MEMORY, ABILITY_RKS_SYSTEM},
|
||||
{FORM_ITEM_HOLD, SPECIES_SILVALLY_PSYCHIC, ITEM_PSYCHIC_MEMORY, ABILITY_RKS_SYSTEM},
|
||||
{FORM_ITEM_HOLD, SPECIES_SILVALLY_ICE, ITEM_ICE_MEMORY, ABILITY_RKS_SYSTEM},
|
||||
{FORM_ITEM_HOLD, SPECIES_SILVALLY_DRAGON, ITEM_DRAGON_MEMORY, ABILITY_RKS_SYSTEM},
|
||||
{FORM_ITEM_HOLD, SPECIES_SILVALLY_DARK, ITEM_DARK_MEMORY, ABILITY_RKS_SYSTEM},
|
||||
{FORM_ITEM_HOLD, SPECIES_SILVALLY_FAIRY, ITEM_FAIRY_MEMORY, ABILITY_RKS_SYSTEM},
|
||||
{FORM_CHANGE_END},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY, ITEM_NONE, ABILITY_RKS_SYSTEM},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_FIGHTING, ITEM_FIGHTING_MEMORY, ABILITY_RKS_SYSTEM},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_FLYING, ITEM_FLYING_MEMORY, ABILITY_RKS_SYSTEM},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_POISON, ITEM_POISON_MEMORY, ABILITY_RKS_SYSTEM},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_GROUND, ITEM_GROUND_MEMORY, ABILITY_RKS_SYSTEM},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_ROCK, ITEM_ROCK_MEMORY, ABILITY_RKS_SYSTEM},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_BUG, ITEM_BUG_MEMORY, ABILITY_RKS_SYSTEM},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_GHOST, ITEM_GHOST_MEMORY, ABILITY_RKS_SYSTEM},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_STEEL, ITEM_STEEL_MEMORY, ABILITY_RKS_SYSTEM},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_FIRE, ITEM_FIRE_MEMORY, ABILITY_RKS_SYSTEM},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_WATER, ITEM_WATER_MEMORY, ABILITY_RKS_SYSTEM},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_GRASS, ITEM_GRASS_MEMORY, ABILITY_RKS_SYSTEM},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_ELECTRIC, ITEM_ELECTRIC_MEMORY, ABILITY_RKS_SYSTEM},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_PSYCHIC, ITEM_PSYCHIC_MEMORY, ABILITY_RKS_SYSTEM},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_ICE, ITEM_ICE_MEMORY, ABILITY_RKS_SYSTEM},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_DRAGON, ITEM_DRAGON_MEMORY, ABILITY_RKS_SYSTEM},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_DARK, ITEM_DARK_MEMORY, ABILITY_RKS_SYSTEM},
|
||||
{FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_FAIRY, ITEM_FAIRY_MEMORY, ABILITY_RKS_SYSTEM},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sMimikyuFormChangeTable[] = {
|
||||
{FORM_CHANGE_FAINT, SPECIES_MIMIKYU},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_MIMIKYU},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sMiniorRedFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR, ABILITY_SHIELDS_DOWN, HP_HIGHER_THAN, 50},
|
||||
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_CORE_RED, ABILITY_SHIELDS_DOWN, HP_LOWER_EQ_THAN, 50},
|
||||
{FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_RED},
|
||||
{FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_RED},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_MINIOR_CORE_RED},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
static const struct FormChange sMiniorBlueFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_METEOR_BLUE, ABILITY_SHIELDS_DOWN, HP_HIGHER_THAN, 50},
|
||||
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_CORE_BLUE, ABILITY_SHIELDS_DOWN, HP_LOWER_EQ_THAN, 50},
|
||||
{FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_BLUE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_BLUE},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_MINIOR_CORE_BLUE},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
static const struct FormChange sMiniorGreenFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_METEOR_GREEN, ABILITY_SHIELDS_DOWN, HP_HIGHER_THAN, 50},
|
||||
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_CORE_GREEN, ABILITY_SHIELDS_DOWN, HP_LOWER_EQ_THAN, 50},
|
||||
{FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_GREEN},
|
||||
{FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_GREEN},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_MINIOR_CORE_GREEN},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
static const struct FormChange sMiniorIndigoFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_METEOR_INDIGO, ABILITY_SHIELDS_DOWN, HP_HIGHER_THAN, 50},
|
||||
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_CORE_INDIGO, ABILITY_SHIELDS_DOWN, HP_LOWER_EQ_THAN, 50},
|
||||
{FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_INDIGO},
|
||||
{FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_INDIGO},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_MINIOR_CORE_INDIGO},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
static const struct FormChange sMiniorOrangeFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_METEOR_ORANGE, ABILITY_SHIELDS_DOWN, HP_HIGHER_THAN, 50},
|
||||
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_CORE_ORANGE, ABILITY_SHIELDS_DOWN, HP_LOWER_EQ_THAN, 50},
|
||||
{FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_ORANGE},
|
||||
{FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_ORANGE},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_MINIOR_CORE_ORANGE},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
static const struct FormChange sMiniorVioletFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_METEOR_VIOLET, ABILITY_SHIELDS_DOWN, HP_HIGHER_THAN, 50},
|
||||
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_CORE_VIOLET, ABILITY_SHIELDS_DOWN, HP_LOWER_EQ_THAN, 50},
|
||||
{FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_VIOLET},
|
||||
{FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_VIOLET},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_MINIOR_CORE_VIOLET},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
static const struct FormChange sMiniorYellowFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_METEOR_YELLOW, ABILITY_SHIELDS_DOWN, HP_HIGHER_THAN, 50},
|
||||
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_CORE_YELLOW, ABILITY_SHIELDS_DOWN, HP_LOWER_EQ_THAN, 50},
|
||||
{FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_YELLOW},
|
||||
{FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_YELLOW},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_MINIOR_CORE_YELLOW},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
#endif
|
||||
|
||||
#if P_GEN_8_POKEMON == TRUE
|
||||
static const struct FormChange sCramorantFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_CRAMORANT_GULPING, ABILITY_GULP_MISSILE, HP_HIGHER_THAN, 50},
|
||||
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_CRAMORANT_GORGING, ABILITY_GULP_MISSILE, HP_LOWER_EQ_THAN, 50},
|
||||
{FORM_CHANGE_BATTLE_SWITCH, SPECIES_CRAMORANT},
|
||||
{FORM_CHANGE_FAINT, SPECIES_CRAMORANT},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_CRAMORANT},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sEiscueFormChangeTable[] = {
|
||||
{FORM_CHANGE_FAINT, SPECIES_EISCUE},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_EISCUE},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sMorpekoFormChangeTable[] = {
|
||||
{FORM_CHANGE_BATTLE_TURN_END, SPECIES_MORPEKO_HANGRY, ABILITY_HUNGER_SWITCH},
|
||||
{FORM_CHANGE_BATTLE_TURN_END, SPECIES_MORPEKO , ABILITY_HUNGER_SWITCH},
|
||||
{FORM_CHANGE_BATTLE_SWITCH, SPECIES_MORPEKO},
|
||||
{FORM_CHANGE_FAINT, SPECIES_MORPEKO},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_MORPEKO},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sZacianFormChangeTable[] = {
|
||||
{FORM_BATTLE_BEGIN, SPECIES_ZACIAN_CROWNED_SWORD, ITEM_RUSTED_SWORD, MOVE_IRON_HEAD, MOVE_BEHEMOTH_BLADE},
|
||||
{FORM_BATTLE_END, SPECIES_ZACIAN, ITEM_RUSTED_SWORD, MOVE_BEHEMOTH_BLADE, MOVE_IRON_HEAD},
|
||||
{FORM_CHANGE_END},
|
||||
{FORM_CHANGE_BEGIN_BATTLE, SPECIES_ZACIAN_CROWNED_SWORD, ITEM_RUSTED_SWORD, MOVE_IRON_HEAD, MOVE_BEHEMOTH_BLADE},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_ZACIAN, ITEM_RUSTED_SWORD, MOVE_BEHEMOTH_BLADE, MOVE_IRON_HEAD},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sZamazentaFormChangeTable[] = {
|
||||
{FORM_BATTLE_BEGIN, SPECIES_ZAMAZENTA_CROWNED_SHIELD, ITEM_RUSTED_SHIELD, MOVE_IRON_HEAD, MOVE_BEHEMOTH_BASH},
|
||||
{FORM_BATTLE_END, SPECIES_ZAMAZENTA, ITEM_RUSTED_SHIELD, MOVE_BEHEMOTH_BASH, MOVE_IRON_HEAD},
|
||||
{FORM_CHANGE_END},
|
||||
{FORM_CHANGE_BEGIN_BATTLE, SPECIES_ZAMAZENTA_CROWNED_SHIELD, ITEM_RUSTED_SHIELD, MOVE_IRON_HEAD, MOVE_BEHEMOTH_BASH},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_ZAMAZENTA, ITEM_RUSTED_SHIELD, MOVE_BEHEMOTH_BASH, MOVE_IRON_HEAD},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
static const struct FormChange sEnamorusFormChangeTable[] = {
|
||||
{FORM_ITEM_USE, SPECIES_ENAMORUS, ITEM_REVEAL_GLASS},
|
||||
{FORM_ITEM_USE, SPECIES_ENAMORUS_THERIAN, ITEM_REVEAL_GLASS},
|
||||
{FORM_CHANGE_END},
|
||||
{FORM_CHANGE_ITEM_USE, SPECIES_ENAMORUS, ITEM_REVEAL_GLASS},
|
||||
{FORM_CHANGE_ITEM_USE, SPECIES_ENAMORUS_THERIAN, ITEM_REVEAL_GLASS},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
// Gigantamax Forms
|
||||
#define GIGANTAMAX_FORM(species)\
|
||||
{ \
|
||||
{FORM_GIGANTAMAX, SPECIES_##species}, \
|
||||
{FORM_GIGANTAMAX, SPECIES_##species##_GMAX}, \
|
||||
{FORM_CHANGE_END} \
|
||||
#define GIGANTAMAX_FORM(species) \
|
||||
{ \
|
||||
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_##species##_GMAX}, \
|
||||
{FORM_CHANGE_FAINT, SPECIES_##species}, \
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_##species}, \
|
||||
{FORM_CHANGE_TERMINATOR}, \
|
||||
};
|
||||
|
||||
static const struct FormChange sVenusaurFormChangeTable[] = GIGANTAMAX_FORM(VENUSAUR)
|
||||
static const struct FormChange sCharizardFormChangeTable[] = GIGANTAMAX_FORM(CHARIZARD)
|
||||
static const struct FormChange sBlastoiseFormChangeTable[] = GIGANTAMAX_FORM(BLASTOISE)
|
||||
static const struct FormChange sButterfreeFormChangeTable[] = GIGANTAMAX_FORM(BUTTERFREE)
|
||||
static const struct FormChange sPikachuFormChangeTable[] = GIGANTAMAX_FORM(PIKACHU)
|
||||
static const struct FormChange sMeowthFormChangeTable[] = GIGANTAMAX_FORM(MEOWTH)
|
||||
static const struct FormChange sMachampFormChangeTable[] = GIGANTAMAX_FORM(MACHAMP)
|
||||
static const struct FormChange sGengarFormChangeTable[] = GIGANTAMAX_FORM(GENGAR)
|
||||
static const struct FormChange sKinglerFormChangeTable[] = GIGANTAMAX_FORM(KINGLER)
|
||||
static const struct FormChange sLaprasFormChangeTable[] = GIGANTAMAX_FORM(LAPRAS)
|
||||
static const struct FormChange sEeveeFormChangeTable[] = GIGANTAMAX_FORM(EEVEE)
|
||||
static const struct FormChange sSnorlaxFormChangeTable[] = GIGANTAMAX_FORM(SNORLAX)
|
||||
#if P_GEN_5_POKEMON == TRUE
|
||||
static const struct FormChange sGarbodorFormChangeTable[] = GIGANTAMAX_FORM(GARBODOR)
|
||||
#endif
|
||||
#if P_GEN_7_POKEMON == TRUE
|
||||
static const struct FormChange sMelmetalFormChangeTable[] = GIGANTAMAX_FORM(MELMETAL)
|
||||
#endif
|
||||
#if P_GEN_8_POKEMON == TRUE
|
||||
static const struct FormChange sRillaboomFormChangeTable[] = GIGANTAMAX_FORM(RILLABOOM)
|
||||
static const struct FormChange sCinderaceFormChangeTable[] = GIGANTAMAX_FORM(CINDERACE)
|
||||
static const struct FormChange sInteleonFormChangeTable[] = GIGANTAMAX_FORM(INTELEON)
|
||||
|
||||
@ -22270,7 +22270,7 @@ const struct SpeciesInfo gSpeciesInfo[] =
|
||||
.abilities = {ABILITY_PRIMORDIAL_SEA, ABILITY_PRIMORDIAL_SEA},
|
||||
.bodyColor = BODY_COLOR_BLUE,
|
||||
.noFlip = FALSE,
|
||||
.flags = SPECIES_FLAG_LEGENDARY,
|
||||
.flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_PRIMAL_REVERSION,
|
||||
},
|
||||
|
||||
[SPECIES_GROUDON_PRIMAL] =
|
||||
@ -22293,7 +22293,7 @@ const struct SpeciesInfo gSpeciesInfo[] =
|
||||
.abilities = {ABILITY_DESOLATE_LAND, ABILITY_DESOLATE_LAND},
|
||||
.bodyColor = BODY_COLOR_RED,
|
||||
.noFlip = FALSE,
|
||||
.flags = SPECIES_FLAG_LEGENDARY,
|
||||
.flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_PRIMAL_REVERSION,
|
||||
},
|
||||
|
||||
[SPECIES_RATTATA_ALOLAN] =
|
||||
|
||||
@ -20,6 +20,7 @@
|
||||
#include "list_menu.h"
|
||||
#include "overworld.h"
|
||||
#include "item.h"
|
||||
#include "constants/form_change_types.h"
|
||||
#include "constants/items.h"
|
||||
#include "constants/moves.h"
|
||||
#include "constants/region_map_sections.h"
|
||||
@ -255,8 +256,9 @@ static u16 TakeSelectedPokemonFromDaycare(struct DaycareMon *daycareMon)
|
||||
species = GetBoxMonData(&daycareMon->mon, MON_DATA_SPECIES);
|
||||
BoxMonToMon(&daycareMon->mon, &pokemon);
|
||||
|
||||
newSpecies = GetFormChangeTargetSpecies(&pokemon, FORM_WITHDRAW, 0);
|
||||
if (newSpecies != SPECIES_NONE) {
|
||||
newSpecies = GetFormChangeTargetSpecies(&pokemon, FORM_CHANGE_WITHDRAW, 0);
|
||||
if (newSpecies != SPECIES_NONE)
|
||||
{
|
||||
SetMonData(&pokemon, MON_DATA_SPECIES, &newSpecies);
|
||||
CalculateMonStats(&pokemon);
|
||||
species = newSpecies;
|
||||
|
||||
@ -15,6 +15,7 @@
|
||||
#include "task.h"
|
||||
#include "trainer_hill.h"
|
||||
#include "constants/field_poison.h"
|
||||
#include "constants/form_change_types.h"
|
||||
#include "constants/party_menu.h"
|
||||
|
||||
static bool32 IsMonValidSpecies(struct Pokemon *pokemon)
|
||||
@ -128,7 +129,10 @@ s32 DoPoisonFieldEffect(void)
|
||||
// Apply poison damage
|
||||
hp = GetMonData(pokemon, MON_DATA_HP);
|
||||
if (hp == 0 || --hp == 0)
|
||||
{
|
||||
TryFormChange(i, B_SIDE_PLAYER, FORM_CHANGE_FAINT);
|
||||
numFainted++;
|
||||
}
|
||||
|
||||
SetMonData(pokemon, MON_DATA_HP, &hp);
|
||||
numPoisoned++;
|
||||
|
||||
@ -66,6 +66,7 @@
|
||||
#include "constants/battle.h"
|
||||
#include "constants/battle_frontier.h"
|
||||
#include "constants/field_effects.h"
|
||||
#include "constants/form_change_types.h"
|
||||
#include "constants/item_effects.h"
|
||||
#include "constants/items.h"
|
||||
#include "constants/moves.h"
|
||||
@ -5616,7 +5617,7 @@ static void Task_TryItemUseFormChange(u8 taskId)
|
||||
bool32 TryItemUseFormChange(u8 taskId, TaskFunc task)
|
||||
{
|
||||
struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
|
||||
u16 targetSpecies = GetFormChangeTargetSpecies(mon, ItemId_GetSecondaryId(gSpecialVar_ItemId), gSpecialVar_ItemId);
|
||||
u16 targetSpecies = GetFormChangeTargetSpecies(mon, FORM_CHANGE_ITEM_USE, gSpecialVar_ItemId);
|
||||
|
||||
if (targetSpecies != SPECIES_NONE)
|
||||
{
|
||||
@ -5651,7 +5652,7 @@ void ItemUseCB_FormChange_ConsumedOnUse(u8 taskId, TaskFunc task)
|
||||
}
|
||||
void TryItemHoldFormChange(struct Pokemon *mon)
|
||||
{
|
||||
u16 targetSpecies = GetFormChangeTargetSpecies(mon, FORM_ITEM_HOLD, 0);
|
||||
u16 targetSpecies = GetFormChangeTargetSpecies(mon, FORM_CHANGE_ITEM_HOLD, 0);
|
||||
if (targetSpecies != SPECIES_NONE)
|
||||
{
|
||||
PlayCry_NormalNoDucking(targetSpecies, 0, CRY_VOLUME_RS, CRY_VOLUME_RS);
|
||||
|
||||
114
src/pokemon.c
114
src/pokemon.c
@ -42,6 +42,7 @@
|
||||
#include "constants/battle_frontier.h"
|
||||
#include "constants/battle_move_effects.h"
|
||||
#include "constants/battle_script_commands.h"
|
||||
#include "constants/form_change_types.h"
|
||||
#include "constants/hold_effects.h"
|
||||
#include "constants/item_effects.h"
|
||||
#include "constants/items.h"
|
||||
@ -4172,13 +4173,14 @@ void CalculateMonStats(struct Pokemon *mon)
|
||||
{
|
||||
if (currentHP == 0 && oldMaxHP == 0)
|
||||
currentHP = newMaxHP;
|
||||
else if (currentHP != 0) {
|
||||
// BUG: currentHP is unintentionally able to become <= 0 after the instruction below. This causes the pomeg berry glitch.
|
||||
currentHP += newMaxHP - oldMaxHP;
|
||||
#ifdef BUGFIX
|
||||
else if (currentHP != 0)
|
||||
{
|
||||
if (newMaxHP > oldMaxHP)
|
||||
currentHP += newMaxHP - oldMaxHP;
|
||||
if (currentHP <= 0)
|
||||
currentHP = 1;
|
||||
#endif
|
||||
if (currentHP > newMaxHP)
|
||||
currentHP = newMaxHP;
|
||||
}
|
||||
else
|
||||
return;
|
||||
@ -4269,6 +4271,17 @@ void SetMonMoveSlot(struct Pokemon *mon, u16 move, u8 slot)
|
||||
SetMonData(mon, MON_DATA_PP1 + slot, &gBattleMoves[move].pp);
|
||||
}
|
||||
|
||||
static void SetMonMoveSlot_KeepPP(struct Pokemon *mon, u16 move, u8 slot)
|
||||
{
|
||||
u8 ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES, NULL);
|
||||
u8 currPP = GetMonData(mon, MON_DATA_PP1 + slot, NULL);
|
||||
u8 newPP = CalculatePPWithBonus(move, ppBonuses, slot);
|
||||
u8 finalPP = min(currPP, newPP);
|
||||
|
||||
SetMonData(mon, MON_DATA_MOVE1 + slot, &move);
|
||||
SetMonData(mon, MON_DATA_PP1 + slot, &finalPP);
|
||||
}
|
||||
|
||||
void SetBattleMonMoveSlot(struct BattlePokemon *mon, u16 move, u8 slot)
|
||||
{
|
||||
mon->moves[slot] = move;
|
||||
@ -8540,18 +8553,18 @@ u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *boxMon, u16 method, u32
|
||||
heldItem = GetBoxMonData(boxMon, MON_DATA_HELD_ITEM, NULL);
|
||||
ability = GetAbilityBySpecies(species, GetBoxMonData(boxMon, MON_DATA_ABILITY_NUM, NULL));
|
||||
|
||||
for (i = 0; formChanges[i].method != FORM_CHANGE_END; i++)
|
||||
for (i = 0; formChanges[i].method != FORM_CHANGE_TERMINATOR; i++)
|
||||
{
|
||||
if (method == formChanges[i].method && species != formChanges[i].targetSpecies)
|
||||
{
|
||||
switch (method)
|
||||
{
|
||||
case FORM_ITEM_HOLD:
|
||||
case FORM_CHANGE_ITEM_HOLD:
|
||||
if ((heldItem == formChanges[i].param1 || formChanges[i].param1 == ITEM_NONE)
|
||||
&& (ability == formChanges[i].param2 || formChanges[i].param2 == ABILITY_NONE))
|
||||
targetSpecies = formChanges[i].targetSpecies;
|
||||
break;
|
||||
case FORM_ITEM_USE:
|
||||
case FORM_CHANGE_ITEM_USE:
|
||||
if (arg == formChanges[i].param1)
|
||||
{
|
||||
switch (formChanges[i].param2)
|
||||
@ -8572,14 +8585,23 @@ u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *boxMon, u16 method, u32
|
||||
}
|
||||
}
|
||||
break;
|
||||
case FORM_MOVE:
|
||||
case FORM_CHANGE_MOVE:
|
||||
if (BoxMonKnowsMove(boxMon, formChanges[i].param1) != formChanges[i].param2)
|
||||
targetSpecies = formChanges[i].targetSpecies;
|
||||
break;
|
||||
case FORM_BATTLE_BEGIN:
|
||||
case FORM_BATTLE_END:
|
||||
case FORM_CHANGE_BEGIN_BATTLE:
|
||||
case FORM_CHANGE_END_BATTLE:
|
||||
if (heldItem == formChanges[i].param1 || formChanges[i].param1 == ITEM_NONE)
|
||||
targetSpecies = formChanges[i].targetSpecies;
|
||||
break;
|
||||
case FORM_CHANGE_END_BATTLE_TERRAIN:
|
||||
if (gBattleTerrain == formChanges[i].param1)
|
||||
targetSpecies = formChanges[i].targetSpecies;
|
||||
break;
|
||||
case FORM_CHANGE_WITHDRAW:
|
||||
case FORM_CHANGE_FAINT:
|
||||
targetSpecies = formChanges[i].targetSpecies;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -8588,6 +8610,23 @@ u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *boxMon, u16 method, u32
|
||||
return targetSpecies;
|
||||
}
|
||||
|
||||
bool32 DoesSpeciesHaveFormChangeMethod(u16 species, u16 method)
|
||||
{
|
||||
u32 i, j;
|
||||
const struct FormChange *formChanges = gFormChangeTablePointers[species];
|
||||
|
||||
if (formChanges != NULL)
|
||||
{
|
||||
for (i = 0; formChanges[i].method != FORM_CHANGE_TERMINATOR; i++)
|
||||
{
|
||||
if (method == formChanges[i].method && species != formChanges[i].targetSpecies)
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
u16 MonTryLearningNewMoveEvolution(struct Pokemon *mon, bool8 firstMove)
|
||||
{
|
||||
u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL);
|
||||
@ -8670,20 +8709,48 @@ bool32 ShouldShowFemaleDifferences(u16 species, u32 personality)
|
||||
return (gSpeciesInfo[species].flags & SPECIES_FLAG_GENDER_DIFFERENCE) && GetGenderFromSpeciesAndPersonality(species, personality) == MON_FEMALE;
|
||||
}
|
||||
|
||||
void TryToSetBattleFormChangeMoves(struct Pokemon *mon)
|
||||
// Returns species that it transformed into. If it didn't, returns SPECIES_NONE.
|
||||
bool32 TryFormChange(u32 monId, u32 side, u16 method)
|
||||
{
|
||||
struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty;
|
||||
u16 targetSpecies;
|
||||
|
||||
if (GetMonData(&party[monId], MON_DATA_SPECIES_OR_EGG, 0) == SPECIES_NONE
|
||||
|| GetMonData(&party[monId], MON_DATA_SPECIES_OR_EGG, 0) == SPECIES_EGG)
|
||||
return FALSE;
|
||||
|
||||
targetSpecies = GetFormChangeTargetSpecies(&party[monId], method, 0);
|
||||
|
||||
if (targetSpecies == SPECIES_NONE)
|
||||
targetSpecies = gBattleStruct->changedSpecies[monId];
|
||||
|
||||
if (targetSpecies != SPECIES_NONE)
|
||||
{
|
||||
TryToSetBattleFormChangeMoves(&party[monId], method);
|
||||
SetMonData(&party[monId], MON_DATA_SPECIES, &targetSpecies);
|
||||
CalculateMonStats(&party[monId]);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void TryToSetBattleFormChangeMoves(struct Pokemon *mon, u16 method)
|
||||
{
|
||||
int i, j;
|
||||
u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL);
|
||||
const struct FormChange *formChanges = gFormChangeTablePointers[species];
|
||||
u8 ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES, NULL);
|
||||
|
||||
if (formChanges == NULL)
|
||||
if (formChanges == NULL
|
||||
|| (method != FORM_CHANGE_BEGIN_BATTLE && method != FORM_CHANGE_END_BATTLE))
|
||||
return;
|
||||
|
||||
for (i = 0; formChanges[i].method != FORM_CHANGE_END; i++)
|
||||
for (i = 0; formChanges[i].method != FORM_CHANGE_TERMINATOR; i++)
|
||||
{
|
||||
if ((formChanges[i].method == FORM_BATTLE_BEGIN || formChanges[i].method == FORM_BATTLE_END)
|
||||
&& formChanges[i].param2 && formChanges[i].param3 && formChanges[i].targetSpecies == species)
|
||||
if (formChanges[i].method == method
|
||||
&& formChanges[i].param2
|
||||
&& formChanges[i].param3
|
||||
&& formChanges[i].targetSpecies != species)
|
||||
{
|
||||
u16 originalMove = formChanges[i].param2;
|
||||
u16 newMove = formChanges[i].param3;
|
||||
@ -8691,20 +8758,9 @@ void TryToSetBattleFormChangeMoves(struct Pokemon *mon)
|
||||
for (j = 0; j < MAX_MON_MOVES; j++)
|
||||
{
|
||||
u16 currMove = GetMonData(mon, MON_DATA_MOVE1 + j, NULL);
|
||||
u8 totalPp = gBattleMoves[currMove].pp; // Get current move's max PP
|
||||
u8 currPp = GetMonData(mon, MON_DATA_PP1 + j, NULL); // Get current move's remaining PP
|
||||
u8 diffPp = totalPp - currPp; // Current move's PP difference
|
||||
u8 finalPp = gBattleMoves[newMove].pp - diffPp; // Apply the PP difference to the new move
|
||||
|
||||
if (currMove == originalMove)
|
||||
{
|
||||
if (finalPp > gBattleMoves[newMove].pp)
|
||||
finalPp = 0;
|
||||
SetMonMoveSlot(mon, newMove, j);
|
||||
SetMonData(mon, MON_DATA_PP1 + j, &finalPp);
|
||||
}
|
||||
SetMonMoveSlot_KeepPP(mon, newMove, j);
|
||||
}
|
||||
SetMonData(mon, MON_DATA_PP_BONUSES, &ppBonuses);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -36,6 +36,7 @@
|
||||
#include "trig.h"
|
||||
#include "walda_phrase.h"
|
||||
#include "window.h"
|
||||
#include "constants/form_change_types.h"
|
||||
#include "constants/items.h"
|
||||
#include "constants/moves.h"
|
||||
#include "constants/rgb.h"
|
||||
@ -6893,7 +6894,7 @@ static void ReshowDisplayMon(void)
|
||||
|
||||
void SetMonFormPSS(struct BoxPokemon *boxMon)
|
||||
{
|
||||
u16 targetSpecies = GetFormChangeTargetSpeciesBoxMon(boxMon, FORM_ITEM_HOLD, 0);
|
||||
u16 targetSpecies = GetFormChangeTargetSpeciesBoxMon(boxMon, FORM_CHANGE_ITEM_HOLD, 0);
|
||||
if (targetSpecies != SPECIES_NONE)
|
||||
{
|
||||
SetBoxMonData(boxMon, MON_DATA_SPECIES, &targetSpecies);
|
||||
|
||||
@ -72,7 +72,7 @@ u8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unused1, u32 unused2, u8 u
|
||||
SetMonData(&mon, MON_DATA_HELD_ITEM, heldItem);
|
||||
|
||||
// In case a mon with a form changing item is given. Eg: SPECIES_ARCEUS with ITEM_SPLASH_PLATE will transform into SPECIES_ARCEUS_WATER upon gifted.
|
||||
targetSpecies = GetFormChangeTargetSpecies(&mon, FORM_ITEM_HOLD, 0);
|
||||
targetSpecies = GetFormChangeTargetSpecies(&mon, FORM_CHANGE_ITEM_HOLD, 0);
|
||||
if (targetSpecies != SPECIES_NONE)
|
||||
{
|
||||
SetMonData(&mon, MON_DATA_SPECIES, &targetSpecies);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user