Added tests for fainting form changes (#8912)

This commit is contained in:
Eduardo Quezada 2026-01-14 19:37:12 -03:00 committed by GitHub
parent 955617381f
commit c2256e5e59
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 178 additions and 36 deletions

View File

@ -259,13 +259,13 @@ SINGLE_BATTLE_TEST("Morpeko Hangry reverts to Full Belly Form upon battle end af
SINGLE_BATTLE_TEST("Ogerpon reverts to the correct form upon battle end after terastallizing")
{
u32 species;
PARAMETRIZE { species = SPECIES_OGERPON_TEAL; }
PARAMETRIZE { species = SPECIES_OGERPON_WELLSPRING; }
PARAMETRIZE { species = SPECIES_OGERPON_HEARTHFLAME; }
PARAMETRIZE { species = SPECIES_OGERPON_CORNERSTONE; }
u32 species, item;
PARAMETRIZE { species = SPECIES_OGERPON_TEAL; item = ITEM_NONE; }
PARAMETRIZE { species = SPECIES_OGERPON_WELLSPRING; item = ITEM_WELLSPRING_MASK; }
PARAMETRIZE { species = SPECIES_OGERPON_HEARTHFLAME; item = ITEM_HEARTHFLAME_MASK; }
PARAMETRIZE { species = SPECIES_OGERPON_CORNERSTONE; item = ITEM_CORNERSTONE_MASK; }
GIVEN {
PLAYER(species);
PLAYER(species) { Item(item); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); }

View File

@ -69,3 +69,46 @@ DOUBLE_BATTLE_TEST("Causing a Forecast or Flower Gift Pokémon to faint should n
}
}
}
SINGLE_BATTLE_TEST("Ogerpon reverts to the correct form upon fainting after terastallizing")
{
u32 species, item;
PARAMETRIZE { species = SPECIES_OGERPON_TEAL; item = ITEM_NONE; }
PARAMETRIZE { species = SPECIES_OGERPON_WELLSPRING; item = ITEM_WELLSPRING_MASK; }
PARAMETRIZE { species = SPECIES_OGERPON_HEARTHFLAME; item = ITEM_HEARTHFLAME_MASK; }
PARAMETRIZE { species = SPECIES_OGERPON_CORNERSTONE; item = ITEM_CORNERSTONE_MASK; }
GIVEN {
PLAYER(species) { HP(1); Item(item); }
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN {
MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA);
MOVE(opponent, MOVE_SCRATCH);
SEND_OUT(player, 1);
}
TURN { USE_ITEM(player, ITEM_REVIVE, 0); }
TURN { SWITCH(player, 0); }
} THEN {
EXPECT_EQ(player->species, species);
}
}
SINGLE_BATTLE_TEST("Terapagos reverts to the correct form upon fainting after terastallizing")
{
GIVEN {
PLAYER(SPECIES_TERAPAGOS_NORMAL) { HP(1); }
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN {
MOVE(player, MOVE_MEMENTO, gimmick: GIMMICK_TERA);
MOVE(opponent, MOVE_SCRATCH);
SEND_OUT(player, 1);
}
TURN { USE_ITEM(player, ITEM_REVIVE, 0); }
TURN { SWITCH(player, 0); }
} THEN {
EXPECT_EQ(player->species, SPECIES_TERAPAGOS_TERASTAL); // Not Normal form due to Tera Shift
}
}

View File

@ -43,3 +43,22 @@ SINGLE_BATTLE_TEST("Dynamax: Venusaur returns its base Form upon battle end afte
EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_VENUSAUR);
}
}
SINGLE_BATTLE_TEST("Dynamax: Venusaur returns its base Form upon fainting end after Gigantamaxing")
{
GIVEN {
PLAYER(SPECIES_VENUSAUR) { HP(1); GigantamaxFactor(TRUE); }
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN {
MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_DYNAMAX);
MOVE(opponent, MOVE_SCRATCH);
SEND_OUT(player, 1);
}
TURN { USE_ITEM(player, ITEM_REVIVE, 0); }
TURN { SWITCH(player, 0); }
} THEN {
EXPECT_EQ(player->species, SPECIES_VENUSAUR);
}
}

View File

