#include "global.h" #include "test_battle.h" ASSUMPTIONS { ASSUME(gBattleMoves[MOVE_TOXIC_SPIKES].effect == EFFECT_TOXIC_SPIKES); } SINGLE_BATTLE_TEST("Toxic Spikes inflicts poison on switch in") { GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WYNAUT); } WHEN { TURN { MOVE(player, MOVE_TOXIC_SPIKES); } TURN { SWITCH(opponent, 1); } TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); MESSAGE("2 sent out Wynaut!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); STATUS_ICON(opponent, poison: TRUE); } } SINGLE_BATTLE_TEST("Toxic Spikes inflicts bad poison on switch in") { GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WYNAUT); } WHEN { TURN { MOVE(player, MOVE_TOXIC_SPIKES); } TURN { MOVE(player, MOVE_TOXIC_SPIKES); } TURN { SWITCH(opponent, 1); } TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); MESSAGE("2 sent out Wynaut!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); STATUS_ICON(opponent, badPoison: TRUE); } } SINGLE_BATTLE_TEST("Toxic Spikes fails after 2 layers") { GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WYNAUT); } WHEN { TURN { MOVE(player, MOVE_TOXIC_SPIKES); } TURN { MOVE(player, MOVE_TOXIC_SPIKES); } TURN { MOVE(player, MOVE_TOXIC_SPIKES); } TURN { SWITCH(opponent, 1); } TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); MESSAGE("Wobbuffet used Toxic Spikes!"); MESSAGE("But it failed!"); MESSAGE("2 sent out Wynaut!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); STATUS_ICON(opponent, badPoison: TRUE); } } SINGLE_BATTLE_TEST("Toxic Spikes inflicts poison on subsequent switch ins") { GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WYNAUT); } WHEN { TURN { MOVE(player, MOVE_TOXIC_SPIKES); } TURN { SWITCH(opponent, 1); } TURN { SWITCH(opponent, 0); } TURN {} } SCENE { MESSAGE("2 sent out Wynaut!"); STATUS_ICON(opponent, poison: TRUE); } } SINGLE_BATTLE_TEST("Toxic Spikes do not poison airborne Pokemon") { u32 species = SPECIES_WOBBUFFET; u32 item = ITEM_NONE; u32 move1 = MOVE_CELEBRATE; u32 move2 = MOVE_CELEBRATE; bool32 airborne; ASSUME(gSpeciesInfo[SPECIES_PIDGEY].types[1] == TYPE_FLYING); PARAMETRIZE { species = SPECIES_PIDGEY; airborne = TRUE; } PARAMETRIZE { species = SPECIES_PIDGEY; item = ITEM_IRON_BALL; airborne = FALSE; } PARAMETRIZE { species = SPECIES_PIDGEY; move1 = MOVE_GRAVITY; airborne = FALSE; } PARAMETRIZE { species = SPECIES_PIDGEY; move1 = MOVE_INGRAIN; airborne = FALSE; } ASSUME(gSpeciesInfo[SPECIES_UNOWN].abilities[0] == ABILITY_LEVITATE); PARAMETRIZE { species = SPECIES_UNOWN; airborne = TRUE; } PARAMETRIZE { species = SPECIES_UNOWN; item = ITEM_IRON_BALL; airborne = FALSE; } PARAMETRIZE { species = SPECIES_UNOWN; move1 = MOVE_GRAVITY; airborne = FALSE; } PARAMETRIZE { species = SPECIES_UNOWN; move1 = MOVE_INGRAIN; airborne = FALSE; } PARAMETRIZE { move1 = MOVE_MAGNET_RISE; airborne = TRUE; } PARAMETRIZE { move1 = MOVE_MAGNET_RISE; item = ITEM_IRON_BALL; airborne = FALSE; } PARAMETRIZE { move1 = MOVE_MAGNET_RISE; move2 = MOVE_GRAVITY; airborne = FALSE; } // Magnet Rise fails under Gravity. // Magnet Rise fails under Ingrain and vice-versa. PARAMETRIZE { item = ITEM_AIR_BALLOON; airborne = TRUE; } PARAMETRIZE { item = ITEM_AIR_BALLOON; move1 = MOVE_GRAVITY; airborne = FALSE; } PARAMETRIZE { item = ITEM_AIR_BALLOON; move1 = MOVE_INGRAIN; airborne = FALSE; } GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(species) { Item(item); } } WHEN { TURN { MOVE(player, MOVE_TOXIC_SPIKES); MOVE(opponent, move1); } TURN { MOVE(opponent, move2); } TURN { MOVE(opponent, MOVE_BATON_PASS); SEND_OUT(opponent, 1); } } SCENE { if (airborne) { NOT STATUS_ICON(opponent, poison: TRUE); } else { STATUS_ICON(opponent, poison: TRUE); } } } SINGLE_BATTLE_TEST("Toxic Spikes do not affect Steel-types") { GIVEN { ASSUME(gSpeciesInfo[SPECIES_STEELIX].types[0] == TYPE_STEEL); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_STEELIX); } WHEN { TURN { MOVE(player, MOVE_TOXIC_SPIKES); } TURN { SWITCH(opponent, 1); } } SCENE { NOT STATUS_ICON(opponent, poison: TRUE); } } SINGLE_BATTLE_TEST("Toxic Spikes are removed by grounded Poison-types") { u32 species; u32 item = ITEM_NONE; u32 move = MOVE_CELEBRATE; bool32 grounded; PARAMETRIZE { species = SPECIES_EKANS; grounded = TRUE; } PARAMETRIZE { species = SPECIES_ZUBAT; grounded = FALSE; } PARAMETRIZE { species = SPECIES_ZUBAT; item = ITEM_IRON_BALL; grounded = TRUE; } PARAMETRIZE { species = SPECIES_ZUBAT; move = MOVE_GRAVITY; grounded = TRUE; } PARAMETRIZE { species = SPECIES_ZUBAT; move = MOVE_INGRAIN; grounded = TRUE; } GIVEN { ASSUME(gSpeciesInfo[SPECIES_EKANS].types[0] == TYPE_POISON); ASSUME(gSpeciesInfo[SPECIES_ZUBAT].types[0] == TYPE_POISON); ASSUME(gSpeciesInfo[SPECIES_ZUBAT].types[1] == TYPE_FLYING); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(species) { Item(item); } } WHEN { TURN { MOVE(player, MOVE_TOXIC_SPIKES); MOVE(opponent, move); } TURN { MOVE(opponent, MOVE_BATON_PASS); SEND_OUT(opponent, 1); } TURN { SWITCH(opponent, 0); } } SCENE { if (grounded) { NOT STATUS_ICON(opponent, poison: TRUE); MESSAGE("The poison spikes disappeared from around the opposing team's feet!"); NOT STATUS_ICON(opponent, poison: TRUE); } else { NOT STATUS_ICON(opponent, poison: TRUE); ANIMATION(ANIM_TYPE_MOVE, MOVE_BATON_PASS, opponent); STATUS_ICON(opponent, poison: TRUE); } } } // This would test for what I believe to be a bug in the mainline games. // A Pokémon that gets passed magnet rise should still remove the Toxic // Spikes even though it is airborne. // The test currently fails, because we don't incorporate this bug. SINGLE_BATTLE_TEST("Toxic Spikes are removed by Poison-types affected by Magnet Rise") { KNOWN_FAILING; GIVEN { ASSUME(gSpeciesInfo[SPECIES_EKANS].types[0] == TYPE_POISON); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_EKANS); } WHEN { TURN { MOVE(opponent, MOVE_MAGNET_RISE); } TURN { MOVE(player, MOVE_TOXIC_SPIKES); MOVE(opponent, MOVE_BATON_PASS); SEND_OUT(opponent, 1); } TURN { SWITCH(opponent, 0); } } SCENE { NOT STATUS_ICON(opponent, poison: TRUE); MESSAGE("The poison spikes disappeared from around the opposing team's feet!"); NOT STATUS_ICON(opponent, poison: TRUE); } }