diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index eaf4f7147b..e95e4695c9 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3036,6 +3036,7 @@ void SetMoveEffect(u32 battler, u32 effectBattler, enum MoveEffect moveEffect, c case MOVE_EFFECT_STEALTH_ROCK: case MOVE_EFFECT_PAYDAY: case MOVE_EFFECT_BUG_BITE: + case MOVE_EFFECT_FLAME_BURST: activateAfterFaint = TRUE; break; default: @@ -4281,7 +4282,7 @@ static void Cmd_tryfaintmon(void) } } - if (cmd->battler == BS_ATTACKER) + if (cmd->battler == BS_TARGET && gCurrentMove != MOVE_NONE) TryUpdateEvolutionTracker(IF_DEFEAT_X_WITH_ITEMS, 1, MOVE_NONE); gBattlerFainted = battler; @@ -15474,11 +15475,12 @@ static void TryUpdateEvolutionTracker(u32 evolutionCondition, u32 upAmount, u16 u32 i, j; if (IsOnPlayerSide(gBattlerAttacker) - && !(gBattleTypeFlags & (BATTLE_TYPE_LINK + && ((TESTING && IsDoubleBattle()) // To be removed when Wild Double Battles are added to tests + || !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_TRAINER_HILL - | BATTLE_TYPE_FRONTIER))) + | BATTLE_TYPE_FRONTIER)))) { const struct Evolution *evolutions = GetSpeciesEvolutions(gBattleMons[gBattlerAttacker].species); if (evolutions == NULL) diff --git a/src/data/moves_info.h b/src/data/moves_info.h index 5db6742239..375441b2fa 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -12552,7 +12552,6 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .category = DAMAGE_CATEGORY_SPECIAL, .additionalEffects = ADDITIONAL_EFFECTS({ .moveEffect = MOVE_EFFECT_FLAME_BURST, - .self = TRUE, }), .contestEffect = CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION, .contestCategory = CONTEST_CATEGORY_BEAUTY, diff --git a/test/battle/evolution_tracker.c b/test/battle/evolution_tracker.c new file mode 100644 index 0000000000..ebc83132fc --- /dev/null +++ b/test/battle/evolution_tracker.c @@ -0,0 +1,137 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gSpeciesInfo[SPECIES_BISHARP].evolutions[0].params->condition == IF_DEFEAT_X_WITH_ITEMS); + ASSUME(gSpeciesInfo[SPECIES_BISHARP].evolutions[0].params->arg1 == SPECIES_BISHARP); + ASSUME(gSpeciesInfo[SPECIES_BISHARP].evolutions[0].params->arg2 == ITEM_LEADERS_CREST); +} + +WILD_BATTLE_TEST("Evolution Tracker: Bisharp KO-ing a Bisharp that holds Leader's Crest increases tracker") +{ + GIVEN { + PLAYER(SPECIES_BISHARP); + OPPONENT(SPECIES_BISHARP) { Item(ITEM_LEADERS_CREST); HP(1); } + } WHEN { + TURN { MOVE(player, MOVE_SCRATCH); } + } SCENE { + HP_BAR(opponent, hp: 0); + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_EVOLUTION_TRACKER), 1); + } +} + +// To be replaced with WILD_DOUBLE_BATTLE_TEST when that is made possible (also see TryUpdateEvolutionTracker) +DOUBLE_BATTLE_TEST("Evolution Tracker: Bisharp KO-ing multiple Bisharps holding Leader's Crest increases tracker multiple times") +{ + GIVEN { + ASSUME(GetMoveTarget(MOVE_LAVA_PLUME) == MOVE_TARGET_FOES_AND_ALLY); + PLAYER(SPECIES_BISHARP); + PLAYER(SPECIES_BISHARP) { Item(ITEM_LEADERS_CREST); HP(1); } + OPPONENT(SPECIES_BISHARP) { Item(ITEM_LEADERS_CREST); HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_LAVA_PLUME); } + } SCENE { + HP_BAR(opponentLeft, hp: 0); + HP_BAR(playerRight, hp: 0); + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_EVOLUTION_TRACKER), 2); + } +} + +WILD_BATTLE_TEST("Evolution Tracker: Bisharp KO-ing a Bisharp that doesn't hold Leader's Crest doesn't increase tracker") +{ + GIVEN { + PLAYER(SPECIES_BISHARP); + OPPONENT(SPECIES_BISHARP) { HP(1); } + } WHEN { + TURN { MOVE(player, MOVE_SCRATCH); } + } SCENE { + HP_BAR(opponent, hp: 0); + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_EVOLUTION_TRACKER), 0); + } +} + +WILD_BATTLE_TEST("Evolution Tracker: Bisharp KO-ing a non-Bisharp that holds Leader's Crest doesn't increase tracker") +{ + u32 species; + + PARAMETRIZE { species = SPECIES_WOBBUFFET; } + PARAMETRIZE { species = SPECIES_PAWNIARD; } + GIVEN { + PLAYER(SPECIES_BISHARP); + OPPONENT(species) { Item(ITEM_LEADERS_CREST); HP(1); } + } WHEN { + TURN { MOVE(player, MOVE_SCRATCH); } + } SCENE { + HP_BAR(opponent, hp: 0); + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_EVOLUTION_TRACKER), 0); + } +} + +WILD_BATTLE_TEST("Evolution Tracker: Pawniard KO-ing a Bisharp that holds Leader's Crest doesn't increase tracker") +{ + GIVEN { + PLAYER(SPECIES_PAWNIARD); + OPPONENT(SPECIES_BISHARP) { Item(ITEM_LEADERS_CREST); HP(1); } + } WHEN { + TURN { MOVE(player, MOVE_SCRATCH); } + } SCENE { + HP_BAR(opponent, hp: 0); + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_EVOLUTION_TRACKER), 0); + } +} + +WILD_BATTLE_TEST("Evolution Tracker: Bisharp KO-ing eligible battler from contact effects doesn't increase tracker") +{ + GIVEN { + ASSUME(GetItemHoldEffect(ITEM_ROCKY_HELMET) == HOLD_EFFECT_ROCKY_HELMET); + ASSUME(MoveMakesContact(MOVE_SCRATCH)); + PLAYER(SPECIES_BISHARP) { Item(ITEM_ROCKY_HELMET); } + OPPONENT(SPECIES_BISHARP) { Item(ITEM_LEADERS_CREST); HP(1); } + } WHEN { + TURN { MOVE(opponent, MOVE_SCRATCH); } + } SCENE { + HP_BAR(opponent, hp: 0); + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_EVOLUTION_TRACKER), 0); + } +} + +WILD_BATTLE_TEST("Evolution Tracker: Bisharp KO-ing eligible battler with passive damage doesn't increase tracker") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_LEECH_SEED) == EFFECT_LEECH_SEED); + PLAYER(SPECIES_BISHARP); + OPPONENT(SPECIES_BISHARP) { Item(ITEM_LEADERS_CREST); HP(1); } + } WHEN { + TURN { MOVE(player, MOVE_LEECH_SEED); } + } SCENE { + HP_BAR(opponent, hp: 0); + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_EVOLUTION_TRACKER), 0); + } +} + +// To be replaced with WILD_DOUBLE_BATTLE_TEST when that is made possible (also see TryUpdateEvolutionTracker) +DOUBLE_BATTLE_TEST("Evolution Tracker: Bisharp KO-ing eligible battler with bursting flames doesn't increase tracker") +{ + GIVEN { + ASSUME(MoveHasAdditionalEffect(MOVE_FLAME_BURST, MOVE_EFFECT_FLAME_BURST)); + PLAYER(SPECIES_BISHARP); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_BISHARP) { Item(ITEM_LEADERS_CREST); HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_FLAME_BURST, target: opponentRight); } + } SCENE { + HP_BAR(opponentLeft, hp: 0); + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_EVOLUTION_TRACKER), 0); + } +}