Refactors argument into a union (#5853)
Co-authored-by: Eduardo Quezada <eduardo602002@gmail.com>
This commit is contained in:
parent
caa35be7e7
commit
8edf14423a
@ -116,7 +116,7 @@ bool32 HasOnlyMovesWithCategory(u32 battlerId, u32 category, bool32 onlyOffensiv
|
||||
bool32 HasMoveWithCategory(u32 battler, u32 category);
|
||||
bool32 HasMoveWithType(u32 battler, u32 type);
|
||||
bool32 HasMoveEffect(u32 battlerId, u32 moveEffect);
|
||||
bool32 HasMoveEffectANDArg(u32 battlerId, u32 effect, u32 argument);
|
||||
bool32 IsPowerBasedOnStatus(u32 battlerId, u32 effect, u32 argument);
|
||||
bool32 HasMoveWithAdditionalEffect(u32 battlerId, u32 moveEffect);
|
||||
bool32 HasMoveWithCriticalHitChance(u32 battlerId);
|
||||
bool32 HasMoveWithMoveEffectExcept(u32 battlerId, u32 moveEffect, u32 exception);
|
||||
|
||||
@ -297,7 +297,7 @@ bool32 IsGen6ExpShareEnabled(void);
|
||||
bool32 MoveHasAdditionalEffect(u32 move, u32 moveEffect);
|
||||
bool32 MoveHasAdditionalEffectWithChance(u32 move, u32 moveEffect, u32 chance);
|
||||
bool32 MoveHasAdditionalEffectSelf(u32 move, u32 moveEffect);
|
||||
bool32 MoveHasAdditionalEffectSelfArg(u32 move, u32 moveEffect, u32 argument);
|
||||
bool32 IsMoveEffectRemoveSpeciesType(u32 move, u32 moveEffect, u32 argument);
|
||||
bool32 MoveHasChargeTurnAdditionalEffect(u32 move);
|
||||
bool32 CanTargetPartner(u32 battlerAtk, u32 battlerDef);
|
||||
bool32 TargetFullyImmuneToCurrMove(u32 battlerAtk, u32 battlerDef);
|
||||
|
||||
@ -495,6 +495,24 @@ struct MoveInfo
|
||||
u8 powerOverride;
|
||||
} zMove;
|
||||
|
||||
union {
|
||||
struct {
|
||||
u16 stringId;
|
||||
u16 status;
|
||||
} twoTurnAttack;
|
||||
struct {
|
||||
u16 side;
|
||||
u16 property; // can be used to remove the hardcoded values
|
||||
} protect;
|
||||
u32 status;
|
||||
u16 moveProperty;
|
||||
u16 holdEffect;
|
||||
u16 type;
|
||||
u16 fixedDamage;
|
||||
u16 absorbPercentage;
|
||||
u16 maxEffect;
|
||||
} argument;
|
||||
|
||||
s32 priority:4;
|
||||
u32 recoil:7;
|
||||
u32 strikeCount:4; // Max 15 hits. Defaults to 1 if not set. May apply its effect on each hit.
|
||||
@ -548,8 +566,6 @@ struct MoveInfo
|
||||
u32 sketchBanned:1;
|
||||
u32 padding:5; // end of word
|
||||
|
||||
u32 argument;
|
||||
|
||||
// primary/secondary effects
|
||||
const struct AdditionalEffect *additionalEffects;
|
||||
|
||||
|
||||
@ -4327,7 +4327,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
|
||||
ADJUST_SCORE(DECENT_EFFECT);
|
||||
break;
|
||||
case EFFECT_SOAK:
|
||||
if (HasMoveWithType(battlerAtk, TYPE_ELECTRIC) || HasMoveWithType(battlerAtk, TYPE_GRASS) || (HasMoveEffect(battlerAtk, EFFECT_SUPER_EFFECTIVE_ON_ARG) && gMovesInfo[move].argument == TYPE_WATER) )
|
||||
if (HasMoveWithType(battlerAtk, TYPE_ELECTRIC) || HasMoveWithType(battlerAtk, TYPE_GRASS) || (HasMoveEffect(battlerAtk, EFFECT_SUPER_EFFECTIVE_ON_ARG) && gMovesInfo[move].argument.type == TYPE_WATER) )
|
||||
ADJUST_SCORE(DECENT_EFFECT); // Get some super effective moves
|
||||
break;
|
||||
case EFFECT_THIRD_TYPE:
|
||||
|
||||
@ -470,11 +470,11 @@ bool32 IsDamageMoveUnusable(u32 battlerAtk, u32 battlerDef, u32 move, u32 moveTy
|
||||
return TRUE;
|
||||
break;
|
||||
case EFFECT_FAIL_IF_NOT_ARG_TYPE:
|
||||
if (!IS_BATTLER_OF_TYPE(battlerAtk, gMovesInfo[move].argument))
|
||||
if (!IS_BATTLER_OF_TYPE(battlerAtk, gMovesInfo[move].argument.type))
|
||||
return TRUE;
|
||||
break;
|
||||
case EFFECT_HIT_SET_REMOVE_TERRAIN:
|
||||
if (!(gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) && gMovesInfo[move].argument == ARG_TRY_REMOVE_TERRAIN_FAIL)
|
||||
if (!(gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) && gMovesInfo[move].argument.moveProperty == ARG_TRY_REMOVE_TERRAIN_FAIL)
|
||||
return TRUE;
|
||||
break;
|
||||
case EFFECT_POLTERGEIST:
|
||||
@ -566,7 +566,7 @@ static inline void CalcDynamicMoveDamage(struct DamageCalculationData *damageCal
|
||||
expected = minimum = gBattleMons[damageCalcData->battlerAtk].level * (abilityAtk == ABILITY_PARENTAL_BOND ? 2 : 1);
|
||||
break;
|
||||
case EFFECT_FIXED_DAMAGE_ARG:
|
||||
expected = minimum = gMovesInfo[move].argument * (abilityAtk == ABILITY_PARENTAL_BOND ? 2 : 1);
|
||||
expected = minimum = gMovesInfo[move].argument.fixedDamage * (abilityAtk == ABILITY_PARENTAL_BOND ? 2 : 1);
|
||||
break;
|
||||
case EFFECT_MULTI_HIT:
|
||||
if (move == MOVE_WATER_SHURIKEN && gBattleMons[damageCalcData->battlerAtk].species == SPECIES_GRENINJA_ASH)
|
||||
@ -2027,7 +2027,7 @@ bool32 HasMoveEffect(u32 battlerId, u32 effect)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool32 HasMoveEffectANDArg(u32 battlerId, u32 effect, u32 argument)
|
||||
bool32 IsPowerBasedOnStatus(u32 battlerId, u32 effect, u32 argument)
|
||||
{
|
||||
s32 i;
|
||||
u16 *moves = GetMovesArray(battlerId);
|
||||
@ -2036,7 +2036,7 @@ bool32 HasMoveEffectANDArg(u32 battlerId, u32 effect, u32 argument)
|
||||
{
|
||||
if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE
|
||||
&& gMovesInfo[moves[i]].effect == effect
|
||||
&& (gMovesInfo[moves[i]].argument & argument))
|
||||
&& (gMovesInfo[moves[i]].argument.status & argument))
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -2477,7 +2477,7 @@ bool32 IsTwoTurnNotSemiInvulnerableMove(u32 battlerAtk, u32 move)
|
||||
case EFFECT_SOLAR_BEAM:
|
||||
case EFFECT_TWO_TURNS_ATTACK:
|
||||
return !(AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_POWER_HERB
|
||||
|| (AI_GetWeather(AI_DATA) & gMovesInfo[move].argument));
|
||||
|| (AI_GetWeather(AI_DATA) & gMovesInfo[move].argument.twoTurnAttack.status));
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
@ -3229,7 +3229,7 @@ bool32 ShouldAbsorb(u32 battlerAtk, u32 battlerDef, u32 move, s32 damage)
|
||||
if (move == 0xFFFF || AI_IsFaster(battlerAtk, battlerDef, move))
|
||||
{
|
||||
// using item or user goes first
|
||||
u32 healPercent = (gMovesInfo[move].argument == 0) ? 50 : gMovesInfo[move].argument;
|
||||
u32 healPercent = (gMovesInfo[move].argument.absorbPercentage == 0) ? 50 : gMovesInfo[move].argument.absorbPercentage;
|
||||
s32 healDmg = (healPercent * damage) / 100;
|
||||
|
||||
if (gStatuses3[battlerAtk] & STATUS3_HEAL_BLOCK)
|
||||
@ -3847,7 +3847,7 @@ void IncreasePoisonScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score)
|
||||
if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_STALL && HasMoveEffect(battlerAtk, EFFECT_PROTECT))
|
||||
ADJUST_SCORE_PTR(WEAK_EFFECT); // stall tactic
|
||||
|
||||
if (HasMoveEffectANDArg(battlerAtk, EFFECT_DOUBLE_POWER_ON_ARG_STATUS, STATUS1_PSN_ANY)
|
||||
if (IsPowerBasedOnStatus(battlerAtk, EFFECT_DOUBLE_POWER_ON_ARG_STATUS, STATUS1_PSN_ANY)
|
||||
|| HasMoveEffect(battlerAtk, EFFECT_VENOM_DRENCH)
|
||||
|| AI_DATA->abilities[battlerAtk] == ABILITY_MERCILESS)
|
||||
ADJUST_SCORE_PTR(DECENT_EFFECT);
|
||||
@ -3874,8 +3874,8 @@ void IncreaseBurnScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score)
|
||||
ADJUST_SCORE_PTR(WEAK_EFFECT);
|
||||
}
|
||||
|
||||
if (HasMoveEffectANDArg(battlerAtk, EFFECT_DOUBLE_POWER_ON_ARG_STATUS, STATUS1_BURN)
|
||||
|| HasMoveEffectANDArg(BATTLE_PARTNER(battlerAtk), EFFECT_DOUBLE_POWER_ON_ARG_STATUS, STATUS1_BURN))
|
||||
if (IsPowerBasedOnStatus(battlerAtk, EFFECT_DOUBLE_POWER_ON_ARG_STATUS, STATUS1_BURN)
|
||||
|| IsPowerBasedOnStatus(BATTLE_PARTNER(battlerAtk), EFFECT_DOUBLE_POWER_ON_ARG_STATUS, STATUS1_BURN))
|
||||
ADJUST_SCORE_PTR(WEAK_EFFECT);
|
||||
}
|
||||
}
|
||||
@ -3892,7 +3892,7 @@ void IncreaseParalyzeScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score)
|
||||
u32 defSpeed = AI_DATA->speedStats[battlerDef];
|
||||
|
||||
if ((defSpeed >= atkSpeed && defSpeed / 2 < atkSpeed) // You'll go first after paralyzing foe
|
||||
|| HasMoveEffectANDArg(battlerAtk, EFFECT_DOUBLE_POWER_ON_ARG_STATUS, STATUS1_PARALYSIS)
|
||||
|| IsPowerBasedOnStatus(battlerAtk, EFFECT_DOUBLE_POWER_ON_ARG_STATUS, STATUS1_PARALYSIS)
|
||||
|| (HasMoveWithMoveEffectExcept(battlerAtk, MOVE_EFFECT_FLINCH, EFFECT_FIRST_TURN_ONLY)) // filter out Fake Out
|
||||
|| gBattleMons[battlerDef].status2 & STATUS2_INFATUATION
|
||||
|| gBattleMons[battlerDef].status2 & STATUS2_CONFUSION)
|
||||
@ -3917,8 +3917,8 @@ void IncreaseSleepScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score)
|
||||
&& !(HasMoveEffect(battlerDef, EFFECT_SNORE) || HasMoveEffect(battlerDef, EFFECT_SLEEP_TALK)))
|
||||
ADJUST_SCORE_PTR(WEAK_EFFECT);
|
||||
|
||||
if (HasMoveEffectANDArg(battlerAtk, EFFECT_DOUBLE_POWER_ON_ARG_STATUS, STATUS1_SLEEP)
|
||||
|| HasMoveEffectANDArg(BATTLE_PARTNER(battlerAtk), EFFECT_DOUBLE_POWER_ON_ARG_STATUS, STATUS1_SLEEP))
|
||||
if (IsPowerBasedOnStatus(battlerAtk, EFFECT_DOUBLE_POWER_ON_ARG_STATUS, STATUS1_SLEEP)
|
||||
|| IsPowerBasedOnStatus(BATTLE_PARTNER(battlerAtk), EFFECT_DOUBLE_POWER_ON_ARG_STATUS, STATUS1_SLEEP))
|
||||
ADJUST_SCORE_PTR(WEAK_EFFECT);
|
||||
}
|
||||
|
||||
@ -3958,8 +3958,8 @@ void IncreaseFrostbiteScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score
|
||||
ADJUST_SCORE_PTR(WEAK_EFFECT);
|
||||
}
|
||||
|
||||
if (HasMoveEffectANDArg(battlerAtk, EFFECT_DOUBLE_POWER_ON_ARG_STATUS, STATUS1_FROSTBITE)
|
||||
|| HasMoveEffectANDArg(BATTLE_PARTNER(battlerAtk), EFFECT_DOUBLE_POWER_ON_ARG_STATUS, STATUS1_FROSTBITE))
|
||||
if (IsPowerBasedOnStatus(battlerAtk, EFFECT_DOUBLE_POWER_ON_ARG_STATUS, STATUS1_FROSTBITE)
|
||||
|| IsPowerBasedOnStatus(BATTLE_PARTNER(battlerAtk), EFFECT_DOUBLE_POWER_ON_ARG_STATUS, STATUS1_FROSTBITE))
|
||||
ADJUST_SCORE_PTR(WEAK_EFFECT);
|
||||
}
|
||||
}
|
||||
|
||||
@ -9244,7 +9244,7 @@ void AnimTask_DynamaxGrowth(u8 taskId) // from CFRU
|
||||
|
||||
void AnimTask_GetWeatherToSet(u8 taskId)
|
||||
{
|
||||
switch (gMovesInfo[gCurrentMove].argument)
|
||||
switch (gMovesInfo[gCurrentMove].argument.maxEffect)
|
||||
{
|
||||
case MAX_EFFECT_SUN:
|
||||
gBattleAnimArgs[ARG_RET_ID] = 1;
|
||||
|
||||
@ -320,7 +320,7 @@ u8 GetMaxMovePower(u32 move)
|
||||
{
|
||||
u8 tier;
|
||||
// G-Max Drum Solo, G-Max Hydrosnipe, and G-Max Fireball always have 160 base power.
|
||||
if (gMovesInfo[GetMaxMove(gBattlerAttacker, move)].argument == MAX_EFFECT_FIXED_POWER)
|
||||
if (gMovesInfo[GetMaxMove(gBattlerAttacker, move)].argument.maxEffect == MAX_EFFECT_FIXED_POWER)
|
||||
return 160;
|
||||
|
||||
// Exceptions to all other rules below:
|
||||
@ -470,7 +470,7 @@ void ChooseDamageNonTypesString(u8 type)
|
||||
// Returns the status effect that should be applied by a G-Max Move.
|
||||
static u32 GetMaxMoveStatusEffect(u32 move)
|
||||
{
|
||||
u8 maxEffect = gMovesInfo[move].argument;
|
||||
u8 maxEffect = gMovesInfo[move].argument.maxEffect;
|
||||
switch (maxEffect)
|
||||
{
|
||||
// Status 1
|
||||
@ -522,7 +522,7 @@ void BS_SetMaxMoveEffect(void)
|
||||
{
|
||||
NATIVE_ARGS();
|
||||
u16 effect = 0;
|
||||
u8 maxEffect = gMovesInfo[gCurrentMove].argument;
|
||||
u8 maxEffect = gMovesInfo[gCurrentMove].argument.maxEffect;
|
||||
|
||||
// Don't continue if the move didn't land.
|
||||
if (gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)
|
||||
@ -541,7 +541,7 @@ void BS_SetMaxMoveEffect(void)
|
||||
if (!NoAliveMonsForEitherParty())
|
||||
{
|
||||
// Max Effects are ordered by stat ID.
|
||||
SET_STATCHANGER(gMovesInfo[gCurrentMove].argument, 1, FALSE);
|
||||
SET_STATCHANGER(gMovesInfo[gCurrentMove].argument.maxEffect, 1, FALSE);
|
||||
BattleScriptPush(gBattlescriptCurrInstr + 1);
|
||||
gBattlescriptCurrInstr = BattleScript_EffectRaiseStatAllies;
|
||||
effect++;
|
||||
@ -569,7 +569,7 @@ void BS_SetMaxMoveEffect(void)
|
||||
break;
|
||||
default:
|
||||
// Max Effects are ordered by stat ID.
|
||||
statId = gMovesInfo[gCurrentMove].argument - MAX_EFFECT_LOWER_ATTACK + 1;
|
||||
statId = gMovesInfo[gCurrentMove].argument.maxEffect - MAX_EFFECT_LOWER_ATTACK + 1;
|
||||
break;
|
||||
}
|
||||
SET_STATCHANGER(statId, stage, TRUE);
|
||||
@ -618,7 +618,7 @@ void BS_SetMaxMoveEffect(void)
|
||||
case MAX_EFFECT_PSYCHIC_TERRAIN:
|
||||
{
|
||||
u32 statusFlag = 0;
|
||||
switch (gMovesInfo[gCurrentMove].argument)
|
||||
switch (gMovesInfo[gCurrentMove].argument.moveProperty)
|
||||
{
|
||||
case MAX_EFFECT_MISTY_TERRAIN:
|
||||
statusFlag = STATUS_FIELD_MISTY_TERRAIN;
|
||||
|
||||
@ -5957,7 +5957,7 @@ u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, u8 *ateBoost)
|
||||
}
|
||||
break;
|
||||
case EFFECT_CHANGE_TYPE_ON_ITEM:
|
||||
if (holdEffect == gMovesInfo[move].argument)
|
||||
if (holdEffect == gMovesInfo[move].argument.holdEffect)
|
||||
return ItemId_GetSecondaryId(heldItem);
|
||||
break;
|
||||
case EFFECT_REVELATION_DANCE:
|
||||
|
||||
@ -4070,7 +4070,7 @@ void SetMoveEffect(bool32 primary, bool32 certain)
|
||||
case MOVE_EFFECT_REMOVE_ARG_TYPE:
|
||||
// This seems unnecessary but is done to make it work properly with Parental Bond
|
||||
BattleScriptPush(gBattlescriptCurrInstr + 1);
|
||||
switch (gMovesInfo[gCurrentMove].argument)
|
||||
switch (gMovesInfo[gCurrentMove].argument.type)
|
||||
{
|
||||
case TYPE_FIRE: // Burn Up
|
||||
gBattlescriptCurrInstr = BattleScript_RemoveFireType;
|
||||
@ -4082,7 +4082,7 @@ void SetMoveEffect(bool32 primary, bool32 certain)
|
||||
gBattlescriptCurrInstr = BattleScript_RemoveGenericType;
|
||||
break;
|
||||
}
|
||||
RemoveBattlerType(gEffectBattler, gMovesInfo[gCurrentMove].argument);
|
||||
RemoveBattlerType(gEffectBattler, gMovesInfo[gCurrentMove].argument.type);
|
||||
break;
|
||||
case MOVE_EFFECT_ROUND:
|
||||
TryUpdateRoundTurnOrder(); // If another Pokémon uses Round before the user this turn, the user will use Round directly after it
|
||||
@ -5987,7 +5987,7 @@ static void Cmd_moveend(void)
|
||||
}
|
||||
else if (IsBattlerAlive(gBattlerAttacker) && MoveResultHasEffect(gBattlerTarget))
|
||||
{
|
||||
gBattleStruct->moveDamage[gBattlerAttacker] = max(1, (gBattleStruct->moveDamage[gBattlerTarget] * gMovesInfo[gCurrentMove].argument / 100));
|
||||
gBattleStruct->moveDamage[gBattlerAttacker] = max(1, (gBattleStruct->moveDamage[gBattlerTarget] * gMovesInfo[gCurrentMove].argument.absorbPercentage / 100));
|
||||
gBattleStruct->moveDamage[gBattlerAttacker] = GetDrainedBigRootHp(gBattlerAttacker, gBattleStruct->moveDamage[gBattlerAttacker]);
|
||||
gHitMarker |= HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_DISGUISE;
|
||||
effect = TRUE;
|
||||
@ -6205,18 +6205,18 @@ static void Cmd_moveend(void)
|
||||
}
|
||||
break;
|
||||
case MOVE_EFFECT_REMOVE_STATUS: // Smelling salts, Wake-Up Slap, Sparkling Aria
|
||||
if ((gBattleMons[gBattlerTarget].status1 & gMovesInfo[gCurrentMove].argument)
|
||||
if ((gBattleMons[gBattlerTarget].status1 & gMovesInfo[gCurrentMove].argument.status)
|
||||
&& IsBattlerAlive(gBattlerTarget)
|
||||
&& !DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove))
|
||||
{
|
||||
gBattleMons[gBattlerTarget].status1 &= ~(gMovesInfo[gCurrentMove].argument);
|
||||
gBattleMons[gBattlerTarget].status1 &= ~(gMovesInfo[gCurrentMove].argument.status);
|
||||
|
||||
BtlController_EmitSetMonData(gBattlerTarget, 0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gBattlerTarget].status1);
|
||||
MarkBattlerForControllerExec(gBattlerTarget);
|
||||
effect = TRUE;
|
||||
BattleScriptPush(gBattlescriptCurrInstr);
|
||||
|
||||
switch (gMovesInfo[gCurrentMove].argument)
|
||||
switch (gMovesInfo[gCurrentMove].argument.status)
|
||||
{
|
||||
case STATUS1_PARALYSIS:
|
||||
gBattlescriptCurrInstr = BattleScript_TargetPRLZHeal;
|
||||
@ -6520,7 +6520,7 @@ static void Cmd_moveend(void)
|
||||
if (gMultiHitCounter == 0)
|
||||
{
|
||||
BattleScriptPushCursor();
|
||||
if (gMovesInfo[gCurrentMove].argument == MOVE_EFFECT_SCALE_SHOT && !NoAliveMonsForEitherParty())
|
||||
if (gMovesInfo[gCurrentMove].argument.moveProperty == MOVE_EFFECT_SCALE_SHOT && !NoAliveMonsForEitherParty())
|
||||
gBattlescriptCurrInstr = BattleScript_ScaleShot;
|
||||
else
|
||||
gBattlescriptCurrInstr = BattleScript_MultiHitPrintStrings;
|
||||
@ -10419,7 +10419,7 @@ static void Cmd_various(void)
|
||||
case VARIOUS_SET_ARG_TO_BATTLE_DAMAGE:
|
||||
{
|
||||
VARIOUS_ARGS();
|
||||
gBattleStruct->moveDamage[gBattlerTarget] = gMovesInfo[gCurrentMove].argument;
|
||||
gBattleStruct->moveDamage[gBattlerTarget] = gMovesInfo[gCurrentMove].argument.fixedDamage;
|
||||
break;
|
||||
}
|
||||
case VARIOUS_TRY_AUTOTOMIZE:
|
||||
@ -10691,14 +10691,14 @@ static void Cmd_various(void)
|
||||
case VARIOUS_TRY_THIRD_TYPE:
|
||||
{
|
||||
VARIOUS_ARGS(const u8 *failInstr);
|
||||
if (IS_BATTLER_OF_TYPE(battler, gMovesInfo[gCurrentMove].argument) || GetActiveGimmick(battler) == GIMMICK_TERA)
|
||||
if (IS_BATTLER_OF_TYPE(battler, gMovesInfo[gCurrentMove].argument.type) || GetActiveGimmick(battler) == GIMMICK_TERA)
|
||||
{
|
||||
gBattlescriptCurrInstr = cmd->failInstr;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleMons[battler].types[2] = gMovesInfo[gCurrentMove].argument;
|
||||
PREPARE_TYPE_BUFFER(gBattleTextBuff1, gMovesInfo[gCurrentMove].argument);
|
||||
gBattleMons[battler].types[2] = gMovesInfo[gCurrentMove].argument.type;
|
||||
PREPARE_TYPE_BUFFER(gBattleTextBuff1, gMovesInfo[gCurrentMove].argument.type);
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
}
|
||||
return;
|
||||
@ -11365,7 +11365,7 @@ static void Cmd_setprotectlike(void)
|
||||
|| (gCurrentMove == MOVE_WIDE_GUARD && B_WIDE_GUARD != GEN_5)
|
||||
|| (gCurrentMove == MOVE_QUICK_GUARD && B_QUICK_GUARD != GEN_5))
|
||||
{
|
||||
if (!gMovesInfo[gCurrentMove].argument) // Protects one mon only.
|
||||
if (!gMovesInfo[gCurrentMove].argument.protect.side) // Protects one mon only.
|
||||
{
|
||||
if (gMovesInfo[gCurrentMove].effect == EFFECT_ENDURE)
|
||||
{
|
||||
@ -11922,8 +11922,8 @@ static void Cmd_setdrainedhp(void)
|
||||
{
|
||||
CMD_ARGS();
|
||||
|
||||
if (gMovesInfo[gCurrentMove].argument != 0)
|
||||
gBattleStruct->moveDamage[gBattlerAttacker] = (gHpDealt * gMovesInfo[gCurrentMove].argument / 100);
|
||||
if (gMovesInfo[gCurrentMove].argument.absorbPercentage != 0)
|
||||
gBattleStruct->moveDamage[gBattlerAttacker] = (gHpDealt * gMovesInfo[gCurrentMove].argument.absorbPercentage / 100);
|
||||
else
|
||||
gBattleStruct->moveDamage[gBattlerAttacker] = (gHpDealt / 2);
|
||||
|
||||
@ -12343,7 +12343,7 @@ static void Cmd_twoturnmoveschargestringandanimation(void)
|
||||
{
|
||||
CMD_ARGS(const u8 *animationThenStringPtr);
|
||||
|
||||
gBattleScripting.savedStringId = LOHALF(gMovesInfo[gCurrentMove].argument);
|
||||
gBattleScripting.savedStringId = gMovesInfo[gCurrentMove].argument.twoTurnAttack.stringId;
|
||||
if (B_UPDATED_MOVE_DATA < GEN_5 || MoveHasChargeTurnAdditionalEffect(gCurrentMove))
|
||||
gBattlescriptCurrInstr = cmd->animationThenStringPtr;
|
||||
else
|
||||
@ -13586,7 +13586,7 @@ static void Cmd_tryspiteppreduce(void)
|
||||
{
|
||||
s32 ppToDeduct = B_PP_REDUCED_BY_SPITE >= GEN_4 ? 4 : (Random() & 3) + 2;
|
||||
// G-Max Depletion only deducts 2 PP.
|
||||
if (IsMaxMove(gCurrentMove) && gMovesInfo[gCurrentMove].argument == MAX_EFFECT_SPITE)
|
||||
if (IsMaxMove(gCurrentMove) && gMovesInfo[gCurrentMove].argument.maxEffect == MAX_EFFECT_SPITE)
|
||||
ppToDeduct = 2;
|
||||
|
||||
if (gBattleMons[gBattlerTarget].pp[i] < ppToDeduct)
|
||||
@ -14338,7 +14338,7 @@ static void Cmd_setsemiinvulnerablebit(void)
|
||||
|
||||
if (gBattleMoveEffects[gMovesInfo[gCurrentMove].effect].semiInvulnerableEffect == TRUE)
|
||||
{
|
||||
u32 semiInvulnerableEffect = UNCOMPRESS_BITS(HIHALF(gMovesInfo[gCurrentMove].argument));
|
||||
u32 semiInvulnerableEffect = UNCOMPRESS_BITS(gMovesInfo[gCurrentMove].argument.twoTurnAttack.status);
|
||||
if (cmd->clear)
|
||||
gStatuses3[gBattlerAttacker] &= ~semiInvulnerableEffect;
|
||||
else
|
||||
@ -14362,7 +14362,7 @@ static bool32 CheckIfCanFireTwoTurnMoveNow(u8 battler, bool8 checkChargeTurnEffe
|
||||
|
||||
// Certain two-turn moves may fire on the first turn in the right weather (Solar Beam, Electro Shot)
|
||||
// By default, all two-turn moves have the option of adding weather to their argument
|
||||
if (IsBattlerWeatherAffected(battler, HIHALF(gMovesInfo[gCurrentMove].argument)))
|
||||
if (IsBattlerWeatherAffected(battler, gMovesInfo[gCurrentMove].argument.status)) // TODO: Two Turn Moves affected by weather need a better rewrite
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
@ -15157,7 +15157,7 @@ static void Cmd_jumpifnotcurrentmoveargtype(void)
|
||||
u8 battler = GetBattlerForBattleScript(cmd->battler);
|
||||
const u8 *failInstr = cmd->failInstr;
|
||||
|
||||
if (!IS_BATTLER_OF_TYPE(battler, gMovesInfo[gCurrentMove].argument))
|
||||
if (!IS_BATTLER_OF_TYPE(battler, gMovesInfo[gCurrentMove].argument.type))
|
||||
gBattlescriptCurrInstr = failInstr;
|
||||
else
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
@ -16929,7 +16929,7 @@ void BS_JumpIfArgument(void)
|
||||
{
|
||||
NATIVE_ARGS(u8 argument, const u8 *jumpInstr);
|
||||
|
||||
if (gMovesInfo[gCurrentMove].argument == cmd->argument)
|
||||
if (gMovesInfo[gCurrentMove].argument.moveProperty == cmd->argument)
|
||||
gBattlescriptCurrInstr = cmd->jumpInstr;
|
||||
else
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
@ -16959,7 +16959,7 @@ void BS_SetRemoveTerrain(void)
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_PSYCHIC;
|
||||
break;
|
||||
case EFFECT_HIT_SET_REMOVE_TERRAIN:
|
||||
switch (gMovesInfo[gCurrentMove].argument)
|
||||
switch (gMovesInfo[gCurrentMove].argument.moveProperty)
|
||||
{
|
||||
case ARG_SET_PSYCHIC_TERRAIN: // Genesis Supernova
|
||||
statusFlag = STATUS_FIELD_PSYCHIC_TERRAIN;
|
||||
@ -17276,7 +17276,7 @@ void BS_TryHealPulse(void)
|
||||
{
|
||||
if (GetBattlerAbility(gBattlerAttacker) == ABILITY_MEGA_LAUNCHER && gMovesInfo[gCurrentMove].pulseMove)
|
||||
gBattleStruct->moveDamage[gBattlerTarget] = -(GetNonDynamaxMaxHP(gBattlerTarget) * 75 / 100);
|
||||
else if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && gMovesInfo[gCurrentMove].argument == MOVE_EFFECT_FLORAL_HEALING)
|
||||
else if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && gMovesInfo[gCurrentMove].argument.moveProperty == MOVE_EFFECT_FLORAL_HEALING)
|
||||
gBattleStruct->moveDamage[gBattlerTarget] = -(GetNonDynamaxMaxHP(gBattlerTarget) * 2 / 3);
|
||||
else
|
||||
gBattleStruct->moveDamage[gBattlerTarget] = -(GetNonDynamaxMaxHP(gBattlerTarget) / 2);
|
||||
|
||||
@ -3464,7 +3464,7 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType)
|
||||
case CANCELLER_THAW: // move thawing
|
||||
if (gBattleMons[gBattlerAttacker].status1 & STATUS1_FREEZE)
|
||||
{
|
||||
if (!(MoveHasAdditionalEffectSelfArg(gCurrentMove, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_FIRE) && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_FIRE)))
|
||||
if (!(IsMoveEffectRemoveSpeciesType(gCurrentMove, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_FIRE) && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_FIRE)))
|
||||
{
|
||||
gBattleMons[gBattlerAttacker].status1 &= ~STATUS1_FREEZE;
|
||||
BattleScriptPushCursor();
|
||||
@ -3475,7 +3475,7 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType)
|
||||
}
|
||||
if (gBattleMons[gBattlerAttacker].status1 & STATUS1_FROSTBITE && gMovesInfo[gCurrentMove].thawsUser)
|
||||
{
|
||||
if (!(MoveHasAdditionalEffectSelfArg(gCurrentMove, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_FIRE) && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_FIRE)))
|
||||
if (!(IsMoveEffectRemoveSpeciesType(gCurrentMove, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_FIRE) && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_FIRE)))
|
||||
{
|
||||
gBattleMons[gBattlerAttacker].status1 &= ~STATUS1_FROSTBITE;
|
||||
BattleScriptPushCursor();
|
||||
@ -8599,7 +8599,7 @@ bool32 IsBattlerProtected(u32 battlerAtk, u32 battlerDef, u32 move)
|
||||
bool32 isProtected = FALSE;
|
||||
|
||||
if ((IsZMove(move) || IsMaxMove(move))
|
||||
&& (!gProtectStructs[battlerDef].maxGuarded || gMovesInfo[move].argument == MAX_EFFECT_BYPASS_PROTECT))
|
||||
&& (!gProtectStructs[battlerDef].maxGuarded || gMovesInfo[move].argument.maxEffect == MAX_EFFECT_BYPASS_PROTECT))
|
||||
isProtected = FALSE; // Z-Moves and Max Moves bypass protection (except Max Guard).
|
||||
else if (gProtectStructs[battlerDef].maxGuarded && IsMoveBlockedByMaxGuard(move))
|
||||
isProtected = TRUE;
|
||||
@ -8972,7 +8972,7 @@ static inline u32 CalcMoveBasePower(struct DamageCalculationData *damageCalcData
|
||||
break;
|
||||
case EFFECT_DOUBLE_POWER_ON_ARG_STATUS:
|
||||
// Comatose targets treated as if asleep
|
||||
if ((gBattleMons[battlerDef].status1 | (STATUS1_SLEEP * (abilityDef == ABILITY_COMATOSE))) & gMovesInfo[move].argument
|
||||
if ((gBattleMons[battlerDef].status1 | (STATUS1_SLEEP * (abilityDef == ABILITY_COMATOSE))) & gMovesInfo[move].argument.status
|
||||
&& !((gMovesInfo[move].additionalEffects->moveEffect == MOVE_EFFECT_REMOVE_STATUS) && DoesSubstituteBlockMove(battlerAtk, battlerDef, move)))
|
||||
{
|
||||
basePower *= 2;
|
||||
@ -10435,7 +10435,7 @@ static inline void MulByTypeEffectiveness(uq4_12_t *modifier, u32 move, u32 move
|
||||
|
||||
if (moveType == TYPE_PSYCHIC && defType == TYPE_DARK && gStatuses3[battlerDef] & STATUS3_MIRACLE_EYED && mod == UQ_4_12(0.0))
|
||||
mod = UQ_4_12(1.0);
|
||||
if (gMovesInfo[move].effect == EFFECT_SUPER_EFFECTIVE_ON_ARG && defType == gMovesInfo[move].argument)
|
||||
if (gMovesInfo[move].effect == EFFECT_SUPER_EFFECTIVE_ON_ARG && defType == gMovesInfo[move].argument.type)
|
||||
mod = UQ_4_12(2.0);
|
||||
if (moveType == TYPE_GROUND && defType == TYPE_FLYING && IsBattlerGrounded(battlerDef) && mod == UQ_4_12(0.0))
|
||||
mod = UQ_4_12(1.0);
|
||||
@ -10573,7 +10573,7 @@ uq4_12_t CalcTypeEffectivenessMultiplier(u32 move, u32 moveType, u32 battlerAtk,
|
||||
{
|
||||
modifier = CalcTypeEffectivenessMultiplierInternal(move, moveType, battlerAtk, battlerDef, recordAbilities, modifier, defAbility);
|
||||
if (gMovesInfo[move].effect == EFFECT_TWO_TYPED_MOVE)
|
||||
modifier = CalcTypeEffectivenessMultiplierInternal(move, gMovesInfo[move].argument, battlerAtk, battlerDef, recordAbilities, modifier, defAbility);
|
||||
modifier = CalcTypeEffectivenessMultiplierInternal(move, gMovesInfo[move].argument.type, battlerAtk, battlerDef, recordAbilities, modifier, defAbility);
|
||||
}
|
||||
|
||||
if (recordAbilities)
|
||||
@ -11748,9 +11748,9 @@ bool32 MoveHasAdditionalEffectSelf(u32 move, u32 moveEffect)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool32 MoveHasAdditionalEffectSelfArg(u32 move, u32 moveEffect, u32 argument)
|
||||
bool32 IsMoveEffectRemoveSpeciesType(u32 move, u32 moveEffect, u32 argument)
|
||||
{
|
||||
return (gMovesInfo[move].argument == argument) && MoveHasAdditionalEffectSelf(move, moveEffect);
|
||||
return (gMovesInfo[move].argument.type == argument) && MoveHasAdditionalEffectSelf(move, moveEffect);
|
||||
}
|
||||
|
||||
bool32 MoveHasChargeTurnAdditionalEffect(u32 move)
|
||||
|
||||
@ -17,11 +17,6 @@
|
||||
#define BINDING_TURNS "2 to 5"
|
||||
#endif
|
||||
|
||||
/* First arg is the charge turn string id, second arg depends on effect
|
||||
EFFECT_SEMI_INVULNERABLE/EFFECT_SKY_DROP: semi-invulnerable STATUS3 to apply to battler
|
||||
EFFECT_TWO_TURNS_ATTACK/EFFECT_SOLAR_BEAM: weather in which to skip charge turn */
|
||||
#define TWO_TURN_ARG(stringid, ...) (stringid) __VA_OPT__(| ((__VA_ARGS__) << 16))
|
||||
|
||||
// Shared Move Description entries
|
||||
|
||||
const u8 gNotDoneYetDescription[] = _(
|
||||
@ -438,7 +433,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.sleepTalkBanned = TRUE,
|
||||
.instructBanned = TRUE,
|
||||
.windMove = B_EXTRAPOLATED_MOVE_FLAGS,
|
||||
.argument = TWO_TURN_ARG(STRINGID_PKMNWHIPPEDWHIRLWIND),
|
||||
.argument.twoTurnAttack = { .stringId = STRINGID_PKMNWHIPPEDWHIRLWIND },
|
||||
.contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
|
||||
.contestCategory = CONTEST_CATEGORY_COOL,
|
||||
.contestComboStarterId = 0,
|
||||
@ -586,7 +581,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.sleepTalkBanned = TRUE,
|
||||
.instructBanned = TRUE,
|
||||
.assistBanned = TRUE,
|
||||
.argument = TWO_TURN_ARG(STRINGID_PKMNFLEWHIGH, COMPRESS_BITS(STATUS3_ON_AIR)),
|
||||
.argument.twoTurnAttack = { .stringId = STRINGID_PKMNFLEWHIGH, .status = COMPRESS_BITS(STATUS3_ON_AIR) },
|
||||
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE,
|
||||
.contestCategory = CONTEST_CATEGORY_SMART,
|
||||
.contestComboStarterId = 0,
|
||||
@ -1332,7 +1327,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_SPECIAL,
|
||||
.argument = 20,
|
||||
.argument = { .fixedDamage = 20 },
|
||||
.contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
|
||||
.contestCategory = CONTEST_CATEGORY_COOL,
|
||||
.contestComboStarterId = 0,
|
||||
@ -1874,7 +1869,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_SPECIAL,
|
||||
.argument = 50,
|
||||
.argument = { .absorbPercentage = 50 },
|
||||
.ignoresKingsRock = (B_UPDATED_MOVE_FLAGS == GEN_3 || B_UPDATED_MOVE_FLAGS == GEN_4),
|
||||
.healingMove = B_HEAL_BLOCKING >= GEN_6,
|
||||
.contestEffect = CONTEST_EFFECT_STARTLE_PREV_MON,
|
||||
@ -1896,7 +1891,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_SPECIAL,
|
||||
.argument = 50,
|
||||
.argument = { .absorbPercentage = 50 },
|
||||
.zMove = { .powerOverride = 120 },
|
||||
.ignoresKingsRock = (B_UPDATED_MOVE_FLAGS == GEN_3 || B_UPDATED_MOVE_FLAGS == GEN_4),
|
||||
.healingMove = B_HEAL_BLOCKING >= GEN_6,
|
||||
@ -1999,7 +1994,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.category = DAMAGE_CATEGORY_SPECIAL,
|
||||
.sleepTalkBanned = TRUE,
|
||||
.instructBanned = TRUE,
|
||||
.argument = TWO_TURN_ARG(STRINGID_PKMNTOOKSUNLIGHT, B_WEATHER_SUN),
|
||||
.argument.twoTurnAttack = { .stringId = STRINGID_PKMNTOOKSUNLIGHT, .status = B_WEATHER_SUN },
|
||||
.contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
|
||||
.contestCategory = CONTEST_CATEGORY_COOL,
|
||||
.contestComboStarterId = 0,
|
||||
@ -2151,7 +2146,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_SPECIAL,
|
||||
.ignoresKingsRock = (B_UPDATED_MOVE_FLAGS == GEN_4) || (B_UPDATED_MOVE_FLAGS < GEN_3),
|
||||
.argument = 40,
|
||||
.argument = { .fixedDamage = 40 },
|
||||
.contestEffect = CONTEST_EFFECT_BETTER_WHEN_LATER,
|
||||
.contestCategory = CONTEST_CATEGORY_COOL,
|
||||
.contestComboStarterId = COMBO_STARTER_DRAGON_RAGE,
|
||||
@ -2370,7 +2365,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.instructBanned = TRUE,
|
||||
.assistBanned = TRUE,
|
||||
.skyBattleBanned = TRUE,
|
||||
.argument = TWO_TURN_ARG(STRINGID_PKMNDUGHOLE, COMPRESS_BITS(STATUS3_UNDERGROUND)),
|
||||
.argument.twoTurnAttack = { .stringId = STRINGID_PKMNDUGHOLE, .status = COMPRESS_BITS(STATUS3_UNDERGROUND) },
|
||||
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE,
|
||||
.contestCategory = CONTEST_CATEGORY_SMART,
|
||||
.contestComboStarterId = 0,
|
||||
@ -2986,7 +2981,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_STATUS,
|
||||
.zMove = { .effect = Z_EFFECT_ACC_UP_1 },
|
||||
.argument = STATUS2_FOCUS_ENERGY,
|
||||
.argument = { .status = STATUS2_FOCUS_ENERGY },
|
||||
.ignoresProtect = TRUE,
|
||||
.mirrorMoveBanned = TRUE,
|
||||
.snatchAffected = TRUE,
|
||||
@ -3343,7 +3338,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.makesContact = TRUE,
|
||||
.sleepTalkBanned = TRUE,
|
||||
.instructBanned = TRUE,
|
||||
.argument = TWO_TURN_ARG(STRINGID_PKMNLOWEREDHEAD),
|
||||
.argument.twoTurnAttack = { .stringId = STRINGID_PKMNLOWEREDHEAD },
|
||||
.additionalEffects = ADDITIONAL_EFFECTS({
|
||||
.moveEffect = MOVE_EFFECT_DEF_PLUS_1,
|
||||
.self = TRUE,
|
||||
@ -3622,7 +3617,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = 50,
|
||||
.argument = { .absorbPercentage = 50 },
|
||||
.makesContact = TRUE,
|
||||
.ignoresKingsRock = (B_UPDATED_MOVE_FLAGS == GEN_3 || B_UPDATED_MOVE_FLAGS == GEN_4),
|
||||
.healingMove = B_HEAL_BLOCKING >= GEN_6,
|
||||
@ -3673,7 +3668,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.criticalHitStage = B_UPDATED_MOVE_DATA >= GEN_3,
|
||||
.sleepTalkBanned = TRUE,
|
||||
.instructBanned = TRUE,
|
||||
.argument = TWO_TURN_ARG(B_UPDATED_MOVE_DATA >= GEN_4 ? STRINGID_CLOAKEDINAHARSHLIGHT : STRINGID_PKMNISGLOWING),
|
||||
.argument.twoTurnAttack = { .stringId = B_UPDATED_MOVE_DATA >= GEN_4 ? STRINGID_CLOAKEDINAHARSHLIGHT : STRINGID_PKMNISGLOWING },
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_3
|
||||
.additionalEffects = ADDITIONAL_EFFECTS({
|
||||
.moveEffect = MOVE_EFFECT_FLINCH,
|
||||
@ -5155,7 +5150,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_SPECIAL,
|
||||
.argument = 50,
|
||||
.argument = { .absorbPercentage = 50 },
|
||||
.ignoresKingsRock = (B_UPDATED_MOVE_FLAGS == GEN_3 || B_UPDATED_MOVE_FLAGS == GEN_4),
|
||||
.healingMove = B_HEAL_BLOCKING >= GEN_6,
|
||||
.contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
|
||||
@ -6735,7 +6730,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = STATUS1_PARALYSIS,
|
||||
.argument = { .status = STATUS1_PARALYSIS },
|
||||
.makesContact = TRUE,
|
||||
.additionalEffects = ADDITIONAL_EFFECTS({
|
||||
.moveEffect = MOVE_EFFECT_REMOVE_STATUS,
|
||||
@ -7391,7 +7386,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.instructBanned = TRUE,
|
||||
.assistBanned = TRUE,
|
||||
.skyBattleBanned = TRUE,
|
||||
.argument = TWO_TURN_ARG(STRINGID_PKMNHIDUNDERWATER, COMPRESS_BITS(STATUS3_UNDERWATER)),
|
||||
.argument.twoTurnAttack = { .stringId = STRINGID_PKMNHIDUNDERWATER, .status = COMPRESS_BITS(STATUS3_UNDERWATER) },
|
||||
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE,
|
||||
.contestCategory = CONTEST_CATEGORY_BEAUTY,
|
||||
.contestComboStarterId = COMBO_STARTER_DIVE,
|
||||
@ -8599,7 +8594,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.sleepTalkBanned = TRUE,
|
||||
.instructBanned = TRUE,
|
||||
.assistBanned = TRUE,
|
||||
.argument = TWO_TURN_ARG(STRINGID_PKMNSPRANGUP, COMPRESS_BITS(STATUS3_ON_AIR)),
|
||||
.argument.twoTurnAttack = { .stringId = STRINGID_PKMNSPRANGUP, .status = COMPRESS_BITS(STATUS3_ON_AIR) },
|
||||
.additionalEffects = ADDITIONAL_EFFECTS({
|
||||
.moveEffect = MOVE_EFFECT_PARALYSIS,
|
||||
.chance = 30,
|
||||
@ -9048,7 +9043,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = STATUS1_SLEEP,
|
||||
.argument = { .status = STATUS1_SLEEP },
|
||||
.makesContact = TRUE,
|
||||
.additionalEffects = ADDITIONAL_EFFECTS({
|
||||
.moveEffect = MOVE_EFFECT_REMOVE_STATUS,
|
||||
@ -10268,7 +10263,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = 50,
|
||||
.argument = { .absorbPercentage = 50 },
|
||||
.makesContact = TRUE,
|
||||
.punchingMove = TRUE,
|
||||
.healingMove = B_HEAL_BLOCKING >= GEN_6,
|
||||
@ -11272,7 +11267,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_SPECIAL,
|
||||
.argument = HOLD_EFFECT_PLATE,
|
||||
.argument = { .holdEffect = HOLD_EFFECT_PLATE },
|
||||
.contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
|
||||
.contestCategory = CONTEST_CATEGORY_SMART,
|
||||
.contestComboStarterId = 0,
|
||||
@ -11702,7 +11697,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.sleepTalkBanned = TRUE,
|
||||
.instructBanned = TRUE,
|
||||
.assistBanned = TRUE,
|
||||
.argument = TWO_TURN_ARG(STRINGID_VANISHEDINSTANTLY, COMPRESS_BITS(STATUS3_PHANTOM_FORCE)),
|
||||
.argument.twoTurnAttack = { .stringId = STRINGID_VANISHEDINSTANTLY, .status = COMPRESS_BITS(STATUS3_PHANTOM_FORCE) },
|
||||
.additionalEffects = ADDITIONAL_EFFECTS({
|
||||
.moveEffect = MOVE_EFFECT_FEINT,
|
||||
}),
|
||||
@ -11752,7 +11747,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_USER,
|
||||
.priority = 3,
|
||||
.category = DAMAGE_CATEGORY_STATUS,
|
||||
.argument = TRUE, // Protects the whole side.
|
||||
.argument = { .protect.side = TRUE, },
|
||||
.zMove = { .effect = Z_EFFECT_DEF_UP_1 },
|
||||
.snatchAffected = TRUE,
|
||||
.ignoresProtect = TRUE,
|
||||
@ -11867,7 +11862,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_SPECIAL,
|
||||
.argument = STATUS1_PSN_ANY,
|
||||
.argument = { .status = STATUS1_PSN_ANY },
|
||||
.contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
|
||||
.contestCategory = CONTEST_CATEGORY_TOUGH,
|
||||
.contestComboStarterId = 0,
|
||||
@ -12513,7 +12508,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_USER,
|
||||
.priority = 3,
|
||||
.category = DAMAGE_CATEGORY_STATUS,
|
||||
.argument = TRUE, // Protects the whole side.
|
||||
.argument = { .protect.side = TRUE, },
|
||||
.zMove = { .effect = Z_EFFECT_DEF_UP_1 },
|
||||
.snatchAffected = TRUE,
|
||||
.ignoresProtect = TRUE,
|
||||
@ -12642,7 +12637,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_SPECIAL,
|
||||
.zMove = { .powerOverride = 160 },
|
||||
.argument = STATUS1_ANY,
|
||||
.argument = { .status = STATUS1_ANY },
|
||||
.contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
|
||||
.contestCategory = CONTEST_CATEGORY_SMART,
|
||||
.contestComboStarterId = 0,
|
||||
@ -12669,7 +12664,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.sleepTalkBanned = TRUE,
|
||||
.instructBanned = TRUE,
|
||||
.assistBanned = TRUE,
|
||||
.argument = TWO_TURN_ARG(STRINGID_PKMNTOOKTARGETHIGH, COMPRESS_BITS(STATUS3_ON_AIR)),
|
||||
.argument.twoTurnAttack = { .stringId = STRINGID_PKMNTOOKTARGETHIGH, .status = COMPRESS_BITS(STATUS3_ON_AIR) },
|
||||
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE,
|
||||
.contestCategory = CONTEST_CATEGORY_SMART,
|
||||
.contestComboStarterId = 0,
|
||||
@ -13249,7 +13244,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = 50,
|
||||
.argument = { .absorbPercentage = 50 },
|
||||
.makesContact = TRUE,
|
||||
.healingMove = B_HEAL_BLOCKING >= GEN_6,
|
||||
.contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
|
||||
@ -13585,7 +13580,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_SPECIAL,
|
||||
.argument = HOLD_EFFECT_DRIVE,
|
||||
.argument = { .holdEffect = HOLD_EFFECT_DRIVE },
|
||||
.metronomeBanned = TRUE,
|
||||
.contestEffect = CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST,
|
||||
.contestCategory = CONTEST_CATEGORY_COOL,
|
||||
@ -13608,7 +13603,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_BOTH,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_SPECIAL,
|
||||
.argument = STATUS1_SLEEP,
|
||||
.argument = { .status = STATUS1_SLEEP },
|
||||
.ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6,
|
||||
.soundMove = TRUE,
|
||||
.metronomeBanned = TRUE,
|
||||
@ -13766,7 +13761,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.metronomeBanned = TRUE,
|
||||
.sleepTalkBanned = TRUE,
|
||||
.instructBanned = TRUE,
|
||||
.argument = TWO_TURN_ARG(STRINGID_CLOAKEDINAFREEZINGLIGHT),
|
||||
.argument.twoTurnAttack = { .stringId = STRINGID_CLOAKEDINAFREEZINGLIGHT },
|
||||
.additionalEffects = ADDITIONAL_EFFECTS({
|
||||
.moveEffect = MOVE_EFFECT_PARALYSIS,
|
||||
.chance = 30,
|
||||
@ -13795,7 +13790,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.metronomeBanned = TRUE,
|
||||
.sleepTalkBanned = TRUE,
|
||||
.instructBanned = TRUE,
|
||||
.argument = TWO_TURN_ARG(STRINGID_CLOAKEDINAFREEZINGLIGHT),
|
||||
.argument.twoTurnAttack = { .stringId = STRINGID_CLOAKEDINAFREEZINGLIGHT },
|
||||
.additionalEffects = ADDITIONAL_EFFECTS({
|
||||
.moveEffect = MOVE_EFFECT_BURN,
|
||||
.chance = 30,
|
||||
@ -13946,7 +13941,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.zMove = { .powerOverride = 170 },
|
||||
.argument = TYPE_FLYING,
|
||||
.argument = { .type = TYPE_FLYING },
|
||||
.makesContact = TRUE,
|
||||
.minimizeDoubleDamage = TRUE,
|
||||
.gravityBanned = TRUE,
|
||||
@ -13972,7 +13967,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_USER,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_STATUS,
|
||||
.argument = TRUE, // Protects the whole side.
|
||||
.argument = { .protect.side = TRUE },
|
||||
.zMove = { .effect = Z_EFFECT_DEF_UP_1 },
|
||||
.snatchAffected = TRUE,
|
||||
.ignoresProtect = TRUE,
|
||||
@ -14108,7 +14103,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.sleepTalkBanned = TRUE,
|
||||
.instructBanned = TRUE,
|
||||
.assistBanned = TRUE,
|
||||
.argument = TWO_TURN_ARG(STRINGID_VANISHEDINSTANTLY, COMPRESS_BITS(STATUS3_PHANTOM_FORCE)),
|
||||
.argument.twoTurnAttack = { .stringId = STRINGID_VANISHEDINSTANTLY, .status = COMPRESS_BITS(STATUS3_PHANTOM_FORCE) },
|
||||
.additionalEffects = ADDITIONAL_EFFECTS({
|
||||
.moveEffect = MOVE_EFFECT_FEINT,
|
||||
}),
|
||||
@ -14133,7 +14128,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_STATUS,
|
||||
.argument = TYPE_GHOST,
|
||||
.argument = { .type = TYPE_GHOST },
|
||||
.zMove = { .effect = Z_EFFECT_ALL_STATS_UP_1 },
|
||||
.magicCoatAffected = TRUE,
|
||||
.contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
|
||||
@ -14206,7 +14201,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_FOES_AND_ALLY,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_SPECIAL,
|
||||
.argument = 50,
|
||||
.argument = { .absorbPercentage = 50 },
|
||||
.healingMove = B_HEAL_BLOCKING >= GEN_6,
|
||||
.contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
|
||||
.contestCategory = CONTEST_CATEGORY_BEAUTY,
|
||||
@ -14229,7 +14224,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_STATUS,
|
||||
.argument = TYPE_GRASS,
|
||||
.argument = { .type = TYPE_GRASS },
|
||||
.zMove = { .effect = Z_EFFECT_ALL_STATS_UP_1 },
|
||||
.magicCoatAffected = TRUE,
|
||||
.contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
|
||||
@ -14279,7 +14274,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_SPECIAL,
|
||||
.argument = TYPE_WATER,
|
||||
.argument = { .type = TYPE_WATER },
|
||||
.additionalEffects = ADDITIONAL_EFFECTS({
|
||||
.moveEffect = MOVE_EFFECT_FREEZE_OR_FROSTBITE,
|
||||
.chance = 10,
|
||||
@ -14374,7 +14369,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_SPECIAL,
|
||||
.argument = 75, // restores 75% HP instead of 50% HP
|
||||
.argument = { .absorbPercentage = 75 },
|
||||
.makesContact = TRUE,
|
||||
.healingMove = B_HEAL_BLOCKING >= GEN_6,
|
||||
.contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
|
||||
@ -14398,7 +14393,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_USER,
|
||||
.priority = 3,
|
||||
.category = DAMAGE_CATEGORY_STATUS,
|
||||
.argument = TRUE, // Protects the whole side.
|
||||
.argument = { .protect.side = TRUE, },
|
||||
.zMove = { .effect = Z_EFFECT_SPDEF_UP_1 },
|
||||
.ignoresProtect = TRUE,
|
||||
.mirrorMoveBanned = TRUE,
|
||||
@ -14970,7 +14965,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.sleepTalkBanned = TRUE,
|
||||
.instructBanned = TRUE,
|
||||
.skyBattleBanned = TRUE,
|
||||
.argument = TWO_TURN_ARG(STRINGID_PKNMABSORBINGPOWER),
|
||||
.argument.twoTurnAttack = { .stringId = STRINGID_PKNMABSORBINGPOWER },
|
||||
.contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
|
||||
.contestCategory = CONTEST_CATEGORY_CUTE,
|
||||
.contestComboStarterId = 0,
|
||||
@ -15268,7 +15263,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_SPECIAL,
|
||||
.argument = 75, // restores 75% HP instead of 50% HP
|
||||
.argument = { .absorbPercentage = 75 },
|
||||
.healingMove = B_HEAL_BLOCKING >= GEN_6,
|
||||
.contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
|
||||
.contestCategory = CONTEST_CATEGORY_COOL,
|
||||
@ -15510,7 +15505,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 2,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MOVE_FIRST_IMPRESSION,
|
||||
.argument = { .moveProperty = MOVE_FIRST_IMPRESSION },
|
||||
.makesContact = TRUE,
|
||||
.contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST,
|
||||
.contestCategory = CONTEST_CATEGORY_COOL,
|
||||
@ -15608,7 +15603,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_FOES_AND_ALLY,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_SPECIAL,
|
||||
.argument = STATUS1_BURN,
|
||||
.argument = { .status = STATUS1_BURN },
|
||||
.ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6,
|
||||
.soundMove = TRUE,
|
||||
.additionalEffects = ADDITIONAL_EFFECTS({
|
||||
@ -15664,7 +15659,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_STATUS,
|
||||
.zMove = { .effect = Z_EFFECT_RESET_STATS },
|
||||
.argument = MOVE_EFFECT_FLORAL_HEALING,
|
||||
.argument = { .moveProperty = MOVE_EFFECT_FLORAL_HEALING },
|
||||
.mirrorMoveBanned = TRUE,
|
||||
.healingMove = TRUE,
|
||||
.magicCoatAffected = TRUE,
|
||||
@ -15739,7 +15734,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.slicingMove = TRUE,
|
||||
.sleepTalkBanned = TRUE,
|
||||
.instructBanned = TRUE,
|
||||
.argument = TWO_TURN_ARG(STRINGID_PKMNTOOKSUNLIGHT, B_WEATHER_SUN),
|
||||
.argument.twoTurnAttack = { .stringId = STRINGID_PKMNTOOKSUNLIGHT, .status = B_WEATHER_SUN },
|
||||
.contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
|
||||
.contestCategory = CONTEST_CATEGORY_TOUGH,
|
||||
.contestComboStarterId = 0,
|
||||
@ -16056,7 +16051,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_SPECIAL,
|
||||
.thawsUser = TRUE,
|
||||
.argument = TYPE_FIRE,
|
||||
.argument = { .type = TYPE_FIRE },
|
||||
.additionalEffects = ADDITIONAL_EFFECTS({
|
||||
.moveEffect = MOVE_EFFECT_REMOVE_ARG_TYPE,
|
||||
.self = TRUE,
|
||||
@ -16720,7 +16715,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = HOLD_EFFECT_MEMORY,
|
||||
.argument = { .holdEffect = HOLD_EFFECT_MEMORY },
|
||||
.makesContact = TRUE,
|
||||
.contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
|
||||
.contestCategory = CONTEST_CATEGORY_BEAUTY,
|
||||
@ -16910,7 +16905,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_SPECIAL,
|
||||
.argument = B_UPDATED_MOVE_DATA >= GEN_8 ? 100 : 50, // restores 100% HP instead of 50% HP
|
||||
.argument = { .absorbPercentage = B_UPDATED_MOVE_DATA >= GEN_8 ? 100 : 50 },
|
||||
.mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8,
|
||||
.metronomeBanned = TRUE,
|
||||
.healingMove = B_HEAL_BLOCKING >= GEN_6,
|
||||
@ -17273,7 +17268,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_STATUS,
|
||||
.argument = TYPE_PSYCHIC,
|
||||
.argument = { .type = TYPE_PSYCHIC },
|
||||
.magicCoatAffected = TRUE,
|
||||
.powderMove = TRUE,
|
||||
.contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
|
||||
@ -18019,7 +18014,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.makesContact = TRUE,
|
||||
.argument = ARG_TRY_REMOVE_TERRAIN_FAIL, // Remove a field terrain if there is one and hit, otherwise fail.
|
||||
.argument = { .moveProperty = ARG_TRY_REMOVE_TERRAIN_FAIL }, // Remove a field terrain if there is one and hit, otherwise fail.
|
||||
.skyBattleBanned = TRUE,
|
||||
.contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
|
||||
.contestCategory = CONTEST_CATEGORY_TOUGH,
|
||||
@ -18042,7 +18037,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MOVE_EFFECT_SCALE_SHOT,
|
||||
.argument = { .moveProperty = MOVE_EFFECT_SCALE_SHOT },
|
||||
.contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER,
|
||||
.contestCategory = CONTEST_CATEGORY_COOL,
|
||||
.contestComboStarterId = 0,
|
||||
@ -18065,7 +18060,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_SPECIAL,
|
||||
.instructBanned = TRUE,
|
||||
.argument = TWO_TURN_ARG(STRINGID_METEORBEAMCHARGING),
|
||||
.argument.twoTurnAttack = { .stringId = STRINGID_METEORBEAMCHARGING },
|
||||
.additionalEffects = ADDITIONAL_EFFECTS({
|
||||
.moveEffect = MOVE_EFFECT_SP_ATK_PLUS_1,
|
||||
.self = TRUE,
|
||||
@ -18971,7 +18966,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = STATUS1_PSN_ANY,
|
||||
.argument = { .status = STATUS1_PSN_ANY },
|
||||
.additionalEffects = ADDITIONAL_EFFECTS({
|
||||
.moveEffect = MOVE_EFFECT_POISON,
|
||||
.chance = 50,
|
||||
@ -19083,7 +19078,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_SPECIAL,
|
||||
.argument = STATUS1_ANY,
|
||||
.argument = { .status = STATUS1_ANY },
|
||||
.additionalEffects = ADDITIONAL_EFFECTS({
|
||||
.moveEffect = MOVE_EFFECT_BURN,
|
||||
.chance = 30,
|
||||
@ -19446,7 +19441,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.makesContact = TRUE,
|
||||
.argument = ARG_TRY_REMOVE_TERRAIN_HIT, // Remove the active field terrain if there is one.
|
||||
.argument = { .moveProperty = ARG_TRY_REMOVE_TERRAIN_HIT }, // Remove the active field terrain if there is one.
|
||||
.skyBattleBanned = B_EXTRAPOLATED_MOVE_FLAGS,
|
||||
.battleAnimScript = gBattleAnimMove_IceSpinner,
|
||||
},
|
||||
@ -20028,7 +20023,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = 50,
|
||||
.argument = { .absorbPercentage = 50 },
|
||||
.makesContact = TRUE,
|
||||
.slicingMove = TRUE,
|
||||
.healingMove = TRUE,
|
||||
@ -20051,7 +20046,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.makesContact = TRUE,
|
||||
.metronomeBanned = TRUE,
|
||||
.argument = TYPE_ELECTRIC,
|
||||
.argument = { .type = TYPE_ELECTRIC },
|
||||
.additionalEffects = ADDITIONAL_EFFECTS({
|
||||
.moveEffect = MOVE_EFFECT_REMOVE_ARG_TYPE,
|
||||
.self = TRUE,
|
||||
@ -20330,7 +20325,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_BOTH,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_SPECIAL,
|
||||
.argument = 50,
|
||||
.argument = { .absorbPercentage = 50 },
|
||||
.thawsUser = TRUE,
|
||||
.metronomeBanned = TRUE,
|
||||
.healingMove = B_EXTRAPOLATED_MOVE_FLAGS,
|
||||
@ -20397,7 +20392,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_SPECIAL,
|
||||
.argument = TWO_TURN_ARG(STRINGID_ELECTROSHOTCHARGING, B_WEATHER_RAIN),
|
||||
.argument.twoTurnAttack = { .stringId = STRINGID_ELECTROSHOTCHARGING, .status = B_WEATHER_RAIN },
|
||||
.additionalEffects = ADDITIONAL_EFFECTS({
|
||||
.moveEffect = MOVE_EFFECT_SP_ATK_PLUS_1,
|
||||
.self = TRUE,
|
||||
@ -21021,7 +21016,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_SPECIAL,
|
||||
.argument = ARG_SET_PSYCHIC_TERRAIN, // Set Psychic Terrain. If there's a different field terrain active, overwrite it.
|
||||
.argument = { .moveProperty = ARG_SET_PSYCHIC_TERRAIN }, // Set Psychic Terrain. If there's a different field terrain active, overwrite it.
|
||||
.battleAnimScript = gBattleAnimMove_GenesisSupernova,
|
||||
},
|
||||
[MOVE_SINISTER_ARROW_RAID] =
|
||||
@ -21078,7 +21073,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = ARG_TRY_REMOVE_TERRAIN_HIT, // Remove the active field terrain if there is one.
|
||||
.argument = { .moveProperty = ARG_TRY_REMOVE_TERRAIN_HIT }, // Remove the active field terrain if there is one.
|
||||
.battleAnimScript = gBattleAnimMove_SplinteredStormshards,
|
||||
},
|
||||
[MOVE_LETS_SNUGGLE_FOREVER] =
|
||||
@ -21217,7 +21212,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_SUN,
|
||||
.argument = { .maxEffect = MAX_EFFECT_SUN },
|
||||
.battleAnimScript = gBattleAnimMove_MaxFlare,
|
||||
},
|
||||
|
||||
@ -21233,7 +21228,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_LOWER_SP_ATK,
|
||||
.argument = { .maxEffect = MAX_EFFECT_LOWER_SP_ATK },
|
||||
.battleAnimScript = gBattleAnimMove_MaxFlutterby,
|
||||
},
|
||||
|
||||
@ -21249,7 +21244,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_ELECTRIC_TERRAIN,
|
||||
.argument = { .maxEffect = MAX_EFFECT_ELECTRIC_TERRAIN },
|
||||
.battleAnimScript = gBattleAnimMove_MaxLightning,
|
||||
},
|
||||
|
||||
@ -21265,7 +21260,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_LOWER_SPEED,
|
||||
.argument = { .maxEffect = MAX_EFFECT_LOWER_SPEED },
|
||||
.battleAnimScript = gBattleAnimMove_MaxStrike,
|
||||
},
|
||||
|
||||
@ -21281,7 +21276,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_RAISE_TEAM_ATTACK,
|
||||
.argument = { .maxEffect = MAX_EFFECT_RAISE_TEAM_ATTACK },
|
||||
.battleAnimScript = gBattleAnimMove_MaxKnuckle,
|
||||
},
|
||||
|
||||
@ -21297,7 +21292,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_LOWER_DEFENSE,
|
||||
.argument = { .maxEffect = MAX_EFFECT_LOWER_DEFENSE },
|
||||
.battleAnimScript = gBattleAnimMove_MaxPhantasm,
|
||||
},
|
||||
|
||||
@ -21313,7 +21308,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_HAIL,
|
||||
.argument = { .maxEffect = MAX_EFFECT_HAIL },
|
||||
.battleAnimScript = gBattleAnimMove_MaxHailstorm,
|
||||
},
|
||||
|
||||
@ -21329,7 +21324,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_RAISE_TEAM_SP_ATK,
|
||||
.argument = { .maxEffect = MAX_EFFECT_RAISE_TEAM_SP_ATK },
|
||||
.battleAnimScript = gBattleAnimMove_MaxOoze,
|
||||
},
|
||||
|
||||
@ -21345,7 +21340,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_RAIN,
|
||||
.argument = { .maxEffect = MAX_EFFECT_RAIN },
|
||||
.battleAnimScript = gBattleAnimMove_MaxGeyser,
|
||||
},
|
||||
|
||||
@ -21361,7 +21356,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_RAISE_TEAM_SPEED,
|
||||
.argument = { .maxEffect = MAX_EFFECT_RAISE_TEAM_SPEED },
|
||||
.battleAnimScript = gBattleAnimMove_MaxAirstream,
|
||||
},
|
||||
|
||||
@ -21377,7 +21372,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_MISTY_TERRAIN,
|
||||
.argument = { .maxEffect = MAX_EFFECT_MISTY_TERRAIN },
|
||||
.battleAnimScript = gBattleAnimMove_MaxStarfall,
|
||||
},
|
||||
|
||||
@ -21393,7 +21388,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_LOWER_ATTACK,
|
||||
.argument = { .maxEffect = MAX_EFFECT_LOWER_ATTACK },
|
||||
.battleAnimScript = gBattleAnimMove_MaxWyrmwind,
|
||||
},
|
||||
|
||||
@ -21409,7 +21404,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_PSYCHIC_TERRAIN,
|
||||
.argument = { .maxEffect = MAX_EFFECT_PSYCHIC_TERRAIN },
|
||||
.battleAnimScript = gBattleAnimMove_MaxMindstorm,
|
||||
},
|
||||
|
||||
@ -21425,7 +21420,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_SANDSTORM,
|
||||
.argument = { .maxEffect = MAX_EFFECT_SANDSTORM },
|
||||
.battleAnimScript = gBattleAnimMove_MaxRockfall,
|
||||
},
|
||||
|
||||
@ -21441,7 +21436,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_RAISE_TEAM_SP_DEF,
|
||||
.argument = { .maxEffect = MAX_EFFECT_RAISE_TEAM_SP_DEF },
|
||||
.skyBattleBanned = B_EXTRAPOLATED_MOVE_FLAGS,
|
||||
.battleAnimScript = gBattleAnimMove_MaxQuake,
|
||||
},
|
||||
@ -21458,7 +21453,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_LOWER_SP_DEF,
|
||||
.argument = { .maxEffect = MAX_EFFECT_LOWER_SP_DEF },
|
||||
.battleAnimScript = gBattleAnimMove_MaxDarkness,
|
||||
},
|
||||
|
||||
@ -21474,7 +21469,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_GRASSY_TERRAIN,
|
||||
.argument = { .maxEffect = MAX_EFFECT_GRASSY_TERRAIN },
|
||||
.battleAnimScript = gBattleAnimMove_MaxOvergrowth,
|
||||
},
|
||||
|
||||
@ -21490,7 +21485,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_RAISE_TEAM_DEFENSE,
|
||||
.argument = { .maxEffect = MAX_EFFECT_RAISE_TEAM_DEFENSE },
|
||||
.battleAnimScript = gBattleAnimMove_MaxSteelspike,
|
||||
},
|
||||
|
||||
@ -21506,7 +21501,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_VINE_LASH,
|
||||
.argument = { .maxEffect = MAX_EFFECT_VINE_LASH },
|
||||
.battleAnimScript = gBattleAnimMove_GMaxVineLash,
|
||||
},
|
||||
|
||||
@ -21522,7 +21517,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_WILDFIRE,
|
||||
.argument = { .maxEffect = MAX_EFFECT_WILDFIRE },
|
||||
.battleAnimScript = gBattleAnimMove_GMaxWildfire,
|
||||
},
|
||||
|
||||
@ -21538,7 +21533,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_CANNONADE,
|
||||
.argument = { .maxEffect = MAX_EFFECT_CANNONADE },
|
||||
.battleAnimScript = gBattleAnimMove_GMaxCannonade,
|
||||
},
|
||||
|
||||
@ -21554,7 +21549,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_EFFECT_SPORE_FOES,
|
||||
.argument = { .maxEffect = MAX_EFFECT_EFFECT_SPORE_FOES },
|
||||
.battleAnimScript = gBattleAnimMove_GMaxBefuddle,
|
||||
},
|
||||
|
||||
@ -21570,7 +21565,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_PARALYZE_FOES,
|
||||
.argument = { .maxEffect = MAX_EFFECT_PARALYZE_FOES },
|
||||
.battleAnimScript = gBattleAnimMove_GMaxVoltCrash,
|
||||
},
|
||||
|
||||
@ -21586,7 +21581,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_CONFUSE_FOES_PAY_DAY,
|
||||
.argument = { .maxEffect = MAX_EFFECT_CONFUSE_FOES_PAY_DAY },
|
||||
.battleAnimScript = gBattleAnimMove_GMaxGoldRush,
|
||||
},
|
||||
|
||||
@ -21602,7 +21597,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_CRIT_PLUS,
|
||||
.argument = { .maxEffect = MAX_EFFECT_CRIT_PLUS },
|
||||
.battleAnimScript = gBattleAnimMove_GMaxChiStrike,
|
||||
},
|
||||
|
||||
@ -21618,7 +21613,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_MEAN_LOOK,
|
||||
.argument = { .maxEffect = MAX_EFFECT_MEAN_LOOK },
|
||||
.battleAnimScript = gBattleAnimMove_GMaxTerror,
|
||||
},
|
||||
|
||||
@ -21634,7 +21629,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_LOWER_SPEED_2_FOES,
|
||||
.argument = { .maxEffect = MAX_EFFECT_LOWER_SPEED_2_FOES },
|
||||
.battleAnimScript = gBattleAnimMove_GMaxFoamBurst,
|
||||
},
|
||||
|
||||
@ -21650,7 +21645,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_AURORA_VEIL,
|
||||
.argument = { .maxEffect = MAX_EFFECT_AURORA_VEIL },
|
||||
.battleAnimScript = gBattleAnimMove_GMaxResonance,
|
||||
},
|
||||
|
||||
@ -21666,7 +21661,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_INFATUATE_FOES,
|
||||
.argument = { .maxEffect = MAX_EFFECT_INFATUATE_FOES },
|
||||
.battleAnimScript = gBattleAnimMove_GMaxCuddle,
|
||||
},
|
||||
|
||||
@ -21682,7 +21677,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_RECYCLE_BERRIES,
|
||||
.argument = { .maxEffect = MAX_EFFECT_RECYCLE_BERRIES },
|
||||
.battleAnimScript = gBattleAnimMove_GMaxReplenish,
|
||||
},
|
||||
|
||||
@ -21698,7 +21693,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_POISON_FOES,
|
||||
.argument = { .maxEffect = MAX_EFFECT_POISON_FOES },
|
||||
.battleAnimScript = gBattleAnimMove_GMaxMalodor,
|
||||
},
|
||||
|
||||
@ -21714,7 +21709,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_TORMENT_FOES,
|
||||
.argument = { .maxEffect = MAX_EFFECT_TORMENT_FOES },
|
||||
.battleAnimScript = gBattleAnimMove_GMaxMeltdown,
|
||||
},
|
||||
|
||||
@ -21730,7 +21725,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_FIXED_POWER,
|
||||
.argument = { .maxEffect = MAX_EFFECT_FIXED_POWER },
|
||||
.ignoresTargetAbility = TRUE,
|
||||
.battleAnimScript = gBattleAnimMove_GMaxDrumSolo,
|
||||
},
|
||||
@ -21747,7 +21742,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_FIXED_POWER,
|
||||
.argument = { .maxEffect = MAX_EFFECT_FIXED_POWER },
|
||||
.ignoresTargetAbility = TRUE,
|
||||
.battleAnimScript = gBattleAnimMove_GMaxFireball,
|
||||
},
|
||||
@ -21764,7 +21759,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_FIXED_POWER,
|
||||
.argument = { .maxEffect = MAX_EFFECT_FIXED_POWER },
|
||||
.ignoresTargetAbility = TRUE,
|
||||
.battleAnimScript = gBattleAnimMove_GMaxHydrosnipe,
|
||||
},
|
||||
@ -21781,7 +21776,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_DEFOG,
|
||||
.argument = { .maxEffect = MAX_EFFECT_DEFOG },
|
||||
.battleAnimScript = gBattleAnimMove_GMaxWindRage,
|
||||
},
|
||||
|
||||
@ -21797,7 +21792,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_GRAVITY,
|
||||
.argument = { .maxEffect = MAX_EFFECT_GRAVITY },
|
||||
.battleAnimScript = gBattleAnimMove_GMaxGravitas,
|
||||
},
|
||||
|
||||
@ -21813,7 +21808,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_STEALTH_ROCK,
|
||||
.argument = { .maxEffect = MAX_EFFECT_STEALTH_ROCK },
|
||||
.battleAnimScript = gBattleAnimMove_GMaxStonesurge,
|
||||
},
|
||||
|
||||
@ -21829,7 +21824,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_VOLCALITH,
|
||||
.argument = { .maxEffect = MAX_EFFECT_VOLCALITH },
|
||||
.battleAnimScript = gBattleAnimMove_GMaxVolcalith,
|
||||
},
|
||||
|
||||
@ -21845,7 +21840,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_LOWER_EVASIVENESS_FOES,
|
||||
.argument = { .maxEffect = MAX_EFFECT_LOWER_EVASIVENESS_FOES },
|
||||
.battleAnimScript = gBattleAnimMove_GMaxTartness,
|
||||
},
|
||||
|
||||
@ -21861,7 +21856,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_AROMATHERAPY,
|
||||
.argument = { .maxEffect = MAX_EFFECT_AROMATHERAPY },
|
||||
.battleAnimScript = gBattleAnimMove_GMaxSweetness,
|
||||
},
|
||||
|
||||
@ -21877,7 +21872,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_SANDBLAST_FOES,
|
||||
.argument = { .maxEffect = MAX_EFFECT_SANDBLAST_FOES },
|
||||
.battleAnimScript = gBattleAnimMove_GMaxSandblast,
|
||||
},
|
||||
|
||||
@ -21893,7 +21888,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_POISON_PARALYZE_FOES,
|
||||
.argument = { .maxEffect = MAX_EFFECT_POISON_PARALYZE_FOES },
|
||||
.battleAnimScript = gBattleAnimMove_GMaxStunShock,
|
||||
},
|
||||
|
||||
@ -21909,7 +21904,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_FIRE_SPIN_FOES,
|
||||
.argument = { .maxEffect = MAX_EFFECT_FIRE_SPIN_FOES },
|
||||
.battleAnimScript = gBattleAnimMove_GMaxCentiferno,
|
||||
},
|
||||
|
||||
@ -21925,7 +21920,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_CONFUSE_FOES,
|
||||
.argument = { .maxEffect = MAX_EFFECT_CONFUSE_FOES },
|
||||
.battleAnimScript = gBattleAnimMove_GMaxSmite,
|
||||
},
|
||||
|
||||
@ -21942,7 +21937,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_YAWN_FOE,
|
||||
.argument = { .maxEffect = MAX_EFFECT_YAWN_FOE },
|
||||
.battleAnimScript = gBattleAnimMove_GMaxSnooze,
|
||||
},
|
||||
|
||||
@ -21958,7 +21953,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_HEAL_TEAM,
|
||||
.argument = { .maxEffect = MAX_EFFECT_HEAL_TEAM },
|
||||
.battleAnimScript = gBattleAnimMove_GMaxFinale,
|
||||
},
|
||||
|
||||
@ -21974,7 +21969,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_STEELSURGE,
|
||||
.argument = { .maxEffect = MAX_EFFECT_STEELSURGE },
|
||||
.battleAnimScript = gBattleAnimMove_GMaxSteelsurge,
|
||||
},
|
||||
|
||||
@ -21990,7 +21985,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_SPITE,
|
||||
.argument = { .maxEffect = MAX_EFFECT_SPITE },
|
||||
.battleAnimScript = gBattleAnimMove_GMaxDepletion,
|
||||
},
|
||||
|
||||
@ -22006,7 +22001,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_BYPASS_PROTECT,
|
||||
.argument = { .maxEffect = MAX_EFFECT_BYPASS_PROTECT },
|
||||
.battleAnimScript = gBattleAnimMove_GMaxOneBlow,
|
||||
},
|
||||
|
||||
@ -22022,7 +22017,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = DAMAGE_CATEGORY_PHYSICAL,
|
||||
.argument = MAX_EFFECT_BYPASS_PROTECT,
|
||||
.argument = { .maxEffect = MAX_EFFECT_BYPASS_PROTECT },
|
||||
.battleAnimScript = gBattleAnimMove_GMaxRapidFlow,
|
||||
},
|
||||
|
||||
|
||||
@ -29,7 +29,7 @@ SINGLE_BATTLE_TEST("Cud Chew will activate Oran Berry effect again on the next t
|
||||
ASSUME(gItemsInfo[ITEM_ORAN_BERRY].holdEffect == HOLD_EFFECT_RESTORE_HP);
|
||||
ASSUME(gItemsInfo[ITEM_ORAN_BERRY].holdEffectParam == 10);
|
||||
ASSUME(gMovesInfo[MOVE_DRAGON_RAGE].effect == EFFECT_FIXED_DAMAGE_ARG);
|
||||
ASSUME(gMovesInfo[MOVE_DRAGON_RAGE].argument == 40);
|
||||
ASSUME(gMovesInfo[MOVE_DRAGON_RAGE].argument.fixedDamage == 40);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_TAUROS_PALDEA_COMBAT) { MaxHP(60); HP(60); Ability(ABILITY_CUD_CHEW); Item(ITEM_ORAN_BERRY); }
|
||||
} WHEN {
|
||||
|
||||
@ -37,7 +37,7 @@ AI_SINGLE_BATTLE_TEST("AI sees increased base power of Smelling Salt")
|
||||
GIVEN {
|
||||
ASSUME(B_UPDATED_MOVE_DATA >= GEN_6);
|
||||
ASSUME(gMovesInfo[MOVE_SMELLING_SALTS].effect == EFFECT_DOUBLE_POWER_ON_ARG_STATUS);
|
||||
ASSUME(gMovesInfo[MOVE_SMELLING_SALTS].argument == STATUS1_PARALYSIS);
|
||||
ASSUME(gMovesInfo[MOVE_SMELLING_SALTS].argument.status == STATUS1_PARALYSIS);
|
||||
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
|
||||
PLAYER(SPECIES_WOBBUFFET) { HP(60); Status1(status1); }
|
||||
OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_BODY_SLAM, MOVE_SMELLING_SALTS); }
|
||||
@ -59,7 +59,7 @@ AI_SINGLE_BATTLE_TEST("AI sees increased base power of Wake Up Slap")
|
||||
GIVEN {
|
||||
ASSUME(B_UPDATED_MOVE_DATA >= GEN_6);
|
||||
ASSUME(gMovesInfo[MOVE_WAKE_UP_SLAP].effect == EFFECT_DOUBLE_POWER_ON_ARG_STATUS);
|
||||
ASSUME(gMovesInfo[MOVE_WAKE_UP_SLAP].argument == STATUS1_SLEEP);
|
||||
ASSUME(gMovesInfo[MOVE_WAKE_UP_SLAP].argument.status == STATUS1_SLEEP);
|
||||
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
|
||||
PLAYER(SPECIES_MEGANIUM) { HP(35); Status1(status1); }
|
||||
OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_BODY_SLAM, MOVE_WAKE_UP_SLAP); }
|
||||
|
||||
@ -626,7 +626,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Strike lowers single opponent's speed")
|
||||
{
|
||||
GIVEN {
|
||||
// Fails?: ASSUME(GetMaxMove(B_POSITION_PLAYER_LEFT, MOVE_TACKLE) == MOVE_MAX_STRIKE);
|
||||
ASSUME(gMovesInfo[MOVE_MAX_STRIKE].argument == MAX_EFFECT_LOWER_SPEED);
|
||||
ASSUME(gMovesInfo[MOVE_MAX_STRIKE].argument.maxEffect == MAX_EFFECT_LOWER_SPEED);
|
||||
OPPONENT(SPECIES_WOBBUFFET) { Speed(100); }
|
||||
PLAYER(SPECIES_WOBBUFFET) { Speed(80); }
|
||||
} WHEN {
|
||||
@ -650,7 +650,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Strike lowers single opponent's speed")
|
||||
DOUBLE_BATTLE_TEST("(DYNAMAX) Max Strike lowers both opponents' speed")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_MAX_STRIKE].argument == MAX_EFFECT_LOWER_SPEED);
|
||||
ASSUME(gMovesInfo[MOVE_MAX_STRIKE].argument.maxEffect == MAX_EFFECT_LOWER_SPEED);
|
||||
PLAYER(SPECIES_WOBBUFFET) { Speed(80); }
|
||||
PLAYER(SPECIES_WOBBUFFET) { Speed(79); }
|
||||
OPPONENT(SPECIES_WOBBUFFET) {Speed(100); }
|
||||
@ -687,7 +687,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) Max Knuckle raises both allies' attack")
|
||||
{
|
||||
s16 damage[4];
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_MAX_KNUCKLE].argument == MAX_EFFECT_RAISE_TEAM_ATTACK);
|
||||
ASSUME(gMovesInfo[MOVE_MAX_KNUCKLE].argument.maxEffect == MAX_EFFECT_RAISE_TEAM_ATTACK);
|
||||
ASSUME(gMovesInfo[MOVE_CLOSE_COMBAT].category == DAMAGE_CATEGORY_PHYSICAL);
|
||||
ASSUME(gMovesInfo[MOVE_TACKLE].category == DAMAGE_CATEGORY_PHYSICAL);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
@ -729,7 +729,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) Max Knuckle raises both allies' attack")
|
||||
SINGLE_BATTLE_TEST("(DYNAMAX) Max Flare sets up sunlight")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_MAX_FLARE].argument == MAX_EFFECT_SUN);
|
||||
ASSUME(gMovesInfo[MOVE_MAX_FLARE].argument.maxEffect == MAX_EFFECT_SUN);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
@ -745,7 +745,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Flare sets up sunlight")
|
||||
SINGLE_BATTLE_TEST("(DYNAMAX) Max Geyser sets up heavy rain")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_MAX_GEYSER].argument == MAX_EFFECT_RAIN);
|
||||
ASSUME(gMovesInfo[MOVE_MAX_GEYSER].argument.maxEffect == MAX_EFFECT_RAIN);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
@ -761,7 +761,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Geyser sets up heavy rain")
|
||||
SINGLE_BATTLE_TEST("(DYNAMAX) Max Hailstorm sets up hail")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_MAX_HAILSTORM].argument == MAX_EFFECT_HAIL);
|
||||
ASSUME(gMovesInfo[MOVE_MAX_HAILSTORM].argument.maxEffect == MAX_EFFECT_HAIL);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
@ -777,7 +777,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Hailstorm sets up hail")
|
||||
SINGLE_BATTLE_TEST("(DYNAMAX) Max Rockfall sets up a sandstorm")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_MAX_ROCKFALL].argument == MAX_EFFECT_SANDSTORM);
|
||||
ASSUME(gMovesInfo[MOVE_MAX_ROCKFALL].argument.maxEffect == MAX_EFFECT_SANDSTORM);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
@ -794,7 +794,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Overgrowth sets up Grassy Terrain")
|
||||
{
|
||||
s32 maxHP = 490; // Because of recalculated stats upon Dynamaxing
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_MAX_OVERGROWTH].argument == MAX_EFFECT_GRASSY_TERRAIN);
|
||||
ASSUME(gMovesInfo[MOVE_MAX_OVERGROWTH].argument.maxEffect == MAX_EFFECT_GRASSY_TERRAIN);
|
||||
ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].baseHP == 190);
|
||||
OPPONENT(SPECIES_WOBBUFFET) { MaxHP(maxHP); HP(maxHP / 2); };
|
||||
PLAYER(SPECIES_WOBBUFFET) { MaxHP(maxHP); HP(maxHP / 2); };
|
||||
@ -814,7 +814,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Overgrowth sets up Grassy Terrain")
|
||||
SINGLE_BATTLE_TEST("(DYNAMAX) Max Mindstorm sets up Psychic Terrain")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_MAX_MINDSTORM].argument == MAX_EFFECT_PSYCHIC_TERRAIN);
|
||||
ASSUME(gMovesInfo[MOVE_MAX_MINDSTORM].argument.maxEffect == MAX_EFFECT_PSYCHIC_TERRAIN);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
@ -831,7 +831,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Mindstorm sets up Psychic Terrain")
|
||||
SINGLE_BATTLE_TEST("(DYNAMAX) Max Lightning sets up Electric Terrain")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_MAX_LIGHTNING].argument == MAX_EFFECT_ELECTRIC_TERRAIN);
|
||||
ASSUME(gMovesInfo[MOVE_MAX_LIGHTNING].argument.maxEffect == MAX_EFFECT_ELECTRIC_TERRAIN);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
@ -846,7 +846,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Lightning sets up Electric Terrain")
|
||||
SINGLE_BATTLE_TEST("(DYNAMAX) Max Starfall sets up Misty Terrain")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_MAX_STARFALL].argument == MAX_EFFECT_MISTY_TERRAIN);
|
||||
ASSUME(gMovesInfo[MOVE_MAX_STARFALL].argument.maxEffect == MAX_EFFECT_MISTY_TERRAIN);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
@ -861,7 +861,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Starfall sets up Misty Terrain")
|
||||
SINGLE_BATTLE_TEST("(DYNAMAX) G-Max Stonesurge sets up Stealth Rocks")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_STONESURGE].argument == MAX_EFFECT_STEALTH_ROCK);
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_STONESURGE].argument.maxEffect == MAX_EFFECT_STEALTH_ROCK);
|
||||
PLAYER(SPECIES_DREDNAW) { GigantamaxFactor(TRUE); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
@ -881,7 +881,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) G-Max Stonesurge sets up Stealth Rocks")
|
||||
SINGLE_BATTLE_TEST("(DYNAMAX) G-Max Steelsurge sets up sharp steel")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_STEELSURGE].argument == MAX_EFFECT_STEELSURGE);
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_STEELSURGE].argument.maxEffect == MAX_EFFECT_STEELSURGE);
|
||||
PLAYER(SPECIES_COPPERAJAH) { GigantamaxFactor(TRUE); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_HATTERENE);
|
||||
@ -912,7 +912,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) G-Max Hydrosnipe has fixed power and ignores abili
|
||||
PARAMETRIZE { move = MOVE_WATER_GUN; }
|
||||
PARAMETRIZE { move = MOVE_HYDRO_CANNON; }
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_HYDROSNIPE].argument == MAX_EFFECT_FIXED_POWER);
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_HYDROSNIPE].argument.maxEffect == MAX_EFFECT_FIXED_POWER);
|
||||
PLAYER(SPECIES_INTELEON) { GigantamaxFactor(TRUE); }
|
||||
OPPONENT(SPECIES_ARCTOVISH) { Ability(ABILITY_WATER_ABSORB); }
|
||||
} WHEN {
|
||||
@ -928,7 +928,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) G-Max Hydrosnipe has fixed power and ignores abili
|
||||
DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Volt Crash paralyzes both opponents")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_VOLT_CRASH].argument == MAX_EFFECT_PARALYZE_FOES);
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_VOLT_CRASH].argument.maxEffect == MAX_EFFECT_PARALYZE_FOES);
|
||||
PLAYER(SPECIES_PIKACHU) { GigantamaxFactor(TRUE); }
|
||||
PLAYER(SPECIES_PICHU);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
@ -955,7 +955,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Stun Shock paralyzes or poisons both opponen
|
||||
PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = STATUS1_PARALYSIS; }
|
||||
PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = STATUS1_POISON; }
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_STUN_SHOCK].argument == MAX_EFFECT_POISON_PARALYZE_FOES);
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_STUN_SHOCK].argument.maxEffect == MAX_EFFECT_POISON_PARALYZE_FOES);
|
||||
PLAYER(SPECIES_TOXTRICITY) { GigantamaxFactor(TRUE); }
|
||||
PLAYER(SPECIES_TOXEL);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
@ -992,7 +992,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Stun Shock paralyzes or poisons both opponen
|
||||
DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Stun Shock chooses statuses before considering immunities")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_STUN_SHOCK].argument == MAX_EFFECT_POISON_PARALYZE_FOES);
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_STUN_SHOCK].argument.maxEffect == MAX_EFFECT_POISON_PARALYZE_FOES);
|
||||
PLAYER(SPECIES_TOXTRICITY) { GigantamaxFactor(TRUE); }
|
||||
PLAYER(SPECIES_TOXEL);
|
||||
OPPONENT(SPECIES_GARBODOR);
|
||||
@ -1025,7 +1025,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Befuddle paralyzes, poisons, or sleeps both
|
||||
PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = STATUS1_POISON; }
|
||||
PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = STATUS1_SLEEP; }
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_BEFUDDLE].argument == MAX_EFFECT_EFFECT_SPORE_FOES);
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_BEFUDDLE].argument.maxEffect == MAX_EFFECT_EFFECT_SPORE_FOES);
|
||||
PLAYER(SPECIES_BUTTERFREE) { GigantamaxFactor(TRUE); }
|
||||
PLAYER(SPECIES_CATERPIE);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
@ -1069,7 +1069,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Befuddle paralyzes, poisons, or sleeps both
|
||||
DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Gold Rush confuses both opponents and generates money")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_GOLD_RUSH].argument == MAX_EFFECT_CONFUSE_FOES_PAY_DAY);
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_GOLD_RUSH].argument.maxEffect == MAX_EFFECT_CONFUSE_FOES_PAY_DAY);
|
||||
PLAYER(SPECIES_MEOWTH) { GigantamaxFactor(TRUE); }
|
||||
PLAYER(SPECIES_PERSIAN);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
@ -1089,7 +1089,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Gold Rush confuses both opponents and genera
|
||||
DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Smite confuses both opponents")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_SMITE].argument == MAX_EFFECT_CONFUSE_FOES);
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_SMITE].argument.maxEffect == MAX_EFFECT_CONFUSE_FOES);
|
||||
PLAYER(SPECIES_HATTERENE) { GigantamaxFactor(TRUE); }
|
||||
PLAYER(SPECIES_HATENNA);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
@ -1108,7 +1108,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Smite confuses both opponents")
|
||||
DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Cuddle infatuates both opponents, if possible")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_CUDDLE].argument == MAX_EFFECT_INFATUATE_FOES);
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_CUDDLE].argument.maxEffect == MAX_EFFECT_INFATUATE_FOES);
|
||||
PLAYER(SPECIES_EEVEE) { Gender(MON_MALE); GigantamaxFactor(TRUE); }
|
||||
PLAYER(SPECIES_EEVEE);
|
||||
OPPONENT(SPECIES_WOBBUFFET) { Gender(MON_FEMALE); }
|
||||
@ -1129,7 +1129,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Cuddle infatuates both opponents, if possibl
|
||||
DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Terror traps both opponents")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_TERROR].argument == MAX_EFFECT_MEAN_LOOK);
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_TERROR].argument.maxEffect == MAX_EFFECT_MEAN_LOOK);
|
||||
PLAYER(SPECIES_GENGAR) { GigantamaxFactor(TRUE); }
|
||||
PLAYER(SPECIES_GASTLY);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
@ -1150,7 +1150,7 @@ TO_DO_BATTLE_TEST("(DYNAMAX) Baton Pass passes G-Max Terror's escape prevention
|
||||
DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Meltdown torments both opponents for 3 turns")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_MELTDOWN].argument == MAX_EFFECT_TORMENT_FOES);
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_MELTDOWN].argument.maxEffect == MAX_EFFECT_TORMENT_FOES);
|
||||
PLAYER(SPECIES_MELMETAL) { GigantamaxFactor(TRUE); }
|
||||
PLAYER(SPECIES_MELTAN);
|
||||
OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_SPLASH, MOVE_CELEBRATE); }
|
||||
@ -1187,7 +1187,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Wildfire sets a field effect that damages no
|
||||
{
|
||||
s16 damage;
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_WILDFIRE].argument == MAX_EFFECT_WILDFIRE);
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_WILDFIRE].argument.maxEffect == MAX_EFFECT_WILDFIRE);
|
||||
PLAYER(SPECIES_CHARIZARD) { GigantamaxFactor(TRUE); }
|
||||
PLAYER(SPECIES_CHARMANDER);
|
||||
OPPONENT(SPECIES_WOBBUFFET) { HP(600); MaxHP(600); }
|
||||
@ -1233,7 +1233,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Replenish recycles allies' berries 50\% of t
|
||||
{
|
||||
PASSES_RANDOMLY(1, 2, RNG_G_MAX_REPLENISH);
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_REPLENISH].argument == MAX_EFFECT_RECYCLE_BERRIES);
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_REPLENISH].argument.maxEffect == MAX_EFFECT_RECYCLE_BERRIES);
|
||||
PLAYER(SPECIES_SNORLAX) { Item(ITEM_APICOT_BERRY); GigantamaxFactor(TRUE); }
|
||||
PLAYER(SPECIES_MUNCHLAX) { Item(ITEM_APICOT_BERRY); Ability(ABILITY_THICK_FAT); }
|
||||
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_APICOT_BERRY); }
|
||||
@ -1261,7 +1261,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Snooze makes only the target drowsy")
|
||||
{
|
||||
PASSES_RANDOMLY(1, 2, RNG_G_MAX_SNOOZE);
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_SNOOZE].argument == MAX_EFFECT_YAWN_FOE);
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_SNOOZE].argument.maxEffect == MAX_EFFECT_YAWN_FOE);
|
||||
ASSUME(gMovesInfo[MOVE_DARK_PULSE].category == DAMAGE_CATEGORY_SPECIAL); // Otherwise, Blissey faints.
|
||||
PLAYER(SPECIES_GRIMMSNARL) { GigantamaxFactor(TRUE); }
|
||||
PLAYER(SPECIES_IMPIDIMP);
|
||||
@ -1285,7 +1285,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Finale heals allies by 1/6 of their health")
|
||||
{
|
||||
s16 damage1, damage2;
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_FINALE].argument == MAX_EFFECT_HEAL_TEAM);
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_FINALE].argument.maxEffect == MAX_EFFECT_HEAL_TEAM);
|
||||
PLAYER(SPECIES_ALCREMIE) { HP(1); GigantamaxFactor(TRUE); }
|
||||
PLAYER(SPECIES_MILCERY) { HP(1); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
@ -1305,7 +1305,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Finale heals allies by 1/6 of their health")
|
||||
DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Sweetness cures allies' status conditions")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_SWEETNESS].argument == MAX_EFFECT_AROMATHERAPY);
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_SWEETNESS].argument.maxEffect == MAX_EFFECT_AROMATHERAPY);
|
||||
PLAYER(SPECIES_APPLETUN) { Status1(STATUS1_POISON); GigantamaxFactor(TRUE); }
|
||||
PLAYER(SPECIES_APPLIN) { Status1(STATUS1_POISON); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
@ -1325,7 +1325,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Sweetness cures allies' status conditions")
|
||||
DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Centiferno traps both opponents in Fire Spin")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_CENTIFERNO].argument == MAX_EFFECT_FIRE_SPIN_FOES);
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_CENTIFERNO].argument.maxEffect == MAX_EFFECT_FIRE_SPIN_FOES);
|
||||
PLAYER(SPECIES_CENTISKORCH) { GigantamaxFactor(TRUE); }
|
||||
PLAYER(SPECIES_SIZZLIPEDE);
|
||||
PLAYER(SPECIES_SIZZLIPEDE);
|
||||
@ -1354,7 +1354,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Chi Strike boosts allies' crit chance")
|
||||
u32 j;
|
||||
GIVEN {
|
||||
ASSUME(B_CRIT_CHANCE >= GEN_6);
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_CHI_STRIKE].argument == MAX_EFFECT_CRIT_PLUS);
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_CHI_STRIKE].argument.maxEffect == MAX_EFFECT_CRIT_PLUS);
|
||||
PLAYER(SPECIES_MACHAMP) { GigantamaxFactor(TRUE); }
|
||||
PLAYER(SPECIES_MACHOP);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
@ -1386,7 +1386,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Depletion takes away 2 PP from the target's
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_DRAGON_CLAW].category == DAMAGE_CATEGORY_PHYSICAL); // Otherwise Sableye faints.
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_DEPLETION].argument == MAX_EFFECT_SPITE);
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_DEPLETION].argument.maxEffect == MAX_EFFECT_SPITE);
|
||||
PLAYER(SPECIES_DURALUDON) { GigantamaxFactor(TRUE); }
|
||||
PLAYER(SPECIES_WYNAUT);
|
||||
// Dynamax behaves weird with test turn order because stats are recalculated.
|
||||
@ -1408,7 +1408,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max One Blow bypasses Max Guard for full damage"
|
||||
PARAMETRIZE { protect = TRUE; }
|
||||
PARAMETRIZE { protect = FALSE; }
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_ONE_BLOW].argument == MAX_EFFECT_BYPASS_PROTECT);
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_ONE_BLOW].argument.maxEffect == MAX_EFFECT_BYPASS_PROTECT);
|
||||
PLAYER(SPECIES_URSHIFU) { GigantamaxFactor(TRUE); }
|
||||
PLAYER(SPECIES_KUBFU);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
|
||||
@ -5,7 +5,7 @@ ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gItemsInfo[ITEM_LIECHI_BERRY].holdEffect == HOLD_EFFECT_ATTACK_UP);
|
||||
ASSUME(gMovesInfo[MOVE_DRAGON_RAGE].effect == EFFECT_FIXED_DAMAGE_ARG);
|
||||
ASSUME(gMovesInfo[MOVE_DRAGON_RAGE].argument == 40);
|
||||
ASSUME(gMovesInfo[MOVE_DRAGON_RAGE].argument.fixedDamage == 40);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Liechi Berry raises the holder's Attack by one stage when HP drops to 1/4 or below")
|
||||
|
||||
@ -5,7 +5,7 @@ ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gItemsInfo[ITEM_LANSAT_BERRY].holdEffect == HOLD_EFFECT_CRITICAL_UP);
|
||||
ASSUME(gMovesInfo[MOVE_DRAGON_RAGE].effect == EFFECT_FIXED_DAMAGE_ARG);
|
||||
ASSUME(gMovesInfo[MOVE_DRAGON_RAGE].argument == 40);
|
||||
ASSUME(gMovesInfo[MOVE_DRAGON_RAGE].argument.fixedDamage == 40);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Lansat Berry raises the holder's critical-hit-ratio by two stages when HP drops to 1/4 or below")
|
||||
|
||||
@ -5,7 +5,7 @@ ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gItemsInfo[ITEM_GANLON_BERRY].holdEffect == HOLD_EFFECT_DEFENSE_UP);
|
||||
ASSUME(gMovesInfo[MOVE_DRAGON_RAGE].effect == EFFECT_FIXED_DAMAGE_ARG);
|
||||
ASSUME(gMovesInfo[MOVE_DRAGON_RAGE].argument == 40);
|
||||
ASSUME(gMovesInfo[MOVE_DRAGON_RAGE].argument.fixedDamage == 40);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Ganlon Berry raises the holder's Defense by one stage when HP drops to 1/4 or below")
|
||||
|
||||
@ -5,7 +5,7 @@ ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gItemsInfo[ITEM_MICLE_BERRY].holdEffect == HOLD_EFFECT_MICLE_BERRY);
|
||||
ASSUME(gMovesInfo[MOVE_DRAGON_RAGE].effect == EFFECT_FIXED_DAMAGE_ARG);
|
||||
ASSUME(gMovesInfo[MOVE_DRAGON_RAGE].argument == 40);
|
||||
ASSUME(gMovesInfo[MOVE_DRAGON_RAGE].argument.fixedDamage == 40);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Micle Berry raises the holder's accuracy by 1.2 when HP drops to 1/4 or below")
|
||||
|
||||
@ -5,7 +5,7 @@ ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gItemsInfo[ITEM_PETAYA_BERRY].holdEffect == HOLD_EFFECT_SP_ATTACK_UP);
|
||||
ASSUME(gMovesInfo[MOVE_DRAGON_RAGE].effect == EFFECT_FIXED_DAMAGE_ARG);
|
||||
ASSUME(gMovesInfo[MOVE_DRAGON_RAGE].argument == 40);
|
||||
ASSUME(gMovesInfo[MOVE_DRAGON_RAGE].argument.fixedDamage == 40);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Petaya Berry raises the holder's Sp. Atk by one stage when HP drops to 1/4 or below")
|
||||
|
||||
@ -5,7 +5,7 @@ ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gItemsInfo[ITEM_APICOT_BERRY].holdEffect == HOLD_EFFECT_SP_DEFENSE_UP);
|
||||
ASSUME(gMovesInfo[MOVE_DRAGON_RAGE].effect == EFFECT_FIXED_DAMAGE_ARG);
|
||||
ASSUME(gMovesInfo[MOVE_DRAGON_RAGE].argument == 40);
|
||||
ASSUME(gMovesInfo[MOVE_DRAGON_RAGE].argument.fixedDamage == 40);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Apicot Berry raises the holder's Sp. Def by one stage when HP drops to 1/4 or below")
|
||||
|
||||
@ -5,7 +5,7 @@ ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gItemsInfo[ITEM_SALAC_BERRY].holdEffect == HOLD_EFFECT_SPEED_UP);
|
||||
ASSUME(gMovesInfo[MOVE_DRAGON_RAGE].effect == EFFECT_FIXED_DAMAGE_ARG);
|
||||
ASSUME(gMovesInfo[MOVE_DRAGON_RAGE].argument == 40);
|
||||
ASSUME(gMovesInfo[MOVE_DRAGON_RAGE].argument.fixedDamage == 40);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Salac Berry raises the holder's Speed by one stage when HP drops to 1/4 or below")
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gMovesInfo[MOVE_TECHNO_BLAST].effect == EFFECT_CHANGE_TYPE_ON_ITEM);
|
||||
ASSUME(gMovesInfo[MOVE_TECHNO_BLAST].argument == HOLD_EFFECT_DRIVE);
|
||||
ASSUME(gMovesInfo[MOVE_TECHNO_BLAST].argument.holdEffect == HOLD_EFFECT_DRIVE);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Techno Blast changes type depending on the drive the user holds")
|
||||
|
||||
@ -5,7 +5,7 @@ SINGLE_BATTLE_TEST("Burn Up user loses its Fire-type")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_BURN_UP].effect == EFFECT_FAIL_IF_NOT_ARG_TYPE);
|
||||
ASSUME(MoveHasAdditionalEffectSelfArg(MOVE_BURN_UP, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_FIRE) == TRUE);
|
||||
ASSUME(IsMoveEffectRemoveSpeciesType(MOVE_BURN_UP, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_FIRE) == TRUE);
|
||||
ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] != TYPE_FIRE || gSpeciesInfo[SPECIES_WOBBUFFET].types[1] != TYPE_FIRE);
|
||||
ASSUME(gSpeciesInfo[SPECIES_CYNDAQUIL].types[0] == TYPE_FIRE || gSpeciesInfo[SPECIES_CYNDAQUIL].types[1] == TYPE_FIRE);
|
||||
PLAYER(SPECIES_CYNDAQUIL);
|
||||
@ -25,7 +25,7 @@ SINGLE_BATTLE_TEST("Burn Up fails if the user isn't a Fire-type")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_BURN_UP].effect == EFFECT_FAIL_IF_NOT_ARG_TYPE);
|
||||
ASSUME(MoveHasAdditionalEffectSelfArg(MOVE_BURN_UP, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_FIRE) == TRUE);
|
||||
ASSUME(IsMoveEffectRemoveSpeciesType(MOVE_BURN_UP, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_FIRE) == TRUE);
|
||||
ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] != TYPE_FIRE || gSpeciesInfo[SPECIES_WOBBUFFET].types[1] != TYPE_FIRE);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
@ -42,7 +42,7 @@ SINGLE_BATTLE_TEST("Burn Up user loses its Fire-type if enemy faints")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_BURN_UP].effect == EFFECT_FAIL_IF_NOT_ARG_TYPE);
|
||||
ASSUME(MoveHasAdditionalEffectSelfArg(MOVE_BURN_UP, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_FIRE) == TRUE);
|
||||
ASSUME(IsMoveEffectRemoveSpeciesType(MOVE_BURN_UP, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_FIRE) == TRUE);
|
||||
ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] != TYPE_FIRE || gSpeciesInfo[SPECIES_WOBBUFFET].types[1] != TYPE_FIRE);
|
||||
ASSUME(gSpeciesInfo[SPECIES_CYNDAQUIL].types[0] == TYPE_FIRE || gSpeciesInfo[SPECIES_CYNDAQUIL].types[1] == TYPE_FIRE);
|
||||
PLAYER(SPECIES_CYNDAQUIL);
|
||||
@ -60,7 +60,7 @@ SINGLE_BATTLE_TEST("Double Shock user loses its Electric-type")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_DOUBLE_SHOCK].effect == EFFECT_FAIL_IF_NOT_ARG_TYPE);
|
||||
ASSUME(MoveHasAdditionalEffectSelfArg(MOVE_DOUBLE_SHOCK, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_ELECTRIC) == TRUE);
|
||||
ASSUME(IsMoveEffectRemoveSpeciesType(MOVE_DOUBLE_SHOCK, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_ELECTRIC) == TRUE);
|
||||
ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] != TYPE_ELECTRIC || gSpeciesInfo[SPECIES_WOBBUFFET].types[1] != TYPE_ELECTRIC);
|
||||
ASSUME(gSpeciesInfo[SPECIES_PIKACHU].types[0] == TYPE_ELECTRIC || gSpeciesInfo[SPECIES_PIKACHU].types[1] == TYPE_ELECTRIC);
|
||||
PLAYER(SPECIES_PIKACHU);
|
||||
@ -80,7 +80,7 @@ SINGLE_BATTLE_TEST("Double Shock fails if the user isn't an Electric-type")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_DOUBLE_SHOCK].effect == EFFECT_FAIL_IF_NOT_ARG_TYPE);
|
||||
ASSUME(MoveHasAdditionalEffectSelfArg(MOVE_DOUBLE_SHOCK, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_ELECTRIC) == TRUE);
|
||||
ASSUME(IsMoveEffectRemoveSpeciesType(MOVE_DOUBLE_SHOCK, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_ELECTRIC) == TRUE);
|
||||
ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] != TYPE_ELECTRIC || gSpeciesInfo[SPECIES_WOBBUFFET].types[1] != TYPE_ELECTRIC);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
@ -97,7 +97,7 @@ SINGLE_BATTLE_TEST("Double Shock user loses its Electric-type if enemy faints")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_DOUBLE_SHOCK].effect == EFFECT_FAIL_IF_NOT_ARG_TYPE);
|
||||
ASSUME(MoveHasAdditionalEffectSelfArg(MOVE_DOUBLE_SHOCK, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_ELECTRIC) == TRUE);
|
||||
ASSUME(IsMoveEffectRemoveSpeciesType(MOVE_DOUBLE_SHOCK, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_ELECTRIC) == TRUE);
|
||||
ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] != TYPE_ELECTRIC || gSpeciesInfo[SPECIES_WOBBUFFET].types[1] != TYPE_ELECTRIC);
|
||||
ASSUME(gSpeciesInfo[SPECIES_PIKACHU].types[0] == TYPE_ELECTRIC || gSpeciesInfo[SPECIES_PIKACHU].types[1] == TYPE_ELECTRIC);
|
||||
PLAYER(SPECIES_PIKACHU);
|
||||
|
||||
@ -11,9 +11,9 @@ SINGLE_BATTLE_TEST("Sonic Boom deals fixed damage", s16 damage)
|
||||
u16 mon;
|
||||
PARAMETRIZE { mon = SPECIES_RATTATA; }
|
||||
PARAMETRIZE { mon = SPECIES_ARON; }
|
||||
|
||||
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_SONIC_BOOM].argument == 20);
|
||||
ASSUME(gMovesInfo[MOVE_SONIC_BOOM].argument.fixedDamage == 20);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(mon);
|
||||
} WHEN {
|
||||
|
||||
@ -86,7 +86,7 @@ SINGLE_BATTLE_TEST("Heal Pulse is blocked by Substitute")
|
||||
SINGLE_BATTLE_TEST("Floral Healing heals the target by 2/3rd of it's maxHP if Grassy Terrain is on the field")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_FLORAL_HEALING].argument == MOVE_EFFECT_FLORAL_HEALING);
|
||||
ASSUME(gMovesInfo[MOVE_FLORAL_HEALING].argument.moveProperty == MOVE_EFFECT_FLORAL_HEALING);
|
||||
ASSUME(gMovesInfo[MOVE_GRASSY_TERRAIN].effect == EFFECT_GRASSY_TERRAIN);
|
||||
PLAYER(SPECIES_WOBBUFFET) { MaxHP(100); HP(1); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
|
||||
@ -165,7 +165,7 @@ DOUBLE_BATTLE_TEST("Powder still blocks the target's Fire type moves even if it
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_FORESTS_CURSE].effect == EFFECT_THIRD_TYPE);
|
||||
ASSUME(gMovesInfo[MOVE_FORESTS_CURSE].argument == TYPE_GRASS);
|
||||
ASSUME(gMovesInfo[MOVE_FORESTS_CURSE].argument.type == TYPE_GRASS);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_TREVENANT);
|
||||
|
||||
@ -5,9 +5,9 @@ ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gMovesInfo[MOVE_REVELATION_DANCE].effect == EFFECT_REVELATION_DANCE);
|
||||
ASSUME(gMovesInfo[MOVE_REVELATION_DANCE].danceMove == TRUE);
|
||||
ASSUME(MoveHasAdditionalEffectSelfArg(MOVE_BURN_UP, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_FIRE));
|
||||
ASSUME(IsMoveEffectRemoveSpeciesType(MOVE_BURN_UP, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_FIRE));
|
||||
ASSUME(gMovesInfo[MOVE_FORESTS_CURSE].effect == EFFECT_THIRD_TYPE);
|
||||
ASSUME(gMovesInfo[MOVE_FORESTS_CURSE].argument == TYPE_GRASS);
|
||||
ASSUME(gMovesInfo[MOVE_FORESTS_CURSE].argument.type == TYPE_GRASS);
|
||||
ASSUME(gMovesInfo[MOVE_ROOST].effect == EFFECT_ROOST);
|
||||
}
|
||||
|
||||
|
||||
@ -4,17 +4,17 @@
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gMovesInfo[MOVE_FLY].effect == EFFECT_SEMI_INVULNERABLE);
|
||||
ASSUME(UNCOMPRESS_BITS(HIHALF(gMovesInfo[MOVE_FLY].argument)) == STATUS3_ON_AIR);
|
||||
ASSUME(UNCOMPRESS_BITS(gMovesInfo[MOVE_FLY].argument.twoTurnAttack.status) == STATUS3_ON_AIR);
|
||||
ASSUME(gMovesInfo[MOVE_DIG].effect == EFFECT_SEMI_INVULNERABLE);
|
||||
ASSUME(UNCOMPRESS_BITS(HIHALF(gMovesInfo[MOVE_DIG].argument)) == STATUS3_UNDERGROUND);
|
||||
ASSUME(UNCOMPRESS_BITS(gMovesInfo[MOVE_DIG].argument.twoTurnAttack.status) == STATUS3_UNDERGROUND);
|
||||
ASSUME(gMovesInfo[MOVE_BOUNCE].effect == EFFECT_SEMI_INVULNERABLE);
|
||||
ASSUME(UNCOMPRESS_BITS(HIHALF(gMovesInfo[MOVE_BOUNCE].argument)) == STATUS3_ON_AIR);
|
||||
ASSUME(UNCOMPRESS_BITS(gMovesInfo[MOVE_BOUNCE].argument.twoTurnAttack.status) == STATUS3_ON_AIR);
|
||||
ASSUME(gMovesInfo[MOVE_DIVE].effect == EFFECT_SEMI_INVULNERABLE);
|
||||
ASSUME(UNCOMPRESS_BITS(HIHALF(gMovesInfo[MOVE_DIVE].argument)) == STATUS3_UNDERWATER);
|
||||
ASSUME(UNCOMPRESS_BITS(gMovesInfo[MOVE_DIVE].argument.twoTurnAttack.status) == STATUS3_UNDERWATER);
|
||||
ASSUME(gMovesInfo[MOVE_PHANTOM_FORCE].effect == EFFECT_SEMI_INVULNERABLE);
|
||||
ASSUME(UNCOMPRESS_BITS(HIHALF(gMovesInfo[MOVE_PHANTOM_FORCE].argument)) == STATUS3_PHANTOM_FORCE);
|
||||
ASSUME(UNCOMPRESS_BITS(gMovesInfo[MOVE_PHANTOM_FORCE].argument.twoTurnAttack.status) == STATUS3_PHANTOM_FORCE);
|
||||
ASSUME(gMovesInfo[MOVE_SHADOW_FORCE].effect == EFFECT_SEMI_INVULNERABLE);
|
||||
ASSUME(UNCOMPRESS_BITS(HIHALF(gMovesInfo[MOVE_SHADOW_FORCE].argument)) == STATUS3_PHANTOM_FORCE);
|
||||
ASSUME(UNCOMPRESS_BITS(gMovesInfo[MOVE_SHADOW_FORCE].argument.twoTurnAttack.status) == STATUS3_PHANTOM_FORCE);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Semi-invulnerable moves make the user semi-invulnerable turn 1, then strike turn 2")
|
||||
|
||||
@ -110,7 +110,7 @@ SINGLE_BATTLE_TEST("Shed Tail creates a Substitute with 1/4 of user maximum heal
|
||||
PARAMETRIZE { hp = 164; }
|
||||
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_DRAGON_RAGE].argument == 40);
|
||||
ASSUME(gMovesInfo[MOVE_DRAGON_RAGE].argument.fixedDamage == 40);
|
||||
ASSUME(gMovesInfo[MOVE_DRAGON_RAGE].effect == EFFECT_FIXED_DAMAGE_ARG);
|
||||
PLAYER(SPECIES_BULBASAUR) { MaxHP(hp); }
|
||||
PLAYER(SPECIES_BULBASAUR);
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(MoveHasAdditionalEffect(MOVE_SMELLING_SALTS, MOVE_EFFECT_REMOVE_STATUS) == TRUE);
|
||||
ASSUME(gMovesInfo[MOVE_SMELLING_SALTS].argument == STATUS1_PARALYSIS);
|
||||
ASSUME(gMovesInfo[MOVE_SMELLING_SALTS].argument.status == STATUS1_PARALYSIS);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Smelling Salts does not cure paralyzed pokemons behind substitutes or get increased power")
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(MoveHasAdditionalEffect(MOVE_SPARKLING_ARIA, MOVE_EFFECT_REMOVE_STATUS) == TRUE);
|
||||
ASSUME(gMovesInfo[MOVE_SPARKLING_ARIA].argument == STATUS1_BURN);
|
||||
ASSUME(gMovesInfo[MOVE_SPARKLING_ARIA].argument.status == STATUS1_BURN);
|
||||
ASSUME(gMovesInfo[MOVE_SPARKLING_ARIA].soundMove == TRUE);
|
||||
}
|
||||
|
||||
|
||||
@ -10,12 +10,12 @@ ASSUMPTIONS
|
||||
|
||||
// Solar Beam - check for sun
|
||||
ASSUME(gMovesInfo[MOVE_SOLAR_BEAM].effect == EFFECT_SOLAR_BEAM);
|
||||
ASSUME(HIHALF(gMovesInfo[MOVE_SOLAR_BLADE].argument) == B_WEATHER_SUN);
|
||||
ASSUME(HIHALF(gMovesInfo[MOVE_SOLAR_BLADE].argument.twoTurnAttack.status) == B_WEATHER_SUN);
|
||||
ASSUME(gMovesInfo[MOVE_SOLAR_BLADE].effect == EFFECT_SOLAR_BEAM);
|
||||
ASSUME(HIHALF(gMovesInfo[MOVE_SOLAR_BLADE].argument) == B_WEATHER_SUN);
|
||||
ASSUME(HIHALF(gMovesInfo[MOVE_SOLAR_BLADE].argument.twoTurnAttack.status) == B_WEATHER_SUN);
|
||||
|
||||
// Electro shot - check for rain
|
||||
ASSUME(HIHALF(gMovesInfo[MOVE_ELECTRO_SHOT].argument) == B_WEATHER_RAIN);
|
||||
ASSUME(HIHALF(gMovesInfo[MOVE_ELECTRO_SHOT].argument.twoTurnAttack.status) == B_WEATHER_RAIN);
|
||||
ASSUME(gMovesInfo[MOVE_ELECTRO_SHOT].effect == EFFECT_TWO_TURNS_ATTACK);
|
||||
ASSUME(MoveHasAdditionalEffectSelf(MOVE_ELECTRO_SHOT, MOVE_EFFECT_SP_ATK_PLUS_1) == TRUE);
|
||||
}
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(MoveHasAdditionalEffect(MOVE_WAKE_UP_SLAP, MOVE_EFFECT_REMOVE_STATUS) == TRUE);
|
||||
ASSUME(gMovesInfo[MOVE_WAKE_UP_SLAP].argument == STATUS1_SLEEP);
|
||||
ASSUME(gMovesInfo[MOVE_WAKE_UP_SLAP].argument.status == STATUS1_SLEEP);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Wake-Up Slap does not cure paralyzed pokemons behind substitutes or get increased power")
|
||||
|
||||
@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Hex deals double damage to foes with a status", s16 damage)
|
||||
PARAMETRIZE { status1 = STATUS1_TOXIC_POISON; }
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_HEX].effect == EFFECT_DOUBLE_POWER_ON_ARG_STATUS);
|
||||
ASSUME(gMovesInfo[MOVE_HEX].argument == STATUS1_ANY);
|
||||
ASSUME(gMovesInfo[MOVE_HEX].argument.status == STATUS1_ANY);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET) { Status1(status1); }
|
||||
} WHEN {
|
||||
@ -37,7 +37,7 @@ SINGLE_BATTLE_TEST("Venoshock's power doubles if the target is poisoned/badly po
|
||||
PARAMETRIZE { status1 = STATUS1_TOXIC_POISON; }
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_VENOSHOCK].effect == EFFECT_DOUBLE_POWER_ON_ARG_STATUS);
|
||||
ASSUME(gMovesInfo[MOVE_VENOSHOCK].argument == STATUS1_PSN_ANY);
|
||||
ASSUME(gMovesInfo[MOVE_VENOSHOCK].argument.status == STATUS1_PSN_ANY);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET) { Status1(status1); }
|
||||
} WHEN {
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gMovesInfo[MOVE_BARB_BARRAGE].effect == EFFECT_DOUBLE_POWER_ON_ARG_STATUS);
|
||||
ASSUME(gMovesInfo[MOVE_BARB_BARRAGE].argument == STATUS1_PSN_ANY);
|
||||
ASSUME(gMovesInfo[MOVE_BARB_BARRAGE].argument.status == STATUS1_PSN_ANY);
|
||||
ASSUME(MoveHasAdditionalEffect(MOVE_BARB_BARRAGE, MOVE_EFFECT_POISON) == TRUE);
|
||||
}
|
||||
|
||||
|
||||
@ -40,9 +40,9 @@ SINGLE_BATTLE_TEST("Hurricane can hit airborne targets (Fly, Bounce)")
|
||||
PARAMETRIZE { move = MOVE_BOUNCE; }
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_FLY].effect == EFFECT_SEMI_INVULNERABLE);
|
||||
ASSUME(UNCOMPRESS_BITS(HIHALF(gMovesInfo[MOVE_FLY].argument)) == STATUS3_ON_AIR);
|
||||
ASSUME(UNCOMPRESS_BITS(gMovesInfo[MOVE_FLY].argument.twoTurnAttack.status) == STATUS3_ON_AIR);
|
||||
ASSUME(gMovesInfo[MOVE_BOUNCE].effect == EFFECT_SEMI_INVULNERABLE);
|
||||
ASSUME(UNCOMPRESS_BITS(HIHALF(gMovesInfo[MOVE_BOUNCE].argument)) == STATUS3_ON_AIR);
|
||||
ASSUME(UNCOMPRESS_BITS(gMovesInfo[MOVE_BOUNCE].argument.twoTurnAttack.status) == STATUS3_ON_AIR);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET) { Moves(move); }
|
||||
} WHEN {
|
||||
@ -58,7 +58,7 @@ DOUBLE_BATTLE_TEST("Hurricane can hit airborne targets (Sky Drop)")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_SKY_DROP].effect == EFFECT_SKY_DROP);
|
||||
ASSUME(UNCOMPRESS_BITS(HIHALF(gMovesInfo[MOVE_SKY_DROP].argument)) == STATUS3_ON_AIR);
|
||||
ASSUME(UNCOMPRESS_BITS(gMovesInfo[MOVE_SKY_DROP].argument.twoTurnAttack.status) == STATUS3_ON_AIR);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gMovesInfo[MOVE_INFERNAL_PARADE].effect == EFFECT_DOUBLE_POWER_ON_ARG_STATUS);
|
||||
ASSUME(gMovesInfo[MOVE_INFERNAL_PARADE].argument == STATUS1_ANY);
|
||||
ASSUME(gMovesInfo[MOVE_INFERNAL_PARADE].argument.status == STATUS1_ANY);
|
||||
ASSUME(MoveHasAdditionalEffect(MOVE_INFERNAL_PARADE, MOVE_EFFECT_BURN) == TRUE);
|
||||
}
|
||||
|
||||
|
||||
@ -215,7 +215,7 @@ SINGLE_BATTLE_TEST("Sleep Clause: Psycho Shift'ing sleep will fail if sleep clau
|
||||
STATUS_ICON(opponent, sleep: TRUE);
|
||||
}
|
||||
MESSAGE("Sleep Clause kept the opposing Wobbuffet awake!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Sleep Clause: Psycho Shift'ing sleep will activate sleep clause")
|
||||
@ -245,7 +245,7 @@ SINGLE_BATTLE_TEST("Sleep Clause: Psycho Shift'ing sleep will activate sleep cla
|
||||
STATUS_ICON(opponent, sleep: TRUE);
|
||||
}
|
||||
MESSAGE("Sleep Clause kept Zigzagoon awake!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
AI_SINGLE_BATTLE_TEST("Sleep Clause: AI will not use Yawn while sleep clause is active")
|
||||
@ -507,7 +507,7 @@ DOUBLE_BATTLE_TEST("Sleep Clause: G-Max Befuddle can only sleep one opposing mon
|
||||
{
|
||||
GIVEN {
|
||||
FLAG_SET(B_FLAG_SLEEP_CLAUSE);
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_BEFUDDLE].argument == MAX_EFFECT_EFFECT_SPORE_FOES);
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_BEFUDDLE].argument.maxEffect == MAX_EFFECT_EFFECT_SPORE_FOES);
|
||||
PLAYER(SPECIES_BUTTERFREE) { GigantamaxFactor(TRUE); }
|
||||
PLAYER(SPECIES_CATERPIE);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
@ -682,7 +682,7 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Sleep clause is deactivated when a sleeping mo
|
||||
STATUS_ICON(opponentLeft, sleep: TRUE);
|
||||
MESSAGE("Zigzagoon used Uproar!");
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_UPROAR, playerRight);
|
||||
MESSAGE("Zigzagoon caused an uproar!");
|
||||
MESSAGE("Zigzagoon caused an uproar!");
|
||||
MESSAGE("The uproar woke the opposing Zigzagoon!");
|
||||
STATUS_ICON(opponentLeft, sleep: FALSE);
|
||||
MESSAGE("The opposing Zigzagoon used Roar!");
|
||||
@ -1131,7 +1131,7 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Sleep clause is deactivated when a sleeping mo
|
||||
{
|
||||
GIVEN {
|
||||
FLAG_SET(B_FLAG_SLEEP_CLAUSE);
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_SWEETNESS].argument == MAX_EFFECT_AROMATHERAPY);
|
||||
ASSUME(gMovesInfo[MOVE_G_MAX_SWEETNESS].argument.maxEffect == MAX_EFFECT_AROMATHERAPY);
|
||||
ASSUME(gMovesInfo[MOVE_SPORE].effect == EFFECT_SLEEP);
|
||||
PLAYER(SPECIES_APPLETUN) { GigantamaxFactor(TRUE); }
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
@ -1467,7 +1467,7 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Yawn'd Pokémon who's partner is slept before
|
||||
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, opponentLeft);
|
||||
MESSAGE("The opposing Zigzagoon fell asleep!");
|
||||
STATUS_ICON(opponentLeft, sleep: TRUE);
|
||||
NONE_OF {
|
||||
NONE_OF {
|
||||
MESSAGE( "The opposing Zigzagoon fell asleep!");
|
||||
STATUS_ICON(opponentRight, sleep: TRUE);
|
||||
}
|
||||
@ -1638,13 +1638,13 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Sleep Clause does not prevent sleeping your pa
|
||||
FLAG_SET(B_FLAG_SLEEP_CLAUSE);
|
||||
ASSUME(gMovesInfo[MOVE_SPORE].effect == EFFECT_SLEEP);
|
||||
PLAYER(SPECIES_ZIGZAGOON);
|
||||
PLAYER(SPECIES_ZIGZAGOON);
|
||||
PLAYER(SPECIES_ZIGZAGOON);
|
||||
PLAYER(SPECIES_ZIGZAGOON);
|
||||
PLAYER(SPECIES_ZIGZAGOON);
|
||||
PLAYER(SPECIES_ZIGZAGOON);
|
||||
PLAYER(SPECIES_ZIGZAGOON);
|
||||
OPPONENT(SPECIES_ZIGZAGOON);
|
||||
OPPONENT(SPECIES_ZIGZAGOON);
|
||||
OPPONENT(SPECIES_ZIGZAGOON);
|
||||
} WHEN {
|
||||
TURN { MOVE(playerLeft, MOVE_SPORE, target: playerRight); }
|
||||
TURN { SWITCH(playerRight, 2); MOVE(playerLeft, MOVE_SPORE, target: playerRight); }
|
||||
@ -1681,13 +1681,13 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Sleep Clause does not prevent sleeping your pa
|
||||
FLAG_SET(B_FLAG_SLEEP_CLAUSE);
|
||||
ASSUME(gMovesInfo[MOVE_YAWN].effect == EFFECT_YAWN);
|
||||
PLAYER(SPECIES_ZIGZAGOON);
|
||||
PLAYER(SPECIES_ZIGZAGOON);
|
||||
PLAYER(SPECIES_ZIGZAGOON);
|
||||
PLAYER(SPECIES_ZIGZAGOON);
|
||||
PLAYER(SPECIES_ZIGZAGOON);
|
||||
PLAYER(SPECIES_ZIGZAGOON);
|
||||
PLAYER(SPECIES_ZIGZAGOON);
|
||||
OPPONENT(SPECIES_ZIGZAGOON);
|
||||
OPPONENT(SPECIES_ZIGZAGOON);
|
||||
OPPONENT(SPECIES_ZIGZAGOON);
|
||||
} WHEN {
|
||||
TURN { MOVE(playerLeft, MOVE_YAWN, target: playerRight); }
|
||||
TURN {}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user