@ -216,3 +216,41 @@ SINGLE_BATTLE_TEST("Rayquaza returns its base Form upon battle end after Mega Ev
EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_RAYQUAZA);
}
}
SINGLE_BATTLE_TEST("Venusaur returns its base Form upon fainting end after Mega Evolving")
{
GIVEN {
PLAYER(SPECIES_VENUSAUR) { HP(1); Item(ITEM_VENUSAURITE); }
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN {
MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA);
MOVE(opponent, MOVE_SCRATCH);
SEND_OUT(player, 1);
}
TURN { USE_ITEM(player, ITEM_REVIVE, 0); }
TURN { SWITCH(player, 0); }
} THEN {
EXPECT_EQ(player->species, SPECIES_VENUSAUR);
}
}
SINGLE_BATTLE_TEST("Rayquaza returns its base Form upon fainting end after Mega Evolving")
{
GIVEN {
PLAYER(SPECIES_RAYQUAZA) { HP(1); Moves(MOVE_DRAGON_ASCENT, MOVE_CELEBRATE); }
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN {
MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA);
MOVE(opponent, MOVE_SCRATCH);
SEND_OUT(player, 1);
}
TURN { USE_ITEM(player, ITEM_REVIVE, 0); }
TURN { SWITCH(player, 0); }
} THEN {
EXPECT_EQ(player->species, SPECIES_RAYQUAZA);
}
}

View File

@ -1,7 +1,7 @@
#include "global.h"
#include "test/battle.h"
SINGLE_BATTLE_TEST("Primal reversion happens for Groudon only when holding Red Orb")
SINGLE_BATTLE_TEST("Primal Reversion happens for Groudon only when holding Red Orb")
{
u16 heldItem;
PARAMETRIZE { heldItem = ITEM_NONE; }
@ -33,7 +33,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens for Groudon only when holding Red O
}
}
SINGLE_BATTLE_TEST("Primal reversion happens for Kyogre only when holding Blue Orb")
SINGLE_BATTLE_TEST("Primal Reversion happens for Kyogre only when holding Blue Orb")
{
u16 heldItem;
PARAMETRIZE { heldItem = ITEM_NONE; }
@ -65,7 +65,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens for Kyogre only when holding Blue O
}
}
DOUBLE_BATTLE_TEST("Primal reversion's order is determined by Speed - opponent faster")
DOUBLE_BATTLE_TEST("Primal Reversion's order is determined by Speed - opponent faster")
{
GIVEN {
PLAYER(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); Speed(5); }
@ -91,7 +91,7 @@ DOUBLE_BATTLE_TEST("Primal reversion's order is determined by Speed - opponent f
}
}
DOUBLE_BATTLE_TEST("Primal reversion's order is determined by Speed - player faster")
DOUBLE_BATTLE_TEST("Primal Reversion's order is determined by Speed - player faster")
{
GIVEN {
PLAYER(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); Speed(20); }
@ -117,7 +117,7 @@ DOUBLE_BATTLE_TEST("Primal reversion's order is determined by Speed - player fas
}
}
SINGLE_BATTLE_TEST("Primal reversion happens after a mon is sent out after a mon is fainted")
SINGLE_BATTLE_TEST("Primal Reversion happens after a mon is sent out after a mon is fainted")
{
GIVEN {
ASSUME(!IsBattleMoveStatus(MOVE_SCRATCH));
@ -136,7 +136,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens after a mon is sent out after a mon
}
}
SINGLE_BATTLE_TEST("Primal reversion happens after a mon is switched in")
SINGLE_BATTLE_TEST("Primal Reversion happens after a mon is switched in")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
@ -153,7 +153,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens after a mon is switched in")
}
}
SINGLE_BATTLE_TEST("Primal reversion happens after a switch-in caused by Eject Button")
SINGLE_BATTLE_TEST("Primal Reversion happens after a switch-in caused by Eject Button")
{
GIVEN {
ASSUME(!IsBattleMoveStatus(MOVE_SCRATCH));
@ -174,7 +174,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens after a switch-in caused by Eject B
}
}
SINGLE_BATTLE_TEST("Primal reversion happens after a switch-in caused by Red Card")
SINGLE_BATTLE_TEST("Primal Reversion happens after a switch-in caused by Red Card")
{
GIVEN {
ASSUME(!IsBattleMoveStatus(MOVE_SCRATCH));
@ -194,7 +194,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens after a switch-in caused by Red Car
}
}
SINGLE_BATTLE_TEST("Primal reversion happens after the entry hazards damage")
SINGLE_BATTLE_TEST("Primal Reversion happens after the entry hazards damage")
{
GIVEN {
ASSUME(GetMoveEffect(MOVE_SPIKES) == EFFECT_SPIKES);
@ -215,7 +215,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens after the entry hazards damage")
}
}
SINGLE_BATTLE_TEST("Primal reversion happens immediately if it was brought in by U-turn")
SINGLE_BATTLE_TEST("Primal Reversion happens immediately if it was brought in by U-turn")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
@ -236,7 +236,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens immediately if it was brought in by
}
DOUBLE_BATTLE_TEST("Primal reversion triggers for multiple battlers if multiple fainted the previous turn")
DOUBLE_BATTLE_TEST("Primal Reversion triggers for multiple battlers if multiple fainted the previous turn")
{
GIVEN {
ASSUME(GetMoveTarget(MOVE_EARTHQUAKE) == MOVE_TARGET_FOES_AND_ALLY);
@ -259,7 +259,7 @@ DOUBLE_BATTLE_TEST("Primal reversion triggers for multiple battlers if multiple
}
}
DOUBLE_BATTLE_TEST("Primal reversion triggers for all battlers if multiple fainted the previous turn")
DOUBLE_BATTLE_TEST("Primal Reversion triggers for all battlers if multiple fainted the previous turn")
{
GIVEN {
ASSUME(GetMoveEffect(MOVE_EXPLOSION) == EFFECT_EXPLOSION);
@ -287,7 +287,7 @@ DOUBLE_BATTLE_TEST("Primal reversion triggers for all battlers if multiple faint
}
}
DOUBLE_BATTLE_TEST("Primal reversion and other switch-in effects trigger for all battlers if multiple fainted the previous turn")
DOUBLE_BATTLE_TEST("Primal Reversion and other switch-in effects trigger for all battlers if multiple fainted the previous turn")
{
GIVEN {
ASSUME(GetMoveEffect(MOVE_EXPLOSION) == EFFECT_EXPLOSION);
@ -333,7 +333,7 @@ DOUBLE_BATTLE_TEST("Primal reversion and other switch-in effects trigger for all
}
}
SINGLE_BATTLE_TEST("Primal reversion is reverted upon battle end")
SINGLE_BATTLE_TEST("Primal Reversion is reverted upon battle end")
{
u32 species, item;
PARAMETRIZE { species = SPECIES_GROUDON; item = ITEM_RED_ORB; }
@ -347,3 +347,25 @@ SINGLE_BATTLE_TEST("Primal reversion is reverted upon battle end")
EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), species);
}
}
SINGLE_BATTLE_TEST("Primal Reversion is NOT reverted upon fainting")
{
u32 species, item, targetSpecies;
PARAMETRIZE { species = SPECIES_GROUDON; item = ITEM_RED_ORB; targetSpecies = SPECIES_GROUDON_PRIMAL; }
PARAMETRIZE { species = SPECIES_KYOGRE; item = ITEM_BLUE_ORB; targetSpecies = SPECIES_KYOGRE_PRIMAL; }
GIVEN {
PLAYER(species) { HP(1); Item(item); }
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN {
MOVE(player, MOVE_CELEBRATE);
MOVE(opponent, MOVE_SCRATCH);
SEND_OUT(player, 1);
}
TURN { USE_ITEM(player, ITEM_REVIVE, 0); }
TURN { SWITCH(player, 0); }
} THEN {
EXPECT_EQ(player->species, targetSpecies);
}
}

View File

@ -135,3 +135,25 @@ SINGLE_BATTLE_TEST("Necrozma returns its proper Form upon battle end after Ultra
EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), species);
}
}
SINGLE_BATTLE_TEST("Necrozma returns its proper Form upon fainting after Ultra Bursting")
{
u32 species;
PARAMETRIZE { species = SPECIES_NECROZMA_DUSK_MANE; }
PARAMETRIZE { species = SPECIES_NECROZMA_DAWN_WINGS; }
GIVEN {
PLAYER(species) { HP(1); Item(ITEM_ULTRANECROZIUM_Z); }
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN {
MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_ULTRA_BURST);
MOVE(opponent, MOVE_SCRATCH);
SEND_OUT(player, 1);
}
TURN { USE_ITEM(player, ITEM_REVIVE, 0); }
TURN { SWITCH(player, 0); }
} THEN {
EXPECT_EQ(player->species, species);
}
}

View File

@ -761,19 +761,19 @@ SINGLE_BATTLE_TEST("(TERA) Transformed Pokémon can't Terastalize")
SINGLE_BATTLE_TEST("(TERA) Pokemon with Tera forms change upon Terastallizing")
{
u32 species, targetSpecies;
PARAMETRIZE { species = SPECIES_OGERPON_TEAL; targetSpecies = SPECIES_OGERPON_TEAL_TERA; }
PARAMETRIZE { species = SPECIES_OGERPON_WELLSPRING; targetSpecies = SPECIES_OGERPON_WELLSPRING_TERA; }
PARAMETRIZE { species = SPECIES_OGERPON_HEARTHFLAME; targetSpecies = SPECIES_OGERPON_HEARTHFLAME_TERA; }
PARAMETRIZE { species = SPECIES_OGERPON_CORNERSTONE; targetSpecies = SPECIES_OGERPON_CORNERSTONE_TERA; }
PARAMETRIZE { species = SPECIES_TERAPAGOS_TERASTAL; targetSpecies = SPECIES_TERAPAGOS_STELLAR; }
u32 species, target, item;
PARAMETRIZE { species = SPECIES_OGERPON_TEAL; target = SPECIES_OGERPON_TEAL_TERA; item = ITEM_NONE; }
PARAMETRIZE { species = SPECIES_OGERPON_WELLSPRING; target = SPECIES_OGERPON_WELLSPRING_TERA; item = ITEM_WELLSPRING_MASK; }
PARAMETRIZE { species = SPECIES_OGERPON_HEARTHFLAME; target = SPECIES_OGERPON_HEARTHFLAME_TERA; item = ITEM_HEARTHFLAME_MASK; }
PARAMETRIZE { species = SPECIES_OGERPON_CORNERSTONE; target = SPECIES_OGERPON_CORNERSTONE_TERA; item = ITEM_CORNERSTONE_MASK; }
PARAMETRIZE { species = SPECIES_TERAPAGOS_TERASTAL; target = SPECIES_TERAPAGOS_STELLAR; item = ITEM_NONE; }
GIVEN {
PLAYER(species);
PLAYER(species) { Item(item); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); }
} THEN {
EXPECT_EQ(player->species, targetSpecies);
EXPECT_EQ(player->species, target);
}
}

View File

@ -15,8 +15,8 @@ SINGLE_BATTLE_TEST("Ogerpon Masks increase the base power of moves by 20%", s16
{
u32 species;
u32 item;
PARAMETRIZE { species = SPECIES_OGERPON_TEAL; item = ITEM_NONE; }
PARAMETRIZE { species = SPECIES_OGERPON_WELLSPRING; item = ITEM_CORNERSTONE_MASK; }
PARAMETRIZE { species = SPECIES_OGERPON_TEAL; item = ITEM_NONE; }
PARAMETRIZE { species = SPECIES_OGERPON_WELLSPRING; item = ITEM_CORNERSTONE_MASK; }
PARAMETRIZE { species = SPECIES_OGERPON_HEARTHFLAME; item = ITEM_WELLSPRING_MASK; }
PARAMETRIZE { species = SPECIES_OGERPON_CORNERSTONE; item = ITEM_HEARTHFLAME_MASK; }

View File

@ -8,14 +8,12 @@ ASSUMPTIONS
SINGLE_BATTLE_TEST("Ivy Cudgel changes the move type depending on the form of Ogerpon")
{
u16 species;
u16 ogerpon;
u16 item;
u32 species, ogerpon, item;
PARAMETRIZE { species = SPECIES_BLASTOISE; ogerpon = SPECIES_OGERPON_TEAL; item = ITEM_NONE; }
PARAMETRIZE { species = SPECIES_BLASTOISE; ogerpon = SPECIES_OGERPON_TEAL; item = ITEM_NONE; }
PARAMETRIZE { species = SPECIES_CHARIZARD; ogerpon = SPECIES_OGERPON_CORNERSTONE; item = ITEM_CORNERSTONE_MASK; }
PARAMETRIZE { species = SPECIES_CHARIZARD; ogerpon = SPECIES_OGERPON_WELLSPRING; item = ITEM_WELLSPRING_MASK; }
PARAMETRIZE { species = SPECIES_VENUSAUR; ogerpon = SPECIES_OGERPON_HEARTHFLAME; item = ITEM_HEARTHFLAME_MASK; }
PARAMETRIZE { species = SPECIES_CHARIZARD; ogerpon = SPECIES_OGERPON_WELLSPRING; item = ITEM_WELLSPRING_MASK; }
PARAMETRIZE { species = SPECIES_VENUSAUR; ogerpon = SPECIES_OGERPON_HEARTHFLAME; item = ITEM_HEARTHFLAME_MASK; }
GIVEN {
PLAYER(ogerpon) { Item(item); }