burn_hit -> move_effect_burn
This commit is contained in:
parent
ba6d223f17
commit
7fb811d33d
@ -26,7 +26,7 @@ gBattleScriptsForMoveEffects::
|
||||
.4byte BattleScript_EffectSleep @ EFFECT_SLEEP
|
||||
.4byte BattleScript_EffectPoisonHit @ EFFECT_POISON_HIT
|
||||
.4byte BattleScript_EffectAbsorb @ EFFECT_ABSORB
|
||||
.4byte BattleScript_EffectBurnHit @ EFFECT_BURN_HIT
|
||||
.4byte BattleScript_EffectHit @ EFFECT_BURN_HIT
|
||||
.4byte BattleScript_EffectFreezeHit @ EFFECT_FREEZE_HIT
|
||||
.4byte BattleScript_EffectParalyzeHit @ EFFECT_PARALYZE_HIT
|
||||
.4byte BattleScript_EffectExplosion @ EFFECT_EXPLOSION
|
||||
@ -426,7 +426,7 @@ gBattleScriptsForMoveEffects::
|
||||
.4byte BattleScript_EffectFrostbiteHit @ EFFECT_FROSTBITE_HIT
|
||||
.4byte BattleScript_EffectSnow @ EFFECT_SNOWSCAPE
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_399
|
||||
.4byte BattleScript_EffectInfernalParade @ EFFECT_INFERNAL_PARADE
|
||||
.4byte BattleScript_EffectHit @ EFFECT_INFERNAL_PARADE
|
||||
.4byte BattleScript_EffectTakeHeart @ EFFECT_TAKE_HEART
|
||||
.4byte BattleScript_EffectAxeKick @ EFFECT_AXE_KICK
|
||||
.4byte BattleScript_EffectHit @ EFFECT_COLLISION_COURSE
|
||||
@ -3373,11 +3373,6 @@ BattleScript_AbsorbHealBlock::
|
||||
tryfaintmon BS_TARGET
|
||||
goto BattleScript_MoveEnd
|
||||
|
||||
BattleScript_EffectInfernalParade::
|
||||
BattleScript_EffectBurnHit::
|
||||
setmoveeffect MOVE_EFFECT_BURN
|
||||
goto BattleScript_EffectHit
|
||||
|
||||
BattleScript_EffectFrostbiteHit::
|
||||
setmoveeffect MOVE_EFFECT_FROSTBITE
|
||||
goto BattleScript_EffectHit
|
||||
|
||||
@ -843,31 +843,9 @@ static bool32 AI_IsMoveEffectInPlus(u32 battlerAtk, u32 battlerDef, u32 move, s3
|
||||
u32 abilityDef = AI_DATA->abilities[battlerDef];
|
||||
u32 abilityAtk = AI_DATA->abilities[battlerAtk];
|
||||
|
||||
// check ADDITIONAL_EFFECTS
|
||||
for (i = 0; i < gBattleMoves[move].numAdditionalEffects; i++)
|
||||
{
|
||||
// Obviously ignore moves that target self
|
||||
if (gBattleMoves[move].additionalEffects[i].self)
|
||||
continue;
|
||||
|
||||
switch (gBattleMoves[move].additionalEffects[i].moveEffect)
|
||||
{
|
||||
case MOVE_EFFECT_PARALYSIS:
|
||||
if (AI_CanParalyze(battlerAtk, battlerDef, abilityDef, move, MOVE_NONE))
|
||||
return TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch (gBattleMoves[move].effect)
|
||||
{
|
||||
case EFFECT_HIT:
|
||||
default:
|
||||
return FALSE;
|
||||
case EFFECT_BURN_HIT:
|
||||
if (AI_CanBurn(battlerAtk, battlerDef, abilityDef, BATTLE_PARTNER(battlerAtk), move, MOVE_NONE))
|
||||
return TRUE;
|
||||
break;
|
||||
case EFFECT_POISON_HIT:
|
||||
case EFFECT_POISON_FANG:
|
||||
if (AI_CanPoison(battlerAtk, battlerDef, abilityDef, move, MOVE_NONE))
|
||||
@ -962,6 +940,26 @@ static bool32 AI_IsMoveEffectInPlus(u32 battlerAtk, u32 battlerDef, u32 move, s3
|
||||
break;
|
||||
}
|
||||
|
||||
// check ADDITIONAL_EFFECTS
|
||||
for (i = 0; i < gBattleMoves[move].numAdditionalEffects; i++)
|
||||
{
|
||||
// Obviously ignore moves that target self
|
||||
if (gBattleMoves[move].additionalEffects[i].self)
|
||||
continue;
|
||||
|
||||
switch (gBattleMoves[move].additionalEffects[i].moveEffect)
|
||||
{
|
||||
case MOVE_EFFECT_PARALYSIS:
|
||||
if (AI_CanParalyze(battlerAtk, battlerDef, abilityDef, move, MOVE_NONE))
|
||||
return TRUE;
|
||||
break;
|
||||
case MOVE_EFFECT_BURN:
|
||||
if (AI_CanBurn(battlerAtk, battlerDef, abilityDef, BATTLE_PARTNER(battlerAtk), move, MOVE_NONE))
|
||||
return TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
@ -355,6 +355,7 @@ static bool32 ChangeOrderTargetAfterAttacker(void);
|
||||
void ApplyExperienceMultipliers(s32 *expAmount, u8 expGetterMonId, u8 faintedBattler);
|
||||
static void RemoveAllTerrains(void);
|
||||
static bool8 CanAbilityPreventStatLoss(u16 abilityDef, bool8 isIntimidate);
|
||||
static bool8 CanBurnHitThaw(u16 move);
|
||||
|
||||
static void Cmd_attackcanceler(void);
|
||||
static void Cmd_accuracycheck(void);
|
||||
@ -5286,8 +5287,7 @@ static void Cmd_moveend(void)
|
||||
if (gBattleMons[gBattlerTarget].status1 & STATUS1_FREEZE
|
||||
&& gBattleMons[gBattlerTarget].hp != 0
|
||||
&& gBattlerAttacker != gBattlerTarget
|
||||
&& (moveType == TYPE_FIRE
|
||||
|| (B_BURN_HIT_THAW >= GEN_6 && gBattleMoves[gCurrentMove].effect == EFFECT_BURN_HIT))
|
||||
&& (moveType == TYPE_FIRE || CanBurnHitThaw(gCurrentMove))
|
||||
&& !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
|
||||
{
|
||||
gBattleMons[gBattlerTarget].status1 &= ~STATUS1_FREEZE;
|
||||
@ -15672,6 +15672,21 @@ static bool8 CanAbilityPreventStatLoss(u16 abilityDef, bool8 byIntimidate)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 CanBurnHitThaw(u16 move)
|
||||
{
|
||||
u8 i;
|
||||
|
||||
if (B_BURN_HIT_THAW >= GEN_6)
|
||||
{
|
||||
for (i = 0; i < gBattleMoves[move].numAdditionalEffects; i++)
|
||||
{
|
||||
if (gBattleMoves[move].additionalEffects[i].moveEffect == MOVE_EFFECT_BURN)
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void BS_CheckParentalBondCounter(void)
|
||||
{
|
||||
NATIVE_ARGS(u8 counter, const u8 *jumpInstr);
|
||||
|
||||
@ -57,7 +57,7 @@ static const u16 sPoisoningMoves[] = {
|
||||
MOVE_TOXIC_THREAD,
|
||||
};
|
||||
|
||||
// EFFECT_BURN_HIT, EFFECT_WILL_O_WISP
|
||||
// MOVE_EFFECT_BURN, EFFECT_WILL_O_WISP
|
||||
static const u16 sBurningMoves[] = {
|
||||
MOVE_WILL_O_WISP,
|
||||
//MOVE_EMBER,
|
||||
@ -169,7 +169,7 @@ static const struct BattlePyramidRequirement sBattlePyramidRequirementsByRound[]
|
||||
{
|
||||
.type = TYPE_ICE,
|
||||
},
|
||||
|
||||
|
||||
[7] = /* pokemon with explosion effects */
|
||||
{
|
||||
.type = TYPE_MYSTERY,
|
||||
|
||||
@ -110,12 +110,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_FIRE_PUNCH] =
|
||||
{
|
||||
.effect = EFFECT_BURN_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 75,
|
||||
.type = TYPE_FIRE,
|
||||
.accuracy = 100,
|
||||
.pp = 15,
|
||||
.secondaryEffectChance = 10,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
@ -123,6 +122,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
.makesContact = TRUE,
|
||||
.punchingMove = TRUE,
|
||||
.sheerForceBoost = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT(MOVE_EFFECT_BURN, 10)
|
||||
)
|
||||
},
|
||||
|
||||
[MOVE_ICE_PUNCH] =
|
||||
@ -910,17 +912,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_EMBER] =
|
||||
{
|
||||
.effect = EFFECT_BURN_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 40,
|
||||
.type = TYPE_FIRE,
|
||||
.accuracy = 100,
|
||||
.pp = 25,
|
||||
.secondaryEffectChance = 10,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
.zMoveEffect = Z_EFFECT_NONE,
|
||||
.sheerForceBoost = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT(MOVE_EFFECT_BURN, 10)
|
||||
)
|
||||
},
|
||||
|
||||
[MOVE_FLAMETHROWER] =
|
||||
@ -930,16 +934,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
#else
|
||||
.power = 95,
|
||||
#endif
|
||||
.effect = EFFECT_BURN_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.type = TYPE_FIRE,
|
||||
.accuracy = 100,
|
||||
.pp = 15,
|
||||
.secondaryEffectChance = 10,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
.zMoveEffect = Z_EFFECT_NONE,
|
||||
.sheerForceBoost = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT(MOVE_EFFECT_BURN, 10)
|
||||
)
|
||||
},
|
||||
|
||||
[MOVE_MIST] =
|
||||
@ -2226,16 +2232,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
#else
|
||||
.power = 120,
|
||||
#endif
|
||||
.effect = EFFECT_BURN_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.type = TYPE_FIRE,
|
||||
.accuracy = 85,
|
||||
.pp = 5,
|
||||
.secondaryEffectChance = 10,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
.zMoveEffect = Z_EFFECT_NONE,
|
||||
.sheerForceBoost = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT(MOVE_EFFECT_BURN, 10)
|
||||
)
|
||||
},
|
||||
|
||||
[MOVE_WATERFALL] =
|
||||
@ -3074,12 +3082,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_FLAME_WHEEL] =
|
||||
{
|
||||
.effect = EFFECT_BURN_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 60,
|
||||
.type = TYPE_FIRE,
|
||||
.accuracy = 100,
|
||||
.pp = 25,
|
||||
.secondaryEffectChance = 10,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
@ -3087,6 +3094,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
.makesContact = TRUE,
|
||||
.sheerForceBoost = TRUE,
|
||||
.thawsUser = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT(MOVE_EFFECT_BURN, 10)
|
||||
)
|
||||
},
|
||||
|
||||
[MOVE_SNORE] =
|
||||
@ -3973,18 +3983,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_SACRED_FIRE] =
|
||||
{
|
||||
.effect = EFFECT_BURN_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 100,
|
||||
.type = TYPE_FIRE,
|
||||
.accuracy = 95,
|
||||
.pp = 5,
|
||||
.secondaryEffectChance = 50,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
.zMoveEffect = Z_EFFECT_NONE,
|
||||
.sheerForceBoost = TRUE,
|
||||
.thawsUser = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT(MOVE_EFFECT_BURN, 50)
|
||||
)
|
||||
},
|
||||
|
||||
[MOVE_MAGNITUDE] =
|
||||
@ -4627,17 +4639,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
#else
|
||||
.power = 100,
|
||||
#endif
|
||||
.effect = EFFECT_BURN_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.type = TYPE_FIRE,
|
||||
.accuracy = 90,
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 10,
|
||||
.target = MOVE_TARGET_BOTH,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
.zMoveEffect = Z_EFFECT_NONE,
|
||||
.sheerForceBoost = TRUE,
|
||||
.windMove = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT(MOVE_EFFECT_BURN, 10)
|
||||
)
|
||||
},
|
||||
|
||||
[MOVE_HAIL] =
|
||||
@ -5355,12 +5369,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_BLAZE_KICK] =
|
||||
{
|
||||
.effect = EFFECT_BURN_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 85,
|
||||
.type = TYPE_FIRE,
|
||||
.accuracy = 90,
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 10,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
@ -5368,6 +5381,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
.makesContact = TRUE,
|
||||
.highCritRatio = TRUE,
|
||||
.sheerForceBoost = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT(MOVE_EFFECT_BURN, 10)
|
||||
)
|
||||
},
|
||||
|
||||
[MOVE_MUD_SPORT] =
|
||||
@ -7708,17 +7724,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_LAVA_PLUME] =
|
||||
{
|
||||
.effect = EFFECT_BURN_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 80,
|
||||
.type = TYPE_FIRE,
|
||||
.accuracy = 100,
|
||||
.pp = 15,
|
||||
.secondaryEffectChance = 30,
|
||||
.target = MOVE_TARGET_FOES_AND_ALLY,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
.zMoveEffect = Z_EFFECT_NONE,
|
||||
.sheerForceBoost = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT(MOVE_EFFECT_BURN, 30)
|
||||
)
|
||||
},
|
||||
|
||||
[MOVE_LEAF_STORM] =
|
||||
@ -8831,18 +8849,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_SCALD] =
|
||||
{
|
||||
.effect = EFFECT_BURN_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 80,
|
||||
.type = TYPE_WATER,
|
||||
.accuracy = 100,
|
||||
.pp = 15,
|
||||
.secondaryEffectChance = 30,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
.zMoveEffect = Z_EFFECT_NONE,
|
||||
.sheerForceBoost = TRUE,
|
||||
.thawsUser = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT(MOVE_EFFECT_BURN, 30)
|
||||
)
|
||||
},
|
||||
|
||||
[MOVE_SHELL_SMASH] =
|
||||
@ -9068,17 +9088,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_INFERNO] =
|
||||
{
|
||||
.effect = EFFECT_BURN_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 100,
|
||||
.type = TYPE_FIRE,
|
||||
.accuracy = 50,
|
||||
.pp = 5,
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
.zMoveEffect = Z_EFFECT_NONE,
|
||||
.sheerForceBoost = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT(MOVE_EFFECT_BURN, 100)
|
||||
)
|
||||
},
|
||||
|
||||
[MOVE_WATER_PLEDGE] =
|
||||
@ -9531,18 +9553,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_SEARING_SHOT] =
|
||||
{
|
||||
.effect = EFFECT_BURN_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 100,
|
||||
.type = TYPE_FIRE,
|
||||
.accuracy = 100,
|
||||
.pp = 5,
|
||||
.secondaryEffectChance = 30,
|
||||
.target = MOVE_TARGET_FOES_AND_ALLY,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
.zMoveEffect = Z_EFFECT_NONE,
|
||||
.sheerForceBoost = TRUE,
|
||||
.ballisticMove = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT(MOVE_EFFECT_BURN, 30)
|
||||
)
|
||||
},
|
||||
|
||||
[MOVE_TECHNO_BLAST] =
|
||||
@ -9634,17 +9658,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_BLUE_FLARE] =
|
||||
{
|
||||
.effect = EFFECT_BURN_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 130,
|
||||
.type = TYPE_FIRE,
|
||||
.accuracy = 85,
|
||||
.pp = 5,
|
||||
.secondaryEffectChance = 20,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
.zMoveEffect = Z_EFFECT_NONE,
|
||||
.sheerForceBoost = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT(MOVE_EFFECT_BURN, 20)
|
||||
)
|
||||
},
|
||||
|
||||
[MOVE_FIERY_DANCE] =
|
||||
@ -9690,17 +9716,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
.type = TYPE_ICE,
|
||||
.accuracy = 90,
|
||||
.pp = 5,
|
||||
.secondaryEffectChance = 30,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
.argument = MOVE_EFFECT_BURN,
|
||||
.zMoveEffect = Z_EFFECT_NONE,
|
||||
.twoTurnMove = TRUE,
|
||||
.sheerForceBoost = TRUE,
|
||||
.metronomeBanned = TRUE,
|
||||
.sleepTalkBanned = TRUE,
|
||||
.instructBanned = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT(MOVE_EFFECT_BURN, 30)
|
||||
)
|
||||
},
|
||||
|
||||
[MOVE_SNARL] =
|
||||
@ -10339,12 +10366,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_STEAM_ERUPTION] =
|
||||
{
|
||||
.effect = EFFECT_BURN_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 110,
|
||||
.type = TYPE_WATER,
|
||||
.accuracy = 95,
|
||||
.pp = 5,
|
||||
.secondaryEffectChance = 30,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
@ -10352,6 +10378,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
.sheerForceBoost = TRUE,
|
||||
.thawsUser = TRUE,
|
||||
.metronomeBanned = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT(MOVE_EFFECT_BURN, 30)
|
||||
)
|
||||
},
|
||||
|
||||
[MOVE_HYPERSPACE_HOLE] =
|
||||
@ -11853,10 +11882,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
.power = 90,
|
||||
.pp = 15,
|
||||
#endif
|
||||
.effect = EFFECT_BURN_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.type = TYPE_FIRE,
|
||||
.accuracy = 100,
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
@ -11865,6 +11893,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
.mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8,
|
||||
.thawsUser = TRUE,
|
||||
.metronomeBanned = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT(MOVE_EFFECT_BURN, 100)
|
||||
)
|
||||
},
|
||||
|
||||
[MOVE_GLITZY_GLOW] =
|
||||
@ -12313,12 +12344,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_PYRO_BALL] =
|
||||
{
|
||||
.effect = EFFECT_BURN_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 120,
|
||||
.type = TYPE_FIRE,
|
||||
.accuracy = 90,
|
||||
.pp = 5,
|
||||
.secondaryEffectChance = 10,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
@ -12327,6 +12357,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
.thawsUser = TRUE,
|
||||
.ballisticMove = TRUE,
|
||||
.metronomeBanned = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT(MOVE_EFFECT_BURN, 10)
|
||||
)
|
||||
},
|
||||
|
||||
[MOVE_BEHEMOTH_BLADE] =
|
||||
@ -12755,17 +12788,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_BURNING_JEALOUSY] =
|
||||
{
|
||||
.effect = EFFECT_BURN_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 70,
|
||||
.type = TYPE_FIRE,
|
||||
.accuracy = 100,
|
||||
.pp = 5,
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_BOTH,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
.zMoveEffect = Z_EFFECT_NONE,
|
||||
.sheerForceBoost = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT(MOVE_EFFECT_BURN, 100)
|
||||
)
|
||||
},
|
||||
|
||||
[MOVE_LASH_OUT] =
|
||||
@ -12878,18 +12912,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_SCORCHING_SANDS] =
|
||||
{
|
||||
.effect = EFFECT_BURN_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 70,
|
||||
.type = TYPE_GROUND,
|
||||
.accuracy = 100,
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 30,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
.zMoveEffect = Z_EFFECT_NONE,
|
||||
.sheerForceBoost = TRUE,
|
||||
.thawsUser = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT(MOVE_EFFECT_BURN, 30)
|
||||
)
|
||||
},
|
||||
|
||||
[MOVE_JUNGLE_HEALING] =
|
||||
@ -13407,12 +13443,14 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
.type = TYPE_GHOST,
|
||||
.accuracy = 100,
|
||||
.pp = 15,
|
||||
.secondaryEffectChance = 30,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
.zMoveEffect = Z_EFFECT_NONE,
|
||||
.sheerForceBoost = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT(MOVE_EFFECT_BURN, 30)
|
||||
)
|
||||
},
|
||||
|
||||
[MOVE_CEASELESS_EDGE] =
|
||||
@ -13486,16 +13524,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
.power = 95,
|
||||
.pp = 5,
|
||||
#endif
|
||||
.effect = EFFECT_BURN_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.type = TYPE_GROUND,
|
||||
.accuracy = 80,
|
||||
.secondaryEffectChance = 20,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
.zMoveEffect = Z_EFFECT_NONE,
|
||||
.sheerForceBoost = TRUE,
|
||||
.windMove = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT(MOVE_EFFECT_BURN, 20)
|
||||
)
|
||||
},
|
||||
|
||||
[MOVE_LUNAR_BLESSING] =
|
||||
@ -14238,12 +14278,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_BLAZING_TORQUE] =
|
||||
{
|
||||
.effect = EFFECT_BURN_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 80,
|
||||
.type = TYPE_FIRE,
|
||||
.accuracy = 100,
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 30,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
@ -14258,6 +14297,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
.instructBanned = TRUE,
|
||||
.encoreBanned = TRUE,
|
||||
.assistBanned = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT(MOVE_EFFECT_BURN, 30)
|
||||
)
|
||||
},
|
||||
|
||||
[MOVE_WICKED_TORQUE] =
|
||||
|
||||
@ -574,7 +574,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Mid-battle switches prioritize
|
||||
|
||||
GIVEN {
|
||||
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartSwitchFlags);
|
||||
PLAYER(SPECIES_MARSHTOMP) { Level(30); Moves(MOVE_MUD_BOMB, MOVE_WATER_GUN, MOVE_GROWL, MOVE_MUD_SHOT); Speed(5); }
|
||||
PLAYER(SPECIES_MARSHTOMP) { Level(30); Moves(MOVE_MUD_BOMB, MOVE_WATER_GUN, MOVE_GROWL, MOVE_MUD_SHOT); Speed(5); }
|
||||
OPPONENT(SPECIES_PONYTA) { Level(1); Moves(MOVE_NONE); Speed(6); } // Forces switchout
|
||||
OPPONENT(SPECIES_TANGELA) { Level(30); Moves(move1); Speed(4); }
|
||||
OPPONENT(SPECIES_LOMBRE) { Level(30); Moves(move2); Speed(4); }
|
||||
@ -588,7 +588,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Mid-battle switches prioritize
|
||||
{
|
||||
GIVEN {
|
||||
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES);
|
||||
PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_WING_ATTACK, MOVE_BOOMBURST); Speed(5); }
|
||||
PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_WING_ATTACK, MOVE_BOOMBURST); Speed(5); }
|
||||
OPPONENT(SPECIES_PONYTA) { Level(1); Moves(MOVE_NONE); Speed(4); } // Forces switchout
|
||||
OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_HEADBUTT); Speed(4); } // Mid battle, AI sends out Aron
|
||||
OPPONENT(SPECIES_ELECTRODE) { Level(30); Moves(MOVE_CHARGE_BEAM); Speed(6); }
|
||||
@ -601,7 +601,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Post-KO switches prioritize of
|
||||
{
|
||||
GIVEN {
|
||||
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES);
|
||||
PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_WING_ATTACK, MOVE_BOOMBURST); Speed(5); }
|
||||
PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_WING_ATTACK, MOVE_BOOMBURST); Speed(5); }
|
||||
OPPONENT(SPECIES_PONYTA) { Level(1); Moves(MOVE_TACKLE); Speed(4); }
|
||||
OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_HEADBUTT); Speed(4); } // Mid battle, AI sends out Aron
|
||||
OPPONENT(SPECIES_ELECTRODE) { Level(30); Moves(MOVE_CHARGE_BEAM); Speed(6); }
|
||||
|
||||
@ -41,3 +41,30 @@ SINGLE_BATTLE_TEST("Absorb fails if Heal Block applies")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DOUBLE_BATTLE_TEST("Matcha Gatcha recovers 50% of the damage dealt from both targets")
|
||||
{
|
||||
s16 damageLeft;
|
||||
s16 damageRight;
|
||||
s16 healedLeft;
|
||||
s16 healedRight;
|
||||
|
||||
GIVEN {
|
||||
ASSUME(gBattleMoves[MOVE_MATCHA_GOTCHA].effect == EFFECT_ABSORB);
|
||||
PLAYER(SPECIES_WOBBUFFET) { HP(1); }
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(playerLeft, MOVE_MATCHA_GOTCHA); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_MATCHA_GOTCHA, playerLeft);
|
||||
HP_BAR(opponentLeft, captureDamage: &damageLeft);
|
||||
HP_BAR(playerLeft, captureDamage: &healedLeft);
|
||||
HP_BAR(opponentRight, captureDamage: &damageRight);
|
||||
HP_BAR(playerLeft, captureDamage: &healedRight);
|
||||
} THEN {
|
||||
EXPECT_MUL_EQ(damageLeft, Q_4_12(-0.5), healedLeft);
|
||||
EXPECT_MUL_EQ(damageRight, Q_4_12(-0.5), healedRight);
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gBattleMoves[MOVE_EMBER].effect == EFFECT_BURN_HIT);
|
||||
ASSUME(gBattleMoves[MOVE_EMBER].additionalEffects[0].moveEffect == MOVE_EFFECT_BURN);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Ember inflicts burn")
|
||||
@ -38,3 +38,66 @@ SINGLE_BATTLE_TEST("Ember cannot burn a Fire-type Pokémon")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DOUBLE_BATTLE_TEST("Lava Plume inflicts burn to every battler on the field")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gBattleMoves[MOVE_LAVA_PLUME].additionalEffects[0].moveEffect == MOVE_EFFECT_BURN);
|
||||
ASSUME(gBattleMoves[MOVE_LAVA_PLUME].target == MOVE_TARGET_FOES_AND_ALLY);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(playerLeft, MOVE_LAVA_PLUME); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_LAVA_PLUME, playerLeft);
|
||||
HP_BAR(opponentLeft);
|
||||
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponentLeft);
|
||||
STATUS_ICON(opponentLeft, burn: TRUE);
|
||||
HP_BAR(playerRight);
|
||||
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, playerRight);
|
||||
STATUS_ICON(playerRight, burn: TRUE);
|
||||
HP_BAR(opponentRight);
|
||||
STATUS_ICON(opponentRight, burn: TRUE);
|
||||
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponentRight);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Matcha Gotcha inflicts burn 20% of the time")
|
||||
{
|
||||
PASSES_RANDOMLY(20, 100, RNG_SECONDARY_EFFECT);
|
||||
GIVEN {
|
||||
ASSUME(gBattleMoves[MOVE_MATCHA_GOTCHA].additionalEffects[0].moveEffect == MOVE_EFFECT_BURN);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_MATCHA_GOTCHA); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_MATCHA_GOTCHA, player);
|
||||
HP_BAR(opponent);
|
||||
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponent);
|
||||
STATUS_ICON(opponent, burn: TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
DOUBLE_BATTLE_TEST("Matcha Gatcha can burn both targets")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gBattleMoves[MOVE_MATCHA_GOTCHA].additionalEffects[0].moveEffect == MOVE_EFFECT_BURN);
|
||||
PLAYER(SPECIES_WOBBUFFET) { HP(1); }
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(playerLeft, MOVE_MATCHA_GOTCHA); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_MATCHA_GOTCHA, playerLeft);
|
||||
HP_BAR(opponentLeft);
|
||||
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponentLeft);
|
||||
STATUS_ICON(opponentLeft, burn: TRUE);
|
||||
HP_BAR(opponentRight);
|
||||
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponentRight);
|
||||
STATUS_ICON(opponentRight, burn: TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,67 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gBattleMoves[MOVE_MATCHA_GOTCHA].effect == EFFECT_ABSORB);
|
||||
ASSUME(gBattleMoves[MOVE_MATCHA_GOTCHA].additionalEffects[0].moveEffect == MOVE_EFFECT_BURN);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Matcha Gotcha inflicts burn 20% of the time")
|
||||
{
|
||||
PASSES_RANDOMLY(20, 100, RNG_SECONDARY_EFFECT);
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_MATCHA_GOTCHA); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_MATCHA_GOTCHA, player);
|
||||
HP_BAR(opponent);
|
||||
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponent);
|
||||
STATUS_ICON(opponent, burn: TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
DOUBLE_BATTLE_TEST("Matcha Gatcha can burn both targets")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET) { HP(1); }
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(playerLeft, MOVE_MATCHA_GOTCHA); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_MATCHA_GOTCHA, playerLeft);
|
||||
HP_BAR(opponentLeft);
|
||||
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponentLeft);
|
||||
STATUS_ICON(opponentLeft, burn: TRUE);
|
||||
HP_BAR(opponentRight);
|
||||
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponentRight);
|
||||
STATUS_ICON(opponentRight, burn: TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
DOUBLE_BATTLE_TEST("Matcha Gatcha recovers 50% of the damage dealt from both targets")
|
||||
{
|
||||
s16 damageLeft;
|
||||
s16 damageRight;
|
||||
s16 healedLeft;
|
||||
s16 healedRight;
|
||||
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET) { HP(1); }
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(playerLeft, MOVE_MATCHA_GOTCHA); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_MATCHA_GOTCHA, playerLeft);
|
||||
HP_BAR(opponentLeft, captureDamage: &damageLeft);
|
||||
HP_BAR(playerLeft, captureDamage: &healedLeft);
|
||||
HP_BAR(opponentRight, captureDamage: &damageRight);
|
||||
HP_BAR(playerLeft, captureDamage: &healedRight);
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user