#include "global.h" #include "test_battle.h" SINGLE_BATTLE_TEST("Sleep prevents the battler from using a move") { u32 turns; PARAMETRIZE { turns = 1; } PARAMETRIZE { turns = 2; } PARAMETRIZE { turns = 3; } GIVEN { PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP_TURN(turns)); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { for (i = 0; i < turns; i++) TURN { MOVE(player, MOVE_CELEBRATE); } } SCENE { for (i = 0; i < turns - 1; i++) MESSAGE("Wobbuffet is fast asleep."); MESSAGE("Wobbuffet woke up!"); STATUS_ICON(player, none: TRUE); MESSAGE("Wobbuffet used Celebrate!"); } } SINGLE_BATTLE_TEST("Poison deals 1/8th damage per turn") { GIVEN { PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { for (i = 0; i < 4; i++) TURN {} } SCENE { s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); for (i = 0; i < 4; i++) HP_BAR(player, damage: maxHP / 8); } } SINGLE_BATTLE_TEST("Burn deals 1/16th damage per turn") { GIVEN { ASSUME(B_BURN_DAMAGE >= GEN_LATEST); PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { for (i = 0; i < 4; i++) TURN {} } SCENE { s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); for (i = 0; i < 4; i++) HP_BAR(player, damage: maxHP / 16); } } SINGLE_BATTLE_TEST("Burn reduces Attack by 50%", s16 damage) { bool32 burned; PARAMETRIZE { burned = FALSE; } PARAMETRIZE { burned = TRUE; } GIVEN { PLAYER(SPECIES_WOBBUFFET) { if (burned) Status1(STATUS1_BURN); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_TACKLE); } } SCENE { HP_BAR(opponent, captureDamage: &results[i].damage); } FINALLY { EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage); } } SINGLE_BATTLE_TEST("Freeze has a 20% chance of being thawed") { PASSES_RANDOMLY(20, 100, RNG_FROZEN); GIVEN { PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_FREEZE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_CELEBRATE); } } SCENE { STATUS_ICON(player, none: TRUE); } } SINGLE_BATTLE_TEST("Freeze is thawed by opponent's Fire-type attacks") { GIVEN { ASSUME(gBattleMoves[MOVE_EMBER].type == TYPE_FIRE); PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_FREEZE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_EMBER); MOVE(player, MOVE_CELEBRATE); } } SCENE { MESSAGE("Foe Wobbuffet used Ember!"); MESSAGE("Wobbuffet was defrosted!"); STATUS_ICON(player, none: TRUE); } } SINGLE_BATTLE_TEST("Freeze is thawed by user's Flame Wheel") { GIVEN { ASSUME(gBattleMoves[MOVE_FLAME_WHEEL].flags & FLAG_THAW_USER); PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_FREEZE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_FLAME_WHEEL); } } SCENE { MESSAGE("Wobbuffet was defrosted by Flame Wheel!"); STATUS_ICON(player, none: TRUE); MESSAGE("Wobbuffet used Flame Wheel!"); } } SINGLE_BATTLE_TEST("Paralysis reduces Speed by 50%") { u16 playerSpeed; bool32 playerFirst; PARAMETRIZE { playerSpeed = 98; playerFirst = FALSE; } PARAMETRIZE { playerSpeed = 102; playerFirst = TRUE; } GIVEN { ASSUME(B_PARALYSIS_SPEED >= GEN_7); PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_PARALYSIS); Speed(playerSpeed); } OPPONENT(SPECIES_WOBBUFFET) { Speed(50); } } WHEN { TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } } SCENE { if (playerFirst) { ONE_OF { MESSAGE("Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet is paralyzed! It can't move!"); } MESSAGE("Foe Wobbuffet used Celebrate!"); } else { MESSAGE("Foe Wobbuffet used Celebrate!"); ONE_OF { MESSAGE("Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet is paralyzed! It can't move!"); } } } } SINGLE_BATTLE_TEST("Paralysis has a 25% chance of skipping the turn") { PASSES_RANDOMLY(25, 100, RNG_PARALYSIS); GIVEN { PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_PARALYSIS); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_CELEBRATE); } } SCENE { MESSAGE("Wobbuffet is paralyzed! It can't move!"); } } SINGLE_BATTLE_TEST("Bad poison deals 1/16th cumulative damage per turn") { GIVEN { PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_TOXIC_POISON); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { for (i = 0; i < 4; i++) TURN {} } SCENE { s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); for (i = 0; i < 4; i++) HP_BAR(player, damage: maxHP / 16 * (i + 1)); } } SINGLE_BATTLE_TEST("Bad poison cumulative damage resets on switch") { GIVEN { PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_TOXIC_POISON); } PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN {} TURN {} TURN { SWITCH(player, 1); } TURN { SWITCH(player, 0); } TURN {} TURN {} } SCENE { s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); for (i = 0; i < 2; i++) HP_BAR(player, damage: maxHP / 16 * (i + 1)); for (i = 0; i < 2; i++) HP_BAR(player, damage: maxHP / 16 * (i + 1)); } }