From dd3334aa8219f53a496f79b84cb2a7ca0a163f06 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 7 Sep 2023 22:23:43 +0200 Subject: [PATCH] Battle bond tests and small fix (#3279) Co-authored-by: Eduardo Quezada D'Ottone --- src/battle_script_commands.c | 12 ++- test/battle/ability/battle_bond.c | 161 ++++++++++++++++++++++++++++++ 2 files changed, 172 insertions(+), 1 deletion(-) create mode 100644 test/battle/ability/battle_bond.c diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index caca41a26..83ac411a1 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -8875,6 +8875,16 @@ static bool32 ChangeOrderTargetAfterAttacker(void) return TRUE; } +static u32 CalculateBattlerPartyCount(u32 battler) +{ + u32 count; + if (GetBattlerSide(battler) == B_SIDE_PLAYER) + count = CalculatePlayerPartyCount(); + else + count = CalculateEnemyPartyCount(); + return count; +} + static void Cmd_various(void) { CMD_ARGS(u8 battler, u8 id); @@ -10677,7 +10687,7 @@ static void Cmd_various(void) VARIOUS_ARGS(); if (gBattleMons[gBattlerAttacker].species == SPECIES_GRENINJA_BATTLE_BOND && HasAttackerFaintedTarget() - && CalculateEnemyPartyCount() > 1 + && CalculateBattlerPartyCount(gBattlerTarget) > 1 && !(gBattleStruct->battleBondTransformed[GET_BATTLER_SIDE2(gBattlerAttacker)] & gBitTable[gBattlerPartyIndexes[gBattlerAttacker]])) { gBattleStruct->battleBondTransformed[GET_BATTLER_SIDE2(gBattlerAttacker)] |= gBitTable[gBattlerPartyIndexes[gBattlerAttacker]]; diff --git a/test/battle/ability/battle_bond.c b/test/battle/ability/battle_bond.c new file mode 100644 index 000000000..36ce8990b --- /dev/null +++ b/test/battle/ability/battle_bond.c @@ -0,0 +1,161 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(P_GEN_6_POKEMON == TRUE); + ASSUME(gBattleMoves[MOVE_WATER_GUN].power != 0); +} + +SINGLE_BATTLE_TEST("Battle Bond does not transform species other than Greninja") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_BATTLE_BOND); } + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_WATER_GUN); SEND_OUT(opponent, 1); } + } SCENE { + HP_BAR(opponent); + MESSAGE("Foe Wobbuffet fainted!"); + NONE_OF { + ABILITY_POPUP(player, ABILITY_BATTLE_BOND); + MESSAGE("Wobbuffet became fully charged due to its bond with its trainer!"); + } + } THEN { + EXPECT(player->species == SPECIES_WOBBUFFET); + } +} + +// Battle Bond transforms the pokemon when fainting any battler(opposing or partner), unless it's the last pokemon and the battle ends. +SINGLE_BATTLE_TEST("Battle Bond transforms player's Greninja - Singles") +{ + u32 monsCountPlayer, monsCountOpponent; + + PARAMETRIZE {monsCountPlayer = 1; monsCountOpponent = 1; } + PARAMETRIZE {monsCountPlayer = 1; monsCountOpponent = 2; } + PARAMETRIZE {monsCountPlayer = 2; monsCountOpponent = 1; } + PARAMETRIZE {monsCountPlayer = 2; monsCountOpponent = 2; } + + GIVEN { + PLAYER(SPECIES_GRENINJA_BATTLE_BOND); + if (monsCountPlayer == 2) { + PLAYER(SPECIES_WOBBUFFET); + } + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } + if (monsCountOpponent == 2) { + OPPONENT(SPECIES_WOBBUFFET); + } + } WHEN { + if (monsCountOpponent == 2) { + TURN { MOVE(player, MOVE_WATER_GUN); SEND_OUT(opponent, 1); } + } else { + TURN { MOVE(player, MOVE_WATER_GUN); } + } + + } SCENE { + HP_BAR(opponent); + MESSAGE("Foe Wobbuffet fainted!"); + if (monsCountOpponent != 1) { + ABILITY_POPUP(player, ABILITY_BATTLE_BOND); + MESSAGE("Greninja became fully charged due to its bond with its trainer!"); + MESSAGE("Greninja became Ash-Greninja!"); + } else { + NONE_OF { + ABILITY_POPUP(player, ABILITY_BATTLE_BOND); + MESSAGE("Greninja became fully charged due to its bond with its trainer!"); + } + } + } FINALLY { + if (monsCountOpponent != 1) { + EXPECT(player->species == SPECIES_GRENINJA_ASH); + } else { + EXPECT(player->species == SPECIES_GRENINJA_BATTLE_BOND); + } + } +} + +SINGLE_BATTLE_TEST("Battle Bond transforms opponent's Greninja - Singles") +{ + u32 monsCountPlayer, monsCountOpponent; + + PARAMETRIZE {monsCountPlayer = 1; monsCountOpponent = 1; } + PARAMETRIZE {monsCountPlayer = 1; monsCountOpponent = 2; } + PARAMETRIZE {monsCountPlayer = 2; monsCountOpponent = 1; } + PARAMETRIZE {monsCountPlayer = 2; monsCountOpponent = 2; } + + GIVEN { + OPPONENT(SPECIES_GRENINJA_BATTLE_BOND); + if (monsCountOpponent == 2) { + OPPONENT(SPECIES_WOBBUFFET); + } + PLAYER(SPECIES_WOBBUFFET) {HP(1); } + if (monsCountPlayer == 2) { + PLAYER(SPECIES_WOBBUFFET); + } + } WHEN { + if (monsCountPlayer == 2) { + TURN { MOVE(opponent, MOVE_WATER_GUN); SEND_OUT(player, 1); } + } else { + TURN { MOVE(opponent, MOVE_WATER_GUN); } + } + + } SCENE { + HP_BAR(player); + MESSAGE("Wobbuffet fainted!"); + if (monsCountPlayer != 1) { + ABILITY_POPUP(opponent, ABILITY_BATTLE_BOND); + MESSAGE("Foe Greninja became fully charged due to its bond with its trainer!"); + MESSAGE("Foe Greninja became Ash-Greninja!"); + } else { + NONE_OF { + ABILITY_POPUP(opponent, ABILITY_BATTLE_BOND); + MESSAGE("Foe Greninja became fully charged due to its bond with its trainer!"); + } + } + } FINALLY { + if (monsCountPlayer != 1) { + EXPECT(opponent->species == SPECIES_GRENINJA_ASH); + } else { + EXPECT(opponent->species == SPECIES_GRENINJA_BATTLE_BOND); + } + } +} + +DOUBLE_BATTLE_TEST("Battle Bond transforms player's Greninja when fainting its Ally") +{ + u32 monsCountPlayer, monsCountOpponent; + + PARAMETRIZE {monsCountPlayer = 2; monsCountOpponent = 2; } + PARAMETRIZE {monsCountPlayer = 2; monsCountOpponent = 3; } + PARAMETRIZE {monsCountPlayer = 3; monsCountOpponent = 2; } + PARAMETRIZE {monsCountPlayer = 3; monsCountOpponent = 3; } + + GIVEN { + PLAYER(SPECIES_GRENINJA_BATTLE_BOND); + PLAYER(SPECIES_WOBBUFFET) { HP(1); } + if (monsCountPlayer == 3) { + PLAYER(SPECIES_WOBBUFFET); + } + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + if (monsCountOpponent == 3) { + OPPONENT(SPECIES_WOBBUFFET); + } + } WHEN { + if (monsCountPlayer == 3) { + TURN { MOVE(playerLeft, MOVE_WATER_GUN, target:playerRight); SEND_OUT(playerRight, 2); } + } else { + TURN { MOVE(playerLeft, MOVE_WATER_GUN, target:playerRight); } + } + + } SCENE { + HP_BAR(playerRight); + MESSAGE("Wobbuffet fainted!"); + ABILITY_POPUP(playerLeft, ABILITY_BATTLE_BOND); + MESSAGE("Greninja became fully charged due to its bond with its trainer!"); + MESSAGE("Greninja became Ash-Greninja!"); + } FINALLY { + EXPECT(playerLeft->species == SPECIES_GRENINJA_ASH); + } +}