Revival Blessing fixes + Using Lunar Blessing's animation (#5490)
* revival blessing fixes, add anim * fix lunar blessing anim * Added support for Revival Blessing in tests * Added test to confirm absent flag fix --------- Co-authored-by: ghoulslash <pokevoyager0@gmail.com> Co-authored-by: Eduardo Quezada <eduardo602002@gmail.com>
This commit is contained in:
parent
8bb8500456
commit
d487bd0548
8 changed files with 142 additions and 66 deletions
|
@ -15771,11 +15771,11 @@ SandsearStormFireSpin:
|
||||||
|
|
||||||
@Credits to Skeli
|
@Credits to Skeli
|
||||||
Move_LUNAR_BLESSING::
|
Move_LUNAR_BLESSING::
|
||||||
|
loadspritegfx ANIM_TAG_BLUE_STAR
|
||||||
loadspritegfx ANIM_TAG_MOON
|
loadspritegfx ANIM_TAG_MOON
|
||||||
loadspritegfx ANIM_TAG_SPARKLE_2
|
loadspritegfx ANIM_TAG_SPARKLE_2
|
||||||
loadspritegfx ANIM_TAG_GUARD_RING
|
loadspritegfx ANIM_TAG_GUARD_RING
|
||||||
loadspritegfx ANIM_TAG_SMALL_EMBER @Yellow colour for ring
|
loadspritegfx ANIM_TAG_SMALL_EMBER @Yellow colour for ring
|
||||||
loadspritegfx ANIM_TAG_BLUE_STAR
|
|
||||||
monbg ANIM_ATK_PARTNER
|
monbg ANIM_ATK_PARTNER
|
||||||
setalpha 16, 0
|
setalpha 16, 0
|
||||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x10, 0x0
|
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x10, 0x0
|
||||||
|
@ -17630,11 +17630,13 @@ Move_MALIGNANT_CHAIN::
|
||||||
waitforvisualfinish
|
waitforvisualfinish
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Move_REVIVAL_BLESSING::
|
||||||
|
goto Move_LUNAR_BLESSING
|
||||||
|
|
||||||
Move_TERA_BLAST::
|
Move_TERA_BLAST::
|
||||||
Move_ORDER_UP::
|
Move_ORDER_UP::
|
||||||
Move_POPULATION_BOMB::
|
Move_POPULATION_BOMB::
|
||||||
Move_GLAIVE_RUSH::
|
Move_GLAIVE_RUSH::
|
||||||
Move_REVIVAL_BLESSING::
|
|
||||||
Move_SALT_CURE::
|
Move_SALT_CURE::
|
||||||
Move_TRIPLE_DIVE::
|
Move_TRIPLE_DIVE::
|
||||||
Move_DOODLE::
|
Move_DOODLE::
|
||||||
|
|
|
@ -466,6 +466,9 @@ BattleScript_EffectRevivalBlessing::
|
||||||
goto BattleScript_MoveEnd
|
goto BattleScript_MoveEnd
|
||||||
|
|
||||||
BattleScript_EffectRevivalBlessingSendOut:
|
BattleScript_EffectRevivalBlessingSendOut:
|
||||||
|
getswitchedmondata BS_SCRIPTING
|
||||||
|
switchindataupdate BS_SCRIPTING
|
||||||
|
hpthresholds BS_SCRIPTING
|
||||||
switchinanim BS_SCRIPTING, FALSE
|
switchinanim BS_SCRIPTING, FALSE
|
||||||
waitstate
|
waitstate
|
||||||
switchineffects BS_SCRIPTING
|
switchineffects BS_SCRIPTING
|
||||||
|
|
|
@ -788,7 +788,7 @@ u8 CalculatePPWithBonus(u16 move, u8 ppBonuses, u8 moveIndex);
|
||||||
void RemoveMonPPBonus(struct Pokemon *mon, u8 moveIndex);
|
void RemoveMonPPBonus(struct Pokemon *mon, u8 moveIndex);
|
||||||
void RemoveBattleMonPPBonus(struct BattlePokemon *mon, u8 moveIndex);
|
void RemoveBattleMonPPBonus(struct BattlePokemon *mon, u8 moveIndex);
|
||||||
void PokemonToBattleMon(struct Pokemon *src, struct BattlePokemon *dst);
|
void PokemonToBattleMon(struct Pokemon *src, struct BattlePokemon *dst);
|
||||||
void CopyPlayerPartyMonToBattleData(u8 battlerId, u8 partyIndex);
|
void CopyPartyMonToBattleData(u32 battlerId, u32 partyIndex);
|
||||||
bool8 ExecuteTableBasedItemEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex);
|
bool8 ExecuteTableBasedItemEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex);
|
||||||
bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex, u8 e);
|
bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex, u8 e);
|
||||||
bool8 HealStatusConditions(struct Pokemon *mon, u32 healMask, u8 battlerId);
|
bool8 HealStatusConditions(struct Pokemon *mon, u32 healMask, u8 battlerId);
|
||||||
|
|
|
@ -952,7 +952,10 @@ struct MoveContext
|
||||||
u16 gimmick:4;
|
u16 gimmick:4;
|
||||||
u16 explicitGimmick:1;
|
u16 explicitGimmick:1;
|
||||||
u16 allowed:1;
|
u16 allowed:1;
|
||||||
|
// End of word
|
||||||
u16 explicitAllowed:1;
|
u16 explicitAllowed:1;
|
||||||
|
u16 partyIndex:3; // Used for moves where you select a party member without swiching, such as Revival Blessing
|
||||||
|
u16 explicitPartyIndex:1;
|
||||||
u16 notExpected:1; // Has effect only with EXPECT_MOVE
|
u16 notExpected:1; // Has effect only with EXPECT_MOVE
|
||||||
u16 explicitNotExpected:1;
|
u16 explicitNotExpected:1;
|
||||||
struct BattlePokemon *target;
|
struct BattlePokemon *target;
|
||||||
|
|
|
@ -10993,7 +10993,10 @@ static void Cmd_various(void)
|
||||||
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE &&
|
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE &&
|
||||||
gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)] == gSelectedMonPartyId)
|
gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)] == gSelectedMonPartyId)
|
||||||
{
|
{
|
||||||
gBattleScripting.battler = BATTLE_PARTNER(gBattlerAttacker);
|
i = BATTLE_PARTNER(gBattlerAttacker);
|
||||||
|
gAbsentBattlerFlags &= ~(1u << i);
|
||||||
|
gBattleStruct->monToSwitchIntoId[i] = gSelectedMonPartyId;
|
||||||
|
gBattleScripting.battler = i;
|
||||||
gBattleCommunication[MULTIUSE_STATE] = TRUE;
|
gBattleCommunication[MULTIUSE_STATE] = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3697,10 +3697,12 @@ void PokemonToBattleMon(struct Pokemon *src, struct BattlePokemon *dst)
|
||||||
dst->status2 = 0;
|
dst->status2 = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CopyPlayerPartyMonToBattleData(u8 battlerId, u8 partyIndex)
|
void CopyPartyMonToBattleData(u32 battlerId, u32 partyIndex)
|
||||||
{
|
{
|
||||||
PokemonToBattleMon(&gPlayerParty[partyIndex], &gBattleMons[battlerId]);
|
u32 side = GetBattlerSide(battlerId);
|
||||||
gBattleStruct->hpOnSwitchout[GetBattlerSide(battlerId)] = gBattleMons[battlerId].hp;
|
struct Pokemon *party = GetSideParty(side);
|
||||||
|
PokemonToBattleMon(&party[partyIndex], &gBattleMons[battlerId]);
|
||||||
|
gBattleStruct->hpOnSwitchout[side] = gBattleMons[battlerId].hp;
|
||||||
UpdateSentPokesToOpponentValue(battlerId);
|
UpdateSentPokesToOpponentValue(battlerId);
|
||||||
ClearTemporarySpeciesSpriteData(battlerId, FALSE);
|
ClearTemporarySpeciesSpriteData(battlerId, FALSE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,6 @@
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "test/battle.h"
|
#include "test/battle.h"
|
||||||
|
|
||||||
// Note: Since these tests are recorded battle, they don't test the right battle controller
|
|
||||||
// behaviors. These have been tested in-game, in double, in multi, and in link battles. AI will always
|
|
||||||
// revive their first fainted party member in order.
|
|
||||||
|
|
||||||
ASSUMPTIONS
|
ASSUMPTIONS
|
||||||
{
|
{
|
||||||
ASSUME(gMovesInfo[MOVE_REVIVAL_BLESSING].effect == EFFECT_REVIVAL_BLESSING);
|
ASSUME(gMovesInfo[MOVE_REVIVAL_BLESSING].effect == EFFECT_REVIVAL_BLESSING);
|
||||||
|
@ -18,7 +14,7 @@ SINGLE_BATTLE_TEST("Revival Blessing revives a chosen fainted party member for t
|
||||||
PLAYER(SPECIES_WYNAUT) { HP(0); }
|
PLAYER(SPECIES_WYNAUT) { HP(0); }
|
||||||
OPPONENT(SPECIES_WOBBUFFET);
|
OPPONENT(SPECIES_WOBBUFFET);
|
||||||
} WHEN {
|
} WHEN {
|
||||||
TURN { MOVE(player, MOVE_REVIVAL_BLESSING); SEND_OUT(player, 2); }
|
TURN { MOVE(player, MOVE_REVIVAL_BLESSING, partyIndex:2); }
|
||||||
} SCENE {
|
} SCENE {
|
||||||
MESSAGE("Wobbuffet used Revival Blessing!");
|
MESSAGE("Wobbuffet used Revival Blessing!");
|
||||||
MESSAGE("Wynaut was revived and is ready to fight again!");
|
MESSAGE("Wynaut was revived and is ready to fight again!");
|
||||||
|
@ -33,7 +29,7 @@ SINGLE_BATTLE_TEST("Revival Blessing revives a fainted party member for an oppon
|
||||||
OPPONENT(SPECIES_PICHU) { HP(0); }
|
OPPONENT(SPECIES_PICHU) { HP(0); }
|
||||||
OPPONENT(SPECIES_PIKACHU) { HP(0); }
|
OPPONENT(SPECIES_PIKACHU) { HP(0); }
|
||||||
} WHEN {
|
} WHEN {
|
||||||
TURN { MOVE(opponent, MOVE_REVIVAL_BLESSING); SEND_OUT(opponent, 1); }
|
TURN { MOVE(opponent, MOVE_REVIVAL_BLESSING, partyIndex:1); }
|
||||||
} SCENE {
|
} SCENE {
|
||||||
MESSAGE("Foe Raichu used Revival Blessing!");
|
MESSAGE("Foe Raichu used Revival Blessing!");
|
||||||
MESSAGE("Pichu was revived and is ready to fight again!");
|
MESSAGE("Pichu was revived and is ready to fight again!");
|
||||||
|
@ -53,57 +49,80 @@ SINGLE_BATTLE_TEST("Revival Blessing fails if no party members are fainted")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Note: There isn't a good way to test multi battles at the moment, but
|
DOUBLE_BATTLE_TEST("Revival Blessing cannot revive a partner's party member")
|
||||||
// this PASSES in game!
|
{
|
||||||
TO_DO_BATTLE_TEST("Revival Blessing cannot revive a partner's party member");
|
KNOWN_FAILING;
|
||||||
// DOUBLE_BATTLE_TEST("Revival Blessing cannot revive a partner's party member")
|
struct BattlePokemon *user = NULL;
|
||||||
// {
|
gBattleTypeFlags |= BATTLE_TYPE_TWO_OPPONENTS;
|
||||||
// struct BattlePokemon *user;
|
PARAMETRIZE { user = opponentLeft; }
|
||||||
// gBattleTypeFlags |= BATTLE_TYPE_TWO_OPPONENTS;
|
PARAMETRIZE { user = opponentRight; }
|
||||||
// PARAMETRIZE { user = opponentLeft; }
|
GIVEN {
|
||||||
// PARAMETRIZE { user = opponentRight; }
|
ASSUME((gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) != FALSE);
|
||||||
// GIVEN {
|
PLAYER(SPECIES_WOBBUFFET);
|
||||||
// ASSUME((gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) != FALSE);
|
PLAYER(SPECIES_WOBBUFFET);
|
||||||
// PLAYER(SPECIES_WOBBUFFET);
|
OPPONENT(SPECIES_WOBBUFFET);
|
||||||
// PLAYER(SPECIES_WOBBUFFET);
|
OPPONENT(SPECIES_WOBBUFFET);
|
||||||
// OPPONENT(SPECIES_WOBBUFFET);
|
OPPONENT(SPECIES_WOBBUFFET);
|
||||||
// OPPONENT(SPECIES_WOBBUFFET);
|
OPPONENT(SPECIES_WYNAUT);
|
||||||
// OPPONENT(SPECIES_WOBBUFFET);
|
OPPONENT(SPECIES_WYNAUT) { HP(0); }
|
||||||
// OPPONENT(SPECIES_WYNAUT);
|
OPPONENT(SPECIES_WYNAUT);
|
||||||
// OPPONENT(SPECIES_WYNAUT) { HP(0); }
|
} WHEN {
|
||||||
// OPPONENT(SPECIES_WYNAUT);
|
TURN { MOVE(user, MOVE_REVIVAL_BLESSING, partyIndex:4); }
|
||||||
// } WHEN {
|
} SCENE {
|
||||||
// TURN { MOVE(user, MOVE_REVIVAL_BLESSING); }
|
if (user == opponentLeft) {
|
||||||
// } SCENE {
|
MESSAGE("Foe Wobbuffet used Revival Blessing!");
|
||||||
// if (user == opponentLeft) {
|
MESSAGE("But it failed!");
|
||||||
// MESSAGE("Foe Wobbuffet used Revival Blessing!");
|
} else {
|
||||||
// MESSAGE("But it failed!");
|
MESSAGE("Foe Wynaut used Revival Blessing!");
|
||||||
// } else {
|
MESSAGE("Wynaut was revived and is ready to fight again!");
|
||||||
// MESSAGE("Foe Wynaut used Revival Blessing!");
|
}
|
||||||
// MESSAGE("Wynaut was revived and is ready to fight again!");
|
}
|
||||||
// }
|
}
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// Note: The test runner gets upset about "sending out" a battler on the field,
|
DOUBLE_BATTLE_TEST("Revival Blessing doesn't prevent revived battlers from losing their turn")
|
||||||
// but this PASSES in game!
|
{
|
||||||
TO_DO_BATTLE_TEST("Revived battlers still lose their turn");
|
GIVEN {
|
||||||
// DOUBLE_BATTLE_TEST("Revived battlers still lose their turn")
|
PLAYER(SPECIES_WOBBUFFET);
|
||||||
// {
|
PLAYER(SPECIES_WYNAUT);
|
||||||
// GIVEN {
|
OPPONENT(SPECIES_WOBBUFFET);
|
||||||
// PLAYER(SPECIES_WOBBUFFET);
|
OPPONENT(SPECIES_WYNAUT) { HP(1); }
|
||||||
// PLAYER(SPECIES_WYNAUT);
|
} WHEN {
|
||||||
// OPPONENT(SPECIES_WOBBUFFET);
|
TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentRight);
|
||||||
// OPPONENT(SPECIES_WYNAUT) { HP(1); }
|
MOVE(opponentLeft, MOVE_REVIVAL_BLESSING, partyIndex: 1); }
|
||||||
// } WHEN {
|
} SCENE {
|
||||||
// TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentRight);
|
MESSAGE("Wobbuffet used Tackle!");
|
||||||
// MOVE(opponentLeft, MOVE_REVIVAL_BLESSING);
|
MESSAGE("Foe Wynaut fainted!");
|
||||||
// SEND_OUT(opponentLeft, 1); }
|
MESSAGE("Foe Wobbuffet used Revival Blessing!");
|
||||||
// } SCENE {
|
MESSAGE("Wynaut was revived and is ready to fight again!");
|
||||||
// MESSAGE("Wobbuffet used Tackle!");
|
NOT { MESSAGE("Wynaut used Celebrate!"); }
|
||||||
// MESSAGE("Foe Wynaut fainted!");
|
}
|
||||||
// MESSAGE("Foe Wobbuffet used Revival Blessing!");
|
}
|
||||||
// MESSAGE("Wynaut was revived and is ready to fight again!");
|
|
||||||
// NOT { MESSAGE("Wynaut used Celebrate!"); }
|
DOUBLE_BATTLE_TEST("Revival Blessing correctly updates battler absent flags")
|
||||||
// }
|
{
|
||||||
// }
|
GIVEN {
|
||||||
|
PLAYER(SPECIES_SALAMENCE) { Level(40); }
|
||||||
|
PLAYER(SPECIES_PIDGEOT) { Level(40); }
|
||||||
|
OPPONENT(SPECIES_GEODUDE) { Level(5); Ability(ABILITY_ROCK_HEAD); }
|
||||||
|
OPPONENT(SPECIES_STARLY) { Level(5); }
|
||||||
|
} WHEN {
|
||||||
|
TURN { MOVE(playerLeft, MOVE_EARTHQUAKE);
|
||||||
|
MOVE(opponentRight, MOVE_REVIVAL_BLESSING, partyIndex: 0); }
|
||||||
|
TURN { MOVE(playerLeft, MOVE_EARTHQUAKE); }
|
||||||
|
} SCENE {
|
||||||
|
// Turn 1
|
||||||
|
MESSAGE("Salamence used Earthquake!");
|
||||||
|
HP_BAR(opponentLeft);
|
||||||
|
MESSAGE("Foe Geodude fainted!");
|
||||||
|
MESSAGE("It doesn't affect Pidgeot…");
|
||||||
|
MESSAGE("It doesn't affect Foe Starly…");
|
||||||
|
MESSAGE("Foe Starly used Revival Blessing!");
|
||||||
|
MESSAGE("Geodude was revived and is ready to fight again!"); // Should have prefix but it doesn't currently.
|
||||||
|
// Turn 2
|
||||||
|
MESSAGE("Salamence used Earthquake!");
|
||||||
|
HP_BAR(opponentLeft);
|
||||||
|
MESSAGE("Foe Geodude fainted!");
|
||||||
|
MESSAGE("It doesn't affect Pidgeot…");
|
||||||
|
MESSAGE("It doesn't affect Foe Starly…");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -2116,11 +2116,44 @@ void MoveGetIdAndSlot(s32 battlerId, struct MoveContext *ctx, u32 *moveId, u32 *
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u32 MoveGetFirstFainted(s32 battlerId)
|
||||||
|
{
|
||||||
|
u32 i, partySize;
|
||||||
|
struct Pokemon *party;
|
||||||
|
|
||||||
|
if ((battlerId & BIT_SIDE) == B_SIDE_PLAYER)
|
||||||
|
{
|
||||||
|
partySize = DATA.playerPartySize;
|
||||||
|
party = DATA.recordedBattle.playerParty;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
partySize = DATA.opponentPartySize;
|
||||||
|
party = DATA.recordedBattle.opponentParty;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Loop through to find fainted battler.
|
||||||
|
for (i = 0; i < partySize; ++i)
|
||||||
|
{
|
||||||
|
u32 species = GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG);
|
||||||
|
if (species != SPECIES_NONE
|
||||||
|
&& species != SPECIES_EGG
|
||||||
|
&& GetMonData(&party[i], MON_DATA_HP) == 0)
|
||||||
|
{
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns PARTY_SIZE if none found.
|
||||||
|
return PARTY_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx)
|
void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx)
|
||||||
{
|
{
|
||||||
s32 battlerId = battler - gBattleMons;
|
s32 battlerId = battler - gBattleMons;
|
||||||
u32 moveId, moveSlot;
|
u32 moveId, moveSlot;
|
||||||
s32 target;
|
s32 target;
|
||||||
|
bool32 requirePartyIndex = FALSE;
|
||||||
|
|
||||||
INVALID_IF(DATA.turnState == TURN_CLOSED, "MOVE outside TURN");
|
INVALID_IF(DATA.turnState == TURN_CLOSED, "MOVE outside TURN");
|
||||||
INVALID_IF(IsAITest() && (battlerId & BIT_SIDE) == B_SIDE_OPPONENT, "MOVE is not allowed for opponent in AI tests. Use EXPECT_MOVE instead");
|
INVALID_IF(IsAITest() && (battlerId & BIT_SIDE) == B_SIDE_OPPONENT, "MOVE is not allowed for opponent in AI tests. Use EXPECT_MOVE instead");
|
||||||
|
@ -2128,6 +2161,14 @@ void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx)
|
||||||
MoveGetIdAndSlot(battlerId, &ctx, &moveId, &moveSlot, sourceLine);
|
MoveGetIdAndSlot(battlerId, &ctx, &moveId, &moveSlot, sourceLine);
|
||||||
target = MoveGetTarget(battlerId, moveId, &ctx, sourceLine);
|
target = MoveGetTarget(battlerId, moveId, &ctx, sourceLine);
|
||||||
|
|
||||||
|
if (gMovesInfo[moveId].effect == EFFECT_REVIVAL_BLESSING)
|
||||||
|
requirePartyIndex = MoveGetFirstFainted(battlerId) != PARTY_SIZE;
|
||||||
|
|
||||||
|
// Check party menu moves.
|
||||||
|
INVALID_IF(requirePartyIndex && !ctx.explicitPartyIndex, "%S requires explicit party index", GetMoveName(moveId));
|
||||||
|
INVALID_IF(requirePartyIndex && ctx.partyIndex >= ((battlerId & BIT_SIDE) == B_SIDE_PLAYER ? DATA.playerPartySize : DATA.opponentPartySize), \
|
||||||
|
"MOVE to invalid party index");
|
||||||
|
|
||||||
if (ctx.explicitHit)
|
if (ctx.explicitHit)
|
||||||
DATA.battleRecordTurns[DATA.turns][battlerId].hit = 1 + ctx.hit;
|
DATA.battleRecordTurns[DATA.turns][battlerId].hit = 1 + ctx.hit;
|
||||||
if (ctx.explicitCriticalHit)
|
if (ctx.explicitCriticalHit)
|
||||||
|
@ -2148,6 +2189,9 @@ void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx)
|
||||||
PushBattlerAction(sourceLine, battlerId, RECORDED_MOVE_TARGET, target);
|
PushBattlerAction(sourceLine, battlerId, RECORDED_MOVE_TARGET, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ctx.explicitPartyIndex)
|
||||||
|
PushBattlerAction(sourceLine, battlerId, RECORDED_PARTY_INDEX, ctx.partyIndex);
|
||||||
|
|
||||||
if (DATA.turnState == TURN_OPEN)
|
if (DATA.turnState == TURN_OPEN)
|
||||||
{
|
{
|
||||||
if (!DATA.hasExplicitSpeeds)
|
if (!DATA.hasExplicitSpeeds)
|
||||||
|
|
Loading…
Reference in a new issue