add MOVE_TARGET_ALL_BATTLERS

This commit is contained in:
ghoulslash 2021-09-16 10:45:33 -04:00
parent 9c94eb6140
commit aac7ae3595
3 changed files with 74 additions and 16 deletions

View File

@ -379,4 +379,6 @@
#define MOVE_TARGET_OPPONENTS_FIELD 0x40
#define MOVE_TARGET_ALLY 0x80
#define MOVE_TARGET_ALL_BATTLERS (MOVE_TARGET_BOTH | MOVE_TARGET_OPPONENTS_FIELD)
#endif // GUARD_CONSTANTS_BATTLE_H

View File

@ -485,6 +485,19 @@ static void HandleInputChooseTarget(void)
}
}
static void HideAllTargets(void)
{
s32 i;
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
{
if (IsBattlerAlive(i) && gBattleSpritesDataPtr->healthBoxesData[i].healthboxIsBouncing)
{
gSprites[gBattlerSpriteIds[i]].callback = SpriteCb_HideAsMoveTarget;
EndBounceEffect(i, BOUNCE_HEALTHBOX);
}
}
}
static void HideShownTargets(void)
{
s32 i;
@ -498,6 +511,34 @@ static void HideShownTargets(void)
}
}
static void HandleInputShowEntireFieldTargets(void)
{
if (JOY_HELD(DPAD_ANY) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A)
gPlayerDpadHoldFrames++;
else
gPlayerDpadHoldFrames = 0;
if (JOY_NEW(A_BUTTON))
{
PlaySE(SE_SELECT);
HideAllTargets();
if (gBattleStruct->mega.playerSelect)
BtlController_EmitTwoReturnValues(1, 10, gMoveSelectionCursor[gActiveBattler] | RET_MEGA_EVOLUTION | (gMultiUsePlayerCursor << 8));
else
BtlController_EmitTwoReturnValues(1, 10, gMoveSelectionCursor[gActiveBattler] | (gMultiUsePlayerCursor << 8));
HideMegaTriggerSprite();
PlayerBufferExecCompleted();
}
else if (gMain.newKeys & B_BUTTON || gPlayerDpadHoldFrames > 59)
{
PlaySE(SE_SELECT);
HideAllTargets();
gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseMove;
DoBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX, 7, 1);
DoBounceEffect(gActiveBattler, BOUNCE_MON, 7, 1);
}
}
static void HandleInputShowTargets(void)
{
if (JOY_HELD(DPAD_ANY) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A)
@ -589,27 +630,39 @@ static void HandleInputChooseMove(void)
}
// Show all available targets for multi-target moves
if (B_SHOW_TARGETS && moveTarget & (MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY))
if (B_SHOW_TARGETS)
{
TryShowAsTarget(gMultiUsePlayerCursor);
TryShowAsTarget(BATTLE_PARTNER(gMultiUsePlayerCursor));
if (moveTarget & MOVE_TARGET_FOES_AND_ALLY)
TryShowAsTarget(BATTLE_PARTNER(gActiveBattler));
canSelectTarget = 2;
if ((moveTarget & MOVE_TARGET_ALL_BATTLERS) == MOVE_TARGET_ALL_BATTLERS)
{
u32 i = 0;
for (i = 0; i < gBattlersCount; i++)
TryShowAsTarget(i);
canSelectTarget = 3;
}
else if (moveTarget & (MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY))
{
TryShowAsTarget(gMultiUsePlayerCursor);
TryShowAsTarget(BATTLE_PARTNER(gMultiUsePlayerCursor));
if (moveTarget & MOVE_TARGET_FOES_AND_ALLY)
TryShowAsTarget(BATTLE_PARTNER(gActiveBattler));
canSelectTarget = 2;
}
}
}
if (canSelectTarget == 0)
switch (canSelectTarget)
{
case 0:
default:
if (gBattleStruct->mega.playerSelect)
BtlController_EmitTwoReturnValues(1, 10, gMoveSelectionCursor[gActiveBattler] | RET_MEGA_EVOLUTION | (gMultiUsePlayerCursor << 8));
else
BtlController_EmitTwoReturnValues(1, 10, gMoveSelectionCursor[gActiveBattler] | (gMultiUsePlayerCursor << 8));
HideMegaTriggerSprite();
PlayerBufferExecCompleted();
}
else if (canSelectTarget == 1)
{
break;
case 1:
gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseTarget;
if (moveTarget & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED))
@ -620,10 +673,13 @@ static void HandleInputChooseMove(void)
gMultiUsePlayerCursor = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_ShowAsMoveTarget;
}
else
{
break;
case 2:
gBattlerControllerFuncs[gActiveBattler] = HandleInputShowTargets;
break;
case 3: // Entire field
gBattlerControllerFuncs[gActiveBattler] = HandleInputShowEntireFieldTargets;
break;
}
}
else if (JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59)

View File

@ -8838,7 +8838,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.accuracy = 0,
.pp = 10,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_USER,
.target = MOVE_TARGET_ALL_BATTLERS,
.priority = 0,
.flags = 0,
.split = SPLIT_STATUS,
@ -9083,7 +9083,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.accuracy = 0,
.pp = 10,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_USER | MOVE_TARGET_FOES_AND_ALLY,
.target = MOVE_TARGET_ALL_BATTLERS,
.priority = 0,
.flags = 0,
.split = SPLIT_STATUS,