Fix Lunar Dance not checking PP (#8364)

This commit is contained in:
Eduardo Quezada 2025-12-14 08:47:01 -03:00 committed by GitHub
parent 1209666e5a
commit 08a5a319bd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 247 additions and 43 deletions

View File

@ -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,

View File

@ -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;

View File

@ -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,

View File

@ -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,

View File

@ -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:

View File

@ -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 {

View File

@ -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

View File

@ -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
}
}
}

View 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);
}
}
}

View File

@ -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
}
}
}

View File

@ -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));