Fix Lunar Dance not checking PP (#8364)
This commit is contained in:
parent
1209666e5a
commit
08a5a319bd
@ -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,
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
137
test/battle/move_effect/lunar_dance.c
Normal file
137
test/battle/move_effect/lunar_dance.c
Normal file
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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 "<unknown>";
|
||||
}
|
||||
@ -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));
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user