diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index f2ba76a551..d1d7675603 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -92,6 +92,7 @@ enum __attribute__((packed)) BattleMoveEffects EFFECT_MINIMIZE, EFFECT_CURSE, EFFECT_HEALING_WISH, + EFFECT_LUNAR_DANCE, // Same as EFFECT_HEALING_WISH, but also heals PP. EFFECT_PROTECT, EFFECT_SPIKES, EFFECT_FORESIGHT, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index e386d655c7..0bbd7c1955 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6423,7 +6423,8 @@ static void Cmd_moveend(void) enum BattleMoveEffects originalEffect = GetMoveEffect(originallyUsedMove); if (IsBattlerAlive(gBattlerAttacker) && originalEffect != EFFECT_BATON_PASS - && originalEffect != EFFECT_HEALING_WISH) + && originalEffect != EFFECT_HEALING_WISH + && originalEffect != EFFECT_LUNAR_DANCE) { if (gHitMarker & HITMARKER_OBEYS) { @@ -7940,22 +7941,30 @@ static bool32 DoSwitchInEffectsForBattler(u32 battler) { return TRUE; } - // Healing Wish activates before hazards. - // Starting from Gen8 - it heals only pokemon which can be healed. In gens 5,6,7 the effect activates anyways. - else if ((gBattleStruct->battlerState[battler].storedHealingWish || gBattleStruct->battlerState[battler].storedLunarDance) - && (gBattleMons[battler].hp != gBattleMons[battler].maxHP || gBattleMons[battler].status1 != 0 || GetConfig(CONFIG_HEALING_WISH_SWITCH) < GEN_8)) + // Healing Wish and Lunar Dance activate before hazards. + // Starting from Gen8 - it heals only pokemon which can be healed. + // In Gen5-7 the effect activates anyways. + else if ((gBattleStruct->battlerState[battler].storedHealingWish) + && (GetConfig(CONFIG_HEALING_WISH_SWITCH) < GEN_8 + || gBattleMons[battler].hp != gBattleMons[battler].maxHP + || gBattleMons[battler].status1 != 0)) { gBattlerAttacker = battler; - if (gBattleStruct->battlerState[battler].storedHealingWish) - { - BattleScriptCall(BattleScript_HealingWishActivates); - gBattleStruct->battlerState[battler].storedHealingWish = FALSE; - } - else // Lunar Dance - { - BattleScriptCall(BattleScript_LunarDanceActivates); - gBattleStruct->battlerState[battler].storedLunarDance = FALSE; - } + BattleScriptCall(BattleScript_HealingWishActivates); + gBattleStruct->battlerState[battler].storedHealingWish = FALSE; + } + else if ((gBattleStruct->battlerState[battler].storedLunarDance) + && (GetConfig(CONFIG_HEALING_WISH_SWITCH) < GEN_8 + || gBattleMons[battler].hp != gBattleMons[battler].maxHP + || gBattleMons[battler].status1 != 0 + || gBattleMons[battler].pp[0] < CalculatePPWithBonus(gBattleMons[battler].moves[0], gBattleMons[battler].ppBonuses, 0) + || gBattleMons[battler].pp[1] < CalculatePPWithBonus(gBattleMons[battler].moves[1], gBattleMons[battler].ppBonuses, 1) + || gBattleMons[battler].pp[2] < CalculatePPWithBonus(gBattleMons[battler].moves[2], gBattleMons[battler].ppBonuses, 2) + || gBattleMons[battler].pp[3] < CalculatePPWithBonus(gBattleMons[battler].moves[3], gBattleMons[battler].ppBonuses, 3))) + { + gBattlerAttacker = battler; + BattleScriptCall(BattleScript_LunarDanceActivates); + gBattleStruct->battlerState[battler].storedLunarDance = FALSE; } else if (EmergencyExitCanBeTriggered(battler)) { @@ -15872,7 +15881,7 @@ void BS_StoreHealingWish(void) NATIVE_ARGS(u8 battler); u32 battler = GetBattlerForBattleScript(cmd->battler); - if (gCurrentMove == MOVE_LUNAR_DANCE) + if (GetMoveEffect(gCurrentMove) == EFFECT_LUNAR_DANCE) gBattleStruct->battlerState[battler].storedLunarDance = TRUE; else gBattleStruct->battlerState[battler].storedHealingWish = TRUE; diff --git a/src/data/battle_move_effects.h b/src/data/battle_move_effects.h index e206246b27..24ed815aa2 100644 --- a/src/data/battle_move_effects.h +++ b/src/data/battle_move_effects.h @@ -578,6 +578,12 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = .battleTvScore = 0, // TODO: Assign points }, + [EFFECT_LUNAR_DANCE] = + { + .battleScript = BattleScript_EffectHealingWish, + .battleTvScore = 0, // TODO: Assign points + }, + [EFFECT_PROTECT] = { .battleScript = BattleScript_EffectProtect, diff --git a/src/data/moves_info.h b/src/data/moves_info.h index ff297c0605..5db6742239 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -12059,7 +12059,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = { .name = COMPOUND_STRING("Lunar Dance"), .description = sHealingWishDescription, - .effect = EFFECT_HEALING_WISH, + .effect = EFFECT_LUNAR_DANCE, .power = 0, .type = TYPE_PSYCHIC, .accuracy = 0, diff --git a/test/battle/ai/can_use_all_moves.c b/test/battle/ai/can_use_all_moves.c index 4b464d9745..d7ea827f39 100644 --- a/test/battle/ai/can_use_all_moves.c +++ b/test/battle/ai/can_use_all_moves.c @@ -315,6 +315,7 @@ AI_DOUBLE_BATTLE_TEST("AI can use all moves, 301-400") case EFFECT_LAST_RESORT: case EFFECT_AQUA_RING: case EFFECT_HEALING_WISH: + case EFFECT_LUNAR_DANCE: //TODO: AI TESTS case EFFECT_RESTORE_HP: @@ -383,6 +384,7 @@ AI_DOUBLE_BATTLE_TEST("AI can use all moves, 401-500") { //TODO: AI HANDLING case EFFECT_HEALING_WISH: + case EFFECT_LUNAR_DANCE: case EFFECT_WONDER_ROOM: case EFFECT_FOLLOW_ME: case EFFECT_MAGIC_ROOM: diff --git a/test/battle/gimmick/terastal.c b/test/battle/gimmick/terastal.c index bb9e3ce5bc..d78a68dc53 100644 --- a/test/battle/gimmick/terastal.c +++ b/test/battle/gimmick/terastal.c @@ -420,8 +420,8 @@ SINGLE_BATTLE_TEST("(TERA) Double Shock does not remove the user's Electric type TURN { MOVE(player, MOVE_DOUBLE_SHOCK); MOVE(opponent, MOVE_RECOVER); } TURN { MOVE(player, MOVE_DOUBLE_SHOCK, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_RECOVER); } TURN { MOVE(player, MOVE_DOUBLE_SHOCK); MOVE(opponent, MOVE_RECOVER); } - TURN { SWITCH(player, 1); MOVE(opponent, MOVE_RECOVER); } - TURN { SWITCH(player, 0); MOVE(opponent, MOVE_RECOVER); } + TURN { SWITCH(player, 1); } + TURN { SWITCH(player, 0); } TURN { MOVE(player, MOVE_DOUBLE_SHOCK); MOVE(opponent, MOVE_RECOVER); } TURN { MOVE(player, MOVE_DOUBLE_SHOCK); } } SCENE { diff --git a/test/battle/move_animations/all_anims.c b/test/battle/move_animations/all_anims.c index 87e6babf25..c30f1c3a13 100644 --- a/test/battle/move_animations/all_anims.c +++ b/test/battle/move_animations/all_anims.c @@ -152,6 +152,7 @@ static bool32 AttackerHasToSwitch(u32 move) // User needs to send out a differen || effect == EFFECT_BATON_PASS || effect == EFFECT_MEMENTO || effect == EFFECT_HEALING_WISH + || effect == EFFECT_LUNAR_DANCE || effect == EFFECT_HIT_ESCAPE || effect == EFFECT_FINAL_GAMBIT || effect == EFFECT_PARTING_SHOT diff --git a/test/battle/move_effect/healing_wish.c b/test/battle/move_effect/healing_wish.c index 249a9b7e6c..ca78fd049e 100644 --- a/test/battle/move_effect/healing_wish.c +++ b/test/battle/move_effect/healing_wish.c @@ -4,15 +4,19 @@ ASSUMPTIONS { ASSUME(GetMoveEffect(MOVE_HEALING_WISH) == EFFECT_HEALING_WISH); - ASSUME(GetMoveEffect(MOVE_LUNAR_DANCE) == EFFECT_HEALING_WISH); } -SINGLE_BATTLE_TEST("Healing Wish causes the user to faint and fully heals the replacement") +SINGLE_BATTLE_TEST("Healing Wish causes the user to faint and heals the replacement's HP and status (singles)") { GIVEN { - ASSUME(B_HEALING_WISH_SWITCH >= GEN_5); + WITH_CONFIG(CONFIG_HEALING_WISH_SWITCH, GEN_7); + ASSUME(GetMovePP(MOVE_SCRATCH) == 35); + ASSUME(GetMovePP(MOVE_WATER_GUN) == 25); + ASSUME(GetMovePP(MOVE_LEAFAGE) == 40); + ASSUME(GetMovePP(MOVE_EMBER) == 25); PLAYER(SPECIES_GARDEVOIR); - PLAYER(SPECIES_WYNAUT) { HP(1); MaxHP(100); Status1(STATUS1_POISON); } + PLAYER(SPECIES_WYNAUT) { HP(1); MaxHP(100); Status1(STATUS1_POISON); + MovesWithPP({MOVE_SCRATCH, 5}, {MOVE_WATER_GUN, 5}, {MOVE_LEAFAGE, 5}, {MOVE_EMBER, 0}); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_HEALING_WISH); SEND_OUT(player, 1); } @@ -24,28 +28,49 @@ SINGLE_BATTLE_TEST("Healing Wish causes the user to faint and fully heals the re HP_BAR(player, hp: 100); STATUS_ICON(player, none: TRUE); MESSAGE("Wynaut regained health!"); + } THEN { + EXPECT_EQ(player->hp, 100); + EXPECT_EQ(player->status1, 0); + // PP not healed + EXPECT_EQ(player->pp[0], 5); + EXPECT_EQ(player->pp[1], 5); + EXPECT_EQ(player->pp[2], 5); + EXPECT_EQ(player->pp[3], 0); } } -DOUBLE_BATTLE_TEST("Lunar Dance causes the user to faint and fully heals the replacement in a double battle") +DOUBLE_BATTLE_TEST("Healing Wish causes the user to faint and heals the replacement's HP and status (doubles)") { GIVEN { - ASSUME(B_HEALING_WISH_SWITCH >= GEN_5); + WITH_CONFIG(CONFIG_HEALING_WISH_SWITCH, GEN_7); + ASSUME(GetMovePP(MOVE_SCRATCH) == 35); + ASSUME(GetMovePP(MOVE_WATER_GUN) == 25); + ASSUME(GetMovePP(MOVE_LEAFAGE) == 40); + ASSUME(GetMovePP(MOVE_EMBER) == 25); PLAYER(SPECIES_GARDEVOIR) { Speed(300); } PLAYER(SPECIES_WOBBUFFET) { Speed(50); } - PLAYER(SPECIES_WYNAUT) { HP(99); MaxHP(100); Status1(STATUS1_BURN); Speed(50); } + PLAYER(SPECIES_WYNAUT) { HP(1); MaxHP(100); Status1(STATUS1_BURN); Speed(50); + MovesWithPP({MOVE_SCRATCH, 5}, {MOVE_WATER_GUN, 5}, {MOVE_LEAFAGE, 5}, {MOVE_EMBER, 0}); } OPPONENT(SPECIES_WOBBUFFET) { Speed(50); } OPPONENT(SPECIES_WOBBUFFET) { Speed(50); } } WHEN { - TURN { MOVE(playerLeft, MOVE_LUNAR_DANCE); SEND_OUT(playerLeft, 2); } + TURN { MOVE(playerLeft, MOVE_HEALING_WISH); SEND_OUT(playerLeft, 2); } } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_LUNAR_DANCE, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_HEALING_WISH, playerLeft); HP_BAR(playerLeft, hp: 0); MESSAGE("Gardevoir fainted!"); - MESSAGE("Wynaut became cloaked in mystical moonlight!"); + MESSAGE("The healing wish came true for Wynaut!"); HP_BAR(playerLeft, hp: 100); STATUS_ICON(playerLeft, none: TRUE); MESSAGE("Wynaut regained health!"); + } THEN { + EXPECT_EQ(playerLeft->hp, 100); + EXPECT_EQ(playerLeft->status1, 0); + // PP not healed + EXPECT_EQ(playerLeft->pp[0], 5); + EXPECT_EQ(playerLeft->pp[1], 5); + EXPECT_EQ(playerLeft->pp[2], 5); + EXPECT_EQ(playerLeft->pp[3], 0); } } @@ -69,15 +94,21 @@ SINGLE_BATTLE_TEST("Healing Wish effect activates even if the the switched Poké SINGLE_BATTLE_TEST("Healing Wish effect activates only if the switched Pokémon can be healed (Gen8+)") { + u32 switchTo; + PARAMETRIZE { switchTo = 2; } + PARAMETRIZE { switchTo = 3; } + PARAMETRIZE { switchTo = 4; } GIVEN { WITH_CONFIG(CONFIG_HEALING_WISH_SWITCH, GEN_8); PLAYER(SPECIES_GARDEVOIR) { Speed(300); } PLAYER(SPECIES_NINJASK) { Speed(400); } - PLAYER(SPECIES_WYNAUT) { HP(50); MaxHP(100); Status1(STATUS1_PARALYSIS); Speed(50); } + PLAYER(SPECIES_WYNAUT) { HP(50); MaxHP(100); Speed(50); } + PLAYER(SPECIES_WYNAUT) { Status1(STATUS1_PARALYSIS); Speed(50); } + PLAYER(SPECIES_WYNAUT) { MovesWithPP({MOVE_SCRATCH, 5}); Speed(50); } OPPONENT(SPECIES_WOBBUFFET) { Speed(50); } } WHEN { TURN { MOVE(player, MOVE_HEALING_WISH); SEND_OUT(player, 1); } - TURN { MOVE(player, MOVE_U_TURN); SEND_OUT(player, 2); } + TURN { MOVE(player, MOVE_U_TURN); SEND_OUT(player, switchTo); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_HEALING_WISH, player); HP_BAR(player, hp: 0); @@ -87,9 +118,27 @@ SINGLE_BATTLE_TEST("Healing Wish effect activates only if the switched Pokémon MESSAGE("Ninjask regained health!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, player); - MESSAGE("The healing wish came true for Wynaut!"); - HP_BAR(player, hp: 100); - STATUS_ICON(player, none: TRUE); - MESSAGE("Wynaut regained health!"); + if (switchTo == 2) { + MESSAGE("The healing wish came true for Wynaut!"); + HP_BAR(player, hp: 100); + MESSAGE("Wynaut regained health!"); + } else if (switchTo == 3) { + MESSAGE("The healing wish came true for Wynaut!"); + STATUS_ICON(player, none: TRUE); + MESSAGE("Wynaut regained health!"); + } else { + NONE_OF { + MESSAGE("The healing wish came true for Wynaut!"); + MESSAGE("Wynaut regained health!"); + } + } + } THEN { + if (switchTo == 2) { + EXPECT_EQ(player->hp, 100); + } else if (switchTo == 3) { + EXPECT_EQ(player->status1, 0); + } else if (switchTo == 4) { + EXPECT_EQ(player->pp[0], 5); // Did NOT heal PP + } } } diff --git a/test/battle/move_effect/lunar_dance.c b/test/battle/move_effect/lunar_dance.c new file mode 100644 index 0000000000..4714516b1f --- /dev/null +++ b/test/battle/move_effect/lunar_dance.c @@ -0,0 +1,137 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(GetMoveEffect(MOVE_LUNAR_DANCE) == EFFECT_LUNAR_DANCE); +} + +SINGLE_BATTLE_TEST("Lunar Dance causes the user to faint and heals the replacement's HP, PP and status (singles)") +{ + GIVEN { + WITH_CONFIG(CONFIG_HEALING_WISH_SWITCH, GEN_7); + ASSUME(GetMovePP(MOVE_SCRATCH) == 35); + ASSUME(GetMovePP(MOVE_WATER_GUN) == 25); + ASSUME(GetMovePP(MOVE_LEAFAGE) == 40); + ASSUME(GetMovePP(MOVE_EMBER) == 25); + PLAYER(SPECIES_GARDEVOIR); + PLAYER(SPECIES_WYNAUT) { HP(1); MaxHP(100); Status1(STATUS1_POISON); + MovesWithPP({MOVE_SCRATCH, 5}, {MOVE_WATER_GUN, 5}, {MOVE_LEAFAGE, 5}, {MOVE_EMBER, 0}); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_LUNAR_DANCE); SEND_OUT(player, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_LUNAR_DANCE, player); + HP_BAR(player, hp: 0); + MESSAGE("Gardevoir fainted!"); + MESSAGE("Wynaut became cloaked in mystical moonlight!"); + HP_BAR(player, hp: 100); + STATUS_ICON(player, none: TRUE); + MESSAGE("Wynaut regained health!"); + } THEN { + EXPECT_EQ(player->hp, 100); + EXPECT_EQ(player->status1, 0); + // PP not healed + EXPECT_EQ(player->pp[0], 35); + EXPECT_EQ(player->pp[1], 25); + EXPECT_EQ(player->pp[2], 40); + EXPECT_EQ(player->pp[3], 25); + } +} + +DOUBLE_BATTLE_TEST("Lunar Dance causes the user to faint and heals the replacement's HP, PP and status (doubles)") +{ + GIVEN { + WITH_CONFIG(CONFIG_HEALING_WISH_SWITCH, GEN_7); + ASSUME(GetMovePP(MOVE_SCRATCH) == 35); + ASSUME(GetMovePP(MOVE_WATER_GUN) == 25); + ASSUME(GetMovePP(MOVE_LEAFAGE) == 40); + ASSUME(GetMovePP(MOVE_EMBER) == 25); + PLAYER(SPECIES_GARDEVOIR) { Speed(300); } + PLAYER(SPECIES_WOBBUFFET) { Speed(50); } + PLAYER(SPECIES_WYNAUT) { HP(1); MaxHP(100); Status1(STATUS1_BURN); Speed(50); + MovesWithPP({MOVE_SCRATCH, 5}, {MOVE_WATER_GUN, 5}, {MOVE_LEAFAGE, 5}, {MOVE_EMBER, 0}); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(50); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(50); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_LUNAR_DANCE); SEND_OUT(playerLeft, 2); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_LUNAR_DANCE, playerLeft); + HP_BAR(playerLeft, hp: 0); + MESSAGE("Gardevoir fainted!"); + MESSAGE("Wynaut became cloaked in mystical moonlight!"); + HP_BAR(playerLeft, hp: 100); + STATUS_ICON(playerLeft, none: TRUE); + MESSAGE("Wynaut regained health!"); + } THEN { + EXPECT_EQ(playerLeft->hp, 100); + EXPECT_EQ(playerLeft->status1, 0); + EXPECT_EQ(playerLeft->pp[0], 35); + EXPECT_EQ(playerLeft->pp[1], 25); + EXPECT_EQ(playerLeft->pp[2], 40); + EXPECT_EQ(playerLeft->pp[3], 25); + } +} + +SINGLE_BATTLE_TEST("Lunar Dance effect activates even if the the switched Pokémon can't be healed (Gen4-7)") +{ + GIVEN { + WITH_CONFIG(CONFIG_HEALING_WISH_SWITCH, GEN_7); + PLAYER(SPECIES_GARDEVOIR) { Speed(300); } + PLAYER(SPECIES_NINJASK) { Speed(400); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(50); } + } WHEN { + TURN { MOVE(player, MOVE_LUNAR_DANCE); SEND_OUT(player, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_LUNAR_DANCE, player); + HP_BAR(player, hp: 0); + MESSAGE("Gardevoir fainted!"); + MESSAGE("Ninjask became cloaked in mystical moonlight!"); + MESSAGE("Ninjask regained health!"); + } +} + +SINGLE_BATTLE_TEST("Lunar Dance effect activates only if the switched Pokémon can be healed (Gen8+)") +{ + u32 switchTo; + PARAMETRIZE { switchTo = 2; } + PARAMETRIZE { switchTo = 3; } + PARAMETRIZE { switchTo = 4; } + GIVEN { + ASSUME(GetMovePP(MOVE_SCRATCH) == 35); + WITH_CONFIG(CONFIG_HEALING_WISH_SWITCH, GEN_8); + PLAYER(SPECIES_GARDEVOIR) { Speed(300); } + PLAYER(SPECIES_NINJASK) { Speed(400); } + PLAYER(SPECIES_WYNAUT) { HP(50); MaxHP(100); Speed(50); } + PLAYER(SPECIES_WYNAUT) { Status1(STATUS1_PARALYSIS); Speed(50); } + PLAYER(SPECIES_WYNAUT) { MovesWithPP({MOVE_SCRATCH, 5}); Speed(50); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(50); } + } WHEN { + TURN { MOVE(player, MOVE_LUNAR_DANCE); SEND_OUT(player, 1); } + TURN { MOVE(player, MOVE_U_TURN); SEND_OUT(player, switchTo); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_LUNAR_DANCE, player); + HP_BAR(player, hp: 0); + MESSAGE("Gardevoir fainted!"); + NONE_OF { + MESSAGE("Ninjask became cloaked in mystical moonlight!"); + MESSAGE("Ninjask regained health!"); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, player); + MESSAGE("Wynaut became cloaked in mystical moonlight!"); + if (switchTo == 2) { + HP_BAR(player, hp: 100); + } else if (switchTo == 3) { + STATUS_ICON(player, none: TRUE); + } + MESSAGE("Wynaut regained health!"); + } THEN { + if (switchTo == 2) { + EXPECT_EQ(player->hp, 100); + } else if (switchTo == 3) { + EXPECT_EQ(player->status1, 0); + } else if (switchTo == 4) { + EXPECT_EQ(player->pp[0], 35); + } + } +} diff --git a/test/battle/move_effect/recoil_if_miss.c b/test/battle/move_effect/recoil_if_miss.c index 0fc09a7fc4..7f62f2065e 100644 --- a/test/battle/move_effect/recoil_if_miss.c +++ b/test/battle/move_effect/recoil_if_miss.c @@ -41,7 +41,7 @@ SINGLE_BATTLE_TEST("Recoil if miss: Jump Kick has 50% recoil on protect") SINGLE_BATTLE_TEST("Recoil if miss: Jump Kick has no recoil if no target") { GIVEN { - ASSUME(B_HEALING_WISH_SWITCH >= GEN_5); + WITH_CONFIG(CONFIG_HEALING_WISH_SWITCH, GEN_5); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WYNAUT); @@ -154,4 +154,3 @@ SINGLE_BATTLE_TEST("Recoil if miss: Disguise doesn't prevent crash damage from J } } } - diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index 78ac2b3071..113ac2f4f2 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -528,7 +528,7 @@ static void BattleTest_Run(void *data) if (((DATA.explicitSpeeds[B_POSITION_PLAYER_LEFT] + DATA.explicitSpeeds[B_POSITION_PLAYER_RIGHT]) != (revisedPlayerExplicitSpeeds + revisedPartnerExplicitSpeeds) || (DATA.explicitSpeeds[B_POSITION_OPPONENT_LEFT] + DATA.explicitSpeeds[B_POSITION_OPPONENT_RIGHT]) != (revisedOpponentAExplicitSpeeds + revisedOpponentBExplicitSpeeds))) - + { Test_ExitWithResult(TEST_RESULT_INVALID, SourceLine(0), ":LSpeed required for all PLAYERs and OPPONENTs"); } @@ -1810,19 +1810,19 @@ void OpenPokemonMulti(u32 sourceLine, enum BattlerPosition position, u32 species if ((*partySize == 0) || (*partySize == 1) || (*partySize == 2)) *partySize = 3; party = DATA.recordedBattle.playerParty; - } + } else if (position == B_POSITION_OPPONENT_LEFT) // MULTI_OPPONENT_A { partySize = &DATA.opponentPartySize; party = DATA.recordedBattle.opponentParty; - } + } else // MULTI_OPPONENT_B { partySize = &DATA.opponentPartySize; if ((*partySize == 0) || (*partySize == 1) || (*partySize == 2)) *partySize = 3; party = DATA.recordedBattle.opponentParty; - } + } INVALID_IF(*partySize >= PARTY_SIZE, "Too many Pokemon in party"); DATA.currentPosition = position; DATA.currentPartyIndex = *partySize; @@ -2211,7 +2211,7 @@ static const char *BattlerIdentifier(s32 battlerId) case BATTLE_TEST_AI_TWO_VS_ONE: case BATTLE_TEST_ONE_VS_TWO: case BATTLE_TEST_AI_ONE_VS_TWO: - return sBattlerIdentifiersDoubles[battlerId]; + return sBattlerIdentifiersDoubles[battlerId]; } return ""; } @@ -2441,7 +2441,7 @@ void MoveGetIdAndSlot(s32 battlerId, struct MoveContext *ctx, u32 *moveId, u32 * INVALID_IF(DATA.explicitMoves[battlerId & BIT_SIDE] & (1 << DATA.currentMonIndexes[battlerId]), "Missing explicit %S", GetMoveName(ctx->move)); SetMonData(mon, MON_DATA_MOVE1 + i, &ctx->move); u32 pp = GetMovePP(ctx->move); - SetMonData(DATA.currentMon, MON_DATA_PP1 + i, &pp); + SetMonData(mon, MON_DATA_PP1 + i, &pp); *moveSlot = i; *moveId = ctx->move; INVALID_IF(GetMovePP(ctx->move) == 0, "%S has 0 PP!", GetMoveName(ctx->move));