mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2024-12-27 04:04:17 +01:00
Mega Evolution after switching and based on speed
This commit is contained in:
parent
81a80e566c
commit
f6089a0057
@ -561,7 +561,7 @@ BattleScript_ShellTrapSetUp::
|
|||||||
playanimation BS_ATTACKER, B_ANIM_SHELL_TRAP_SETUP, NULL
|
playanimation BS_ATTACKER, B_ANIM_SHELL_TRAP_SETUP, NULL
|
||||||
printstring STRINGID_PREPARESHELLTRAP
|
printstring STRINGID_PREPARESHELLTRAP
|
||||||
waitmessage B_WAIT_TIME_LONG
|
waitmessage B_WAIT_TIME_LONG
|
||||||
end2
|
end3
|
||||||
|
|
||||||
BattleScript_EffectShellTrap::
|
BattleScript_EffectShellTrap::
|
||||||
attackcanceler
|
attackcanceler
|
||||||
@ -635,7 +635,7 @@ BattleScript_BeakBlastSetUp::
|
|||||||
playanimation BS_ATTACKER, B_ANIM_BEAK_BLAST_SETUP, NULL
|
playanimation BS_ATTACKER, B_ANIM_BEAK_BLAST_SETUP, NULL
|
||||||
printstring STRINGID_HEATUPBEAK
|
printstring STRINGID_HEATUPBEAK
|
||||||
waitmessage B_WAIT_TIME_LONG
|
waitmessage B_WAIT_TIME_LONG
|
||||||
end2
|
end3
|
||||||
|
|
||||||
BattleScript_BeakBlastBurn::
|
BattleScript_BeakBlastBurn::
|
||||||
setbyte cMULTISTRING_CHOOSER, 0
|
setbyte cMULTISTRING_CHOOSER, 0
|
||||||
@ -7825,7 +7825,7 @@ BattleScript_FocusPunchSetUp::
|
|||||||
playanimation BS_ATTACKER, B_ANIM_FOCUS_PUNCH_SETUP
|
playanimation BS_ATTACKER, B_ANIM_FOCUS_PUNCH_SETUP
|
||||||
printstring STRINGID_PKMNTIGHTENINGFOCUS
|
printstring STRINGID_PKMNTIGHTENINGFOCUS
|
||||||
waitmessage B_WAIT_TIME_LONG
|
waitmessage B_WAIT_TIME_LONG
|
||||||
end2
|
end3
|
||||||
|
|
||||||
BattleScript_MegaEvolution::
|
BattleScript_MegaEvolution::
|
||||||
printstring STRINGID_MEGAEVOREACTING
|
printstring STRINGID_MEGAEVOREACTING
|
||||||
@ -7840,7 +7840,7 @@ BattleScript_MegaEvolutionAfeterString:
|
|||||||
printstring STRINGID_MEGAEVOEVOLVED
|
printstring STRINGID_MEGAEVOEVOLVED
|
||||||
waitmessage B_WAIT_TIME_LONG
|
waitmessage B_WAIT_TIME_LONG
|
||||||
switchinabilities BS_ATTACKER
|
switchinabilities BS_ATTACKER
|
||||||
end2
|
end3
|
||||||
|
|
||||||
BattleScript_WishMegaEvolution::
|
BattleScript_WishMegaEvolution::
|
||||||
printstring STRINGID_FERVENTWISHREACHED
|
printstring STRINGID_FERVENTWISHREACHED
|
||||||
|
@ -55,6 +55,7 @@ Debug_FlagsNotSetMessage_Text:
|
|||||||
.string "'include/constants/overworld{UNDERSCORE}config.h'!$"
|
.string "'include/constants/overworld{UNDERSCORE}config.h'!$"
|
||||||
|
|
||||||
Debug_Script_1::
|
Debug_Script_1::
|
||||||
|
multi_fixed_2_vs_2 TRAINER_ROXANNE_2, Debug_FlagsNotSetMessage_Text, TRAINER_ROXANNE_3, Debug_FlagsNotSetMessage_Text, TRAINER_ROXANNE_4, 0
|
||||||
end
|
end
|
||||||
|
|
||||||
Debug_Script_2::
|
Debug_Script_2::
|
||||||
|
@ -535,7 +535,7 @@ struct BattleStruct
|
|||||||
u8 dynamicMoveType;
|
u8 dynamicMoveType;
|
||||||
u8 wrappedBy[MAX_BATTLERS_COUNT];
|
u8 wrappedBy[MAX_BATTLERS_COUNT];
|
||||||
u16 assistPossibleMoves[PARTY_SIZE * MAX_MON_MOVES]; // Each of mons can know max 4 moves.
|
u16 assistPossibleMoves[PARTY_SIZE * MAX_MON_MOVES]; // Each of mons can know max 4 moves.
|
||||||
u8 focusPunchBattlerId;
|
u8 focusPunchBattlers; // as bits
|
||||||
u8 battlerPreventingSwitchout;
|
u8 battlerPreventingSwitchout;
|
||||||
u8 moneyMultiplier:6;
|
u8 moneyMultiplier:6;
|
||||||
u8 moneyMultiplierItem:1;
|
u8 moneyMultiplierItem:1;
|
||||||
@ -656,6 +656,7 @@ struct BattleStruct
|
|||||||
u8 attackerBeforeBounce:2;
|
u8 attackerBeforeBounce:2;
|
||||||
u8 beatUpSlot:3;
|
u8 beatUpSlot:3;
|
||||||
bool8 hitSwitchTargetFailed:1;
|
bool8 hitSwitchTargetFailed:1;
|
||||||
|
bool8 effectsBeforeUsingMoveDone:1; // Mega Evo and Focus Punch/Shell Trap effects.
|
||||||
u8 targetsDone[MAX_BATTLERS_COUNT]; // Each battler as a bit.
|
u8 targetsDone[MAX_BATTLERS_COUNT]; // Each battler as a bit.
|
||||||
u16 overwrittenAbilities[MAX_BATTLERS_COUNT]; // abilities overwritten during battle (keep separate from battle history in case of switching)
|
u16 overwrittenAbilities[MAX_BATTLERS_COUNT]; // abilities overwritten during battle (keep separate from battle history in case of switching)
|
||||||
bool8 allowedToChangeFormInWeather[PARTY_SIZE][2]; // For each party member and side, used by Ice Face.
|
bool8 allowedToChangeFormInWeather[PARTY_SIZE][2]; // For each party member and side, used by Ice Face.
|
||||||
|
@ -195,7 +195,6 @@ bool32 IsHealBlockPreventingMove(u32 battler, u32 move);
|
|||||||
bool32 HasEnoughHpToEatBerry(u32 battlerId, u32 hpFraction, u32 itemId);
|
bool32 HasEnoughHpToEatBerry(u32 battlerId, u32 hpFraction, u32 itemId);
|
||||||
bool32 IsPartnerMonFromSameTrainer(u8 battlerId);
|
bool32 IsPartnerMonFromSameTrainer(u8 battlerId);
|
||||||
u8 GetSplitBasedOnStats(u8 battlerId);
|
u8 GetSplitBasedOnStats(u8 battlerId);
|
||||||
void SortBattlersBySpeed(u8 *battlers, bool8 slowToFast);
|
|
||||||
bool32 TestSheerForceFlag(u8 battler, u16 move);
|
bool32 TestSheerForceFlag(u8 battler, u16 move);
|
||||||
void TryRestoreStolenItems(void);
|
void TryRestoreStolenItems(void);
|
||||||
bool32 CanStealItem(u8 battlerStealing, u8 battlerItem, u16 item);
|
bool32 CanStealItem(u8 battlerStealing, u8 battlerItem, u16 item);
|
||||||
|
@ -4773,9 +4773,6 @@ static void SetActionsAndBattlersTurnOrder(void)
|
|||||||
turnOrderId++;
|
turnOrderId++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
gBattleMainFunc = CheckMegaEvolutionBeforeTurn;
|
|
||||||
gBattleStruct->mega.battlerId = 0;
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -4821,8 +4818,8 @@ static void SetActionsAndBattlersTurnOrder(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
gBattleMainFunc = CheckMegaEvolutionBeforeTurn;
|
gBattleMainFunc = CheckQuickClaw_CustapBerryActivation;
|
||||||
gBattleStruct->mega.battlerId = 0;
|
gBattleStruct->quickClawBattlerId = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void TurnValuesCleanUp(bool8 var0)
|
static void TurnValuesCleanUp(bool8 var0)
|
||||||
@ -4871,48 +4868,96 @@ void SpecialStatusesClear(void)
|
|||||||
memset(&gSpecialStatuses, 0, sizeof(gSpecialStatuses));
|
memset(&gSpecialStatuses, 0, sizeof(gSpecialStatuses));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void CheckMegaEvolutionBeforeTurn(void)
|
static void PopulateArrayWithBattlers(u8 *battlers)
|
||||||
{
|
{
|
||||||
if (!(gHitMarker & HITMARKER_RUN))
|
u32 i;
|
||||||
{
|
for (i = 0; i < gBattlersCount; i++)
|
||||||
while (gBattleStruct->mega.battlerId < gBattlersCount)
|
battlers[i] = i;
|
||||||
{
|
}
|
||||||
gActiveBattler = gBattlerAttacker = gBattleStruct->mega.battlerId;
|
|
||||||
gBattleStruct->mega.battlerId++;
|
|
||||||
if (gBattleStruct->mega.toEvolve & gBitTable[gActiveBattler]
|
|
||||||
&& !(gProtectStructs[gActiveBattler].noValidMoves))
|
|
||||||
{
|
|
||||||
struct Pokemon *mon = GetBattlerPartyData(gActiveBattler);
|
|
||||||
|
|
||||||
|
static bool32 TryDoMegaEvosBeforeMoves(void)
|
||||||
|
{
|
||||||
|
if (!(gHitMarker & HITMARKER_RUN) && gBattleStruct->mega.toEvolve)
|
||||||
|
{
|
||||||
|
u32 i;
|
||||||
|
struct Pokemon *mon;
|
||||||
|
u8 megaOrder[MAX_BATTLERS_COUNT];
|
||||||
|
|
||||||
|
PopulateArrayWithBattlers(megaOrder);
|
||||||
|
SortBattlersBySpeed(megaOrder, FALSE);
|
||||||
|
for (i = 0; i < gBattlersCount; i++)
|
||||||
|
{
|
||||||
|
if (gBattleStruct->mega.toEvolve & gBitTable[megaOrder[i]]
|
||||||
|
&& !(gProtectStructs[megaOrder[i]].noValidMoves))
|
||||||
|
{
|
||||||
|
gActiveBattler = gBattlerAttacker = megaOrder[i];
|
||||||
gBattleStruct->mega.toEvolve &= ~(gBitTable[gActiveBattler]);
|
gBattleStruct->mega.toEvolve &= ~(gBitTable[gActiveBattler]);
|
||||||
gLastUsedItem = gBattleMons[gActiveBattler].item;
|
gLastUsedItem = gBattleMons[gActiveBattler].item;
|
||||||
|
mon = GetBattlerPartyData(gActiveBattler);
|
||||||
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 (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)))
|
||||||
BattleScriptExecute(BattleScript_WishMegaEvolution);
|
BattleScriptExecute(BattleScript_WishMegaEvolution);
|
||||||
else
|
else
|
||||||
BattleScriptExecute(BattleScript_MegaEvolution);
|
BattleScriptExecute(BattleScript_MegaEvolution);
|
||||||
return;
|
return TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if B_MEGA_EVO_TURN_ORDER <= GEN_6
|
#if B_MEGA_EVO_TURN_ORDER >= GEN_7
|
||||||
gBattleMainFunc = CheckChosenMoveForEffectsBeforeTurnStarts;
|
TryChangeTurnOrder(); // This will just do nothing if no mon has mega evolved.
|
||||||
gBattleStruct->focusPunchBattlerId = 0;
|
|
||||||
#else
|
|
||||||
gBattleMainFunc = TryChangeTurnOrder; // This will just do nothing if no mon has mega evolved
|
|
||||||
#endif
|
#endif
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool32 TryDoMoveEffectsBeforeMoves(void)
|
||||||
|
{
|
||||||
|
if (!(gHitMarker & HITMARKER_RUN))
|
||||||
|
{
|
||||||
|
u32 i;
|
||||||
|
struct Pokemon *mon;
|
||||||
|
u8 battlers[MAX_BATTLERS_COUNT];
|
||||||
|
|
||||||
|
PopulateArrayWithBattlers(battlers);
|
||||||
|
SortBattlersBySpeed(battlers, FALSE);
|
||||||
|
for (i = 0; i < gBattlersCount; i++)
|
||||||
|
{
|
||||||
|
if (!(gBattleStruct->focusPunchBattlers & gBitTable[battlers[i]])
|
||||||
|
&& !(gBattleMons[battlers[i]].status1 & STATUS1_SLEEP)
|
||||||
|
&& !(gDisableStructs[battlers[i]].truantCounter)
|
||||||
|
&& !(gProtectStructs[battlers[i]].noValidMoves))
|
||||||
|
{
|
||||||
|
gBattleStruct->focusPunchBattlers |= gBitTable[battlers[i]];
|
||||||
|
gActiveBattler = gBattlerAttacker = battlers[i];
|
||||||
|
switch (gChosenMoveByBattler[gActiveBattler])
|
||||||
|
{
|
||||||
|
case MOVE_FOCUS_PUNCH:
|
||||||
|
BattleScriptExecute(BattleScript_FocusPunchSetUp);
|
||||||
|
return TRUE;
|
||||||
|
case MOVE_BEAK_BLAST:
|
||||||
|
BattleScriptExecute(BattleScript_BeakBlastSetUp);
|
||||||
|
return TRUE;
|
||||||
|
case MOVE_SHELL_TRAP:
|
||||||
|
BattleScriptExecute(BattleScript_ShellTrapSetUp);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// In gen7, priority and speed are recalculated during the turn in which a pokemon mega evolves
|
// In gen7, priority and speed are recalculated during the turn in which a pokemon mega evolves
|
||||||
static void TryChangeTurnOrder(void)
|
static void TryChangeTurnOrder(void)
|
||||||
{
|
{
|
||||||
s32 i, j;
|
u32 i, j;
|
||||||
for (i = 0; i < gBattlersCount - 1; i++)
|
for (i = 0; i < gBattlersCount - 1; i++)
|
||||||
{
|
{
|
||||||
for (j = i + 1; j < gBattlersCount; j++)
|
for (j = i + 1; j < gBattlersCount; j++)
|
||||||
{
|
{
|
||||||
u8 battler1 = gBattlerByTurnOrder[i];
|
u32 battler1 = gBattlerByTurnOrder[i];
|
||||||
u8 battler2 = gBattlerByTurnOrder[j];
|
u32 battler2 = gBattlerByTurnOrder[j];
|
||||||
|
|
||||||
if (gActionsByTurnOrder[i] == B_ACTION_USE_MOVE
|
if (gActionsByTurnOrder[i] == B_ACTION_USE_MOVE
|
||||||
&& gActionsByTurnOrder[j] == B_ACTION_USE_MOVE)
|
&& gActionsByTurnOrder[j] == B_ACTION_USE_MOVE)
|
||||||
{
|
{
|
||||||
@ -4921,42 +4966,6 @@ static void TryChangeTurnOrder(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
gBattleMainFunc = CheckChosenMoveForEffectsBeforeTurnStarts;
|
|
||||||
gBattleStruct->focusPunchBattlerId = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void CheckChosenMoveForEffectsBeforeTurnStarts(void)
|
|
||||||
{
|
|
||||||
u32 i;
|
|
||||||
|
|
||||||
if (!(gHitMarker & HITMARKER_RUN))
|
|
||||||
{
|
|
||||||
while (gBattleStruct->focusPunchBattlerId < gBattlersCount)
|
|
||||||
{
|
|
||||||
gActiveBattler = gBattlerAttacker = gBattleStruct->focusPunchBattlerId;
|
|
||||||
gBattleStruct->focusPunchBattlerId++;
|
|
||||||
if (!(gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP)
|
|
||||||
&& !(gDisableStructs[gBattlerAttacker].truantCounter)
|
|
||||||
&& !(gProtectStructs[gActiveBattler].noValidMoves))
|
|
||||||
{
|
|
||||||
switch (gChosenMoveByBattler[gActiveBattler])
|
|
||||||
{
|
|
||||||
case MOVE_FOCUS_PUNCH:
|
|
||||||
BattleScriptExecute(BattleScript_FocusPunchSetUp);
|
|
||||||
return;
|
|
||||||
case MOVE_BEAK_BLAST:
|
|
||||||
BattleScriptExecute(BattleScript_BeakBlastSetUp);
|
|
||||||
return;
|
|
||||||
case MOVE_SHELL_TRAP:
|
|
||||||
BattleScriptExecute(BattleScript_ShellTrapSetUp);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
gBattleMainFunc = CheckQuickClaw_CustapBerryActivation;
|
|
||||||
gBattleStruct->quickClawBattlerId = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void CheckQuickClaw_CustapBerryActivation(void)
|
static void CheckQuickClaw_CustapBerryActivation(void)
|
||||||
@ -5011,6 +5020,8 @@ static void CheckQuickClaw_CustapBerryActivation(void)
|
|||||||
gCurrentTurnActionNumber = 0;
|
gCurrentTurnActionNumber = 0;
|
||||||
gCurrentActionFuncId = gActionsByTurnOrder[0];
|
gCurrentActionFuncId = gActionsByTurnOrder[0];
|
||||||
gBattleStruct->dynamicMoveType = 0;
|
gBattleStruct->dynamicMoveType = 0;
|
||||||
|
gBattleStruct->effectsBeforeUsingMoveDone = FALSE;
|
||||||
|
gBattleStruct->focusPunchBattlers = 0;
|
||||||
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
|
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
|
||||||
{
|
{
|
||||||
gBattleStruct->ateBoost[i] = FALSE;
|
gBattleStruct->ateBoost[i] = FALSE;
|
||||||
@ -5029,6 +5040,16 @@ static void RunTurnActionsFunctions(void)
|
|||||||
if (gBattleOutcome != 0)
|
if (gBattleOutcome != 0)
|
||||||
gCurrentActionFuncId = B_ACTION_FINISHED;
|
gCurrentActionFuncId = B_ACTION_FINISHED;
|
||||||
|
|
||||||
|
// Mega Evolve / Focus Punch-like moves after switching, items, running, but before using a move.
|
||||||
|
if (gCurrentActionFuncId == B_ACTION_USE_MOVE && !gBattleStruct->effectsBeforeUsingMoveDone)
|
||||||
|
{
|
||||||
|
if (TryDoMegaEvosBeforeMoves())
|
||||||
|
return;
|
||||||
|
else if (TryDoMoveEffectsBeforeMoves())
|
||||||
|
return;
|
||||||
|
gBattleStruct->effectsBeforeUsingMoveDone = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
*(&gBattleStruct->savedTurnActionNumber) = gCurrentTurnActionNumber;
|
*(&gBattleStruct->savedTurnActionNumber) = gCurrentTurnActionNumber;
|
||||||
sTurnActionsFuncsTable[gCurrentActionFuncId]();
|
sTurnActionsFuncsTable[gCurrentActionFuncId]();
|
||||||
|
|
||||||
|
@ -1674,6 +1674,7 @@ void BattleScriptPushCursor(void)
|
|||||||
|
|
||||||
void BattleScriptPop(void)
|
void BattleScriptPop(void)
|
||||||
{
|
{
|
||||||
|
if (gBattleResources->battleScriptsStack->size != 0)
|
||||||
gBattlescriptCurrInstr = gBattleResources->battleScriptsStack->ptr[--gBattleResources->battleScriptsStack->size];
|
gBattlescriptCurrInstr = gBattleResources->battleScriptsStack->ptr[--gBattleResources->battleScriptsStack->size];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -10567,7 +10568,7 @@ bool32 IsEntrainmentTargetOrSimpleBeamBannedAbility(u16 ability)
|
|||||||
void SortBattlersBySpeed(u8 *battlers, bool8 slowToFast)
|
void SortBattlersBySpeed(u8 *battlers, bool8 slowToFast)
|
||||||
{
|
{
|
||||||
int i, j, currSpeed, currBattler;
|
int i, j, currSpeed, currBattler;
|
||||||
u16 speeds[4] = {0};
|
u16 speeds[MAX_BATTLERS_COUNT] = {0};
|
||||||
|
|
||||||
for (i = 0; i < gBattlersCount; i++)
|
for (i = 0; i < gBattlersCount; i++)
|
||||||
speeds[i] = GetBattlerTotalSpeedStat(battlers[i]);
|
speeds[i] = GetBattlerTotalSpeedStat(battlers[i]);
|
||||||
|
@ -10301,9 +10301,9 @@ static const struct TrainerMonNoItemDefaultMoves sParty_MayRustboroTorchic[] = {
|
|||||||
static const struct TrainerMonItemCustomMoves sParty_Roxanne2[] = {
|
static const struct TrainerMonItemCustomMoves sParty_Roxanne2[] = {
|
||||||
{
|
{
|
||||||
.iv = 255,
|
.iv = 255,
|
||||||
.lvl = 32,
|
.lvl = 5,
|
||||||
.species = SPECIES_GOLEM,
|
.species = SPECIES_AMPHAROS,
|
||||||
.heldItem = ITEM_NONE,
|
.heldItem = ITEM_AMPHAROSITE,
|
||||||
.moves = {MOVE_PROTECT, MOVE_ROLLOUT, MOVE_MAGNITUDE, MOVE_EXPLOSION}
|
.moves = {MOVE_PROTECT, MOVE_ROLLOUT, MOVE_MAGNITUDE, MOVE_EXPLOSION}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -10333,8 +10333,8 @@ static const struct TrainerMonItemCustomMoves sParty_Roxanne3[] = {
|
|||||||
{
|
{
|
||||||
.iv = 255,
|
.iv = 255,
|
||||||
.lvl = 37,
|
.lvl = 37,
|
||||||
.species = SPECIES_OMANYTE,
|
.species = SPECIES_MANECTRIC,
|
||||||
.heldItem = ITEM_NONE,
|
.heldItem = ITEM_MANECTITE,
|
||||||
.moves = {MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, MOVE_SURF}
|
.moves = {MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, MOVE_SURF}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -10370,9 +10370,9 @@ static const struct TrainerMonItemCustomMoves sParty_Roxanne3[] = {
|
|||||||
static const struct TrainerMonItemCustomMoves sParty_Roxanne4[] = {
|
static const struct TrainerMonItemCustomMoves sParty_Roxanne4[] = {
|
||||||
{
|
{
|
||||||
.iv = 255,
|
.iv = 255,
|
||||||
.lvl = 42,
|
.lvl = 100,
|
||||||
.species = SPECIES_OMASTAR,
|
.species = SPECIES_GARDEVOIR,
|
||||||
.heldItem = ITEM_NONE,
|
.heldItem = ITEM_GARDEVOIRITE,
|
||||||
.moves = {MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, MOVE_SURF}
|
.moves = {MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, MOVE_SURF}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -17,6 +17,44 @@ SINGLE_BATTLE_TEST("Venusaur can Mega Evolve holding Venusaurite")
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DOUBLE_BATTLE_TEST("Mega Evolution's order is determined by Speed - opponent faster")
|
||||||
|
{
|
||||||
|
GIVEN {
|
||||||
|
PLAYER(SPECIES_VENUSAUR) { Item(ITEM_VENUSAURITE); Speed(1); }
|
||||||
|
PLAYER(SPECIES_WOBBUFFET) { Speed(3);}
|
||||||
|
OPPONENT(SPECIES_GARDEVOIR) { Item(ITEM_GARDEVOIRITE); Speed(3);}
|
||||||
|
OPPONENT(SPECIES_WOBBUFFET) { Speed(4);}
|
||||||
|
} WHEN {
|
||||||
|
TURN { MOVE(opponentLeft, MOVE_CELEBRATE, megaEvolve: TRUE); MOVE(playerLeft, MOVE_CELEBRATE, megaEvolve: TRUE); }
|
||||||
|
} SCENE {
|
||||||
|
MESSAGE("Foe Gardevoir's Gardevoirite is reacting to 's Mega Ring!");
|
||||||
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponentLeft);
|
||||||
|
MESSAGE("Foe Gardevoir has Mega Evolved into Mega Gardevoir!");
|
||||||
|
MESSAGE("Venusaur's Venusaurite is reacting to 1's Mega Ring!");
|
||||||
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, playerLeft);
|
||||||
|
MESSAGE("Venusaur has Mega Evolved into Mega Venusaur!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DOUBLE_BATTLE_TEST("Mega Evolution's order is determined by Speed - player faster")
|
||||||
|
{
|
||||||
|
GIVEN {
|
||||||
|
PLAYER(SPECIES_VENUSAUR) { Item(ITEM_VENUSAURITE); Speed(5); }
|
||||||
|
PLAYER(SPECIES_WOBBUFFET) { Speed(3);}
|
||||||
|
OPPONENT(SPECIES_GARDEVOIR) { Item(ITEM_GARDEVOIRITE); Speed(2);}
|
||||||
|
OPPONENT(SPECIES_WOBBUFFET) { Speed(4);}
|
||||||
|
} WHEN {
|
||||||
|
TURN { MOVE(opponentLeft, MOVE_CELEBRATE, megaEvolve: TRUE); MOVE(playerLeft, MOVE_CELEBRATE, megaEvolve: TRUE); }
|
||||||
|
} SCENE {
|
||||||
|
MESSAGE("Venusaur's Venusaurite is reacting to 1's Mega Ring!");
|
||||||
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, playerLeft);
|
||||||
|
MESSAGE("Venusaur has Mega Evolved into Mega Venusaur!");
|
||||||
|
MESSAGE("Foe Gardevoir's Gardevoirite is reacting to 's Mega Ring!");
|
||||||
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponentLeft);
|
||||||
|
MESSAGE("Foe Gardevoir has Mega Evolved into Mega Gardevoir!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
SINGLE_BATTLE_TEST("Rayquaza can Mega Evolve knowing Dragon Ascent")
|
SINGLE_BATTLE_TEST("Rayquaza can Mega Evolve knowing Dragon Ascent")
|
||||||
{
|
{
|
||||||
GIVEN {
|
GIVEN {
|
||||||
|
Loading…
Reference in New Issue
Block a user