mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2025-02-21 11:43:37 +01:00
add MOVE_TARGET_ALL_BATTLERS
This commit is contained in:
parent
9c94eb6140
commit
aac7ae3595
@ -379,4 +379,6 @@
|
|||||||
#define MOVE_TARGET_OPPONENTS_FIELD 0x40
|
#define MOVE_TARGET_OPPONENTS_FIELD 0x40
|
||||||
#define MOVE_TARGET_ALLY 0x80
|
#define MOVE_TARGET_ALLY 0x80
|
||||||
|
|
||||||
|
#define MOVE_TARGET_ALL_BATTLERS (MOVE_TARGET_BOTH | MOVE_TARGET_OPPONENTS_FIELD)
|
||||||
|
|
||||||
#endif // GUARD_CONSTANTS_BATTLE_H
|
#endif // GUARD_CONSTANTS_BATTLE_H
|
||||||
|
@ -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)
|
static void HideShownTargets(void)
|
||||||
{
|
{
|
||||||
s32 i;
|
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)
|
static void HandleInputShowTargets(void)
|
||||||
{
|
{
|
||||||
if (JOY_HELD(DPAD_ANY) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A)
|
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
|
// 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);
|
if ((moveTarget & MOVE_TARGET_ALL_BATTLERS) == MOVE_TARGET_ALL_BATTLERS)
|
||||||
TryShowAsTarget(BATTLE_PARTNER(gMultiUsePlayerCursor));
|
{
|
||||||
if (moveTarget & MOVE_TARGET_FOES_AND_ALLY)
|
u32 i = 0;
|
||||||
TryShowAsTarget(BATTLE_PARTNER(gActiveBattler));
|
for (i = 0; i < gBattlersCount; i++)
|
||||||
canSelectTarget = 2;
|
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)
|
if (gBattleStruct->mega.playerSelect)
|
||||||
BtlController_EmitTwoReturnValues(1, 10, gMoveSelectionCursor[gActiveBattler] | RET_MEGA_EVOLUTION | (gMultiUsePlayerCursor << 8));
|
BtlController_EmitTwoReturnValues(1, 10, gMoveSelectionCursor[gActiveBattler] | RET_MEGA_EVOLUTION | (gMultiUsePlayerCursor << 8));
|
||||||
else
|
else
|
||||||
BtlController_EmitTwoReturnValues(1, 10, gMoveSelectionCursor[gActiveBattler] | (gMultiUsePlayerCursor << 8));
|
BtlController_EmitTwoReturnValues(1, 10, gMoveSelectionCursor[gActiveBattler] | (gMultiUsePlayerCursor << 8));
|
||||||
HideMegaTriggerSprite();
|
HideMegaTriggerSprite();
|
||||||
PlayerBufferExecCompleted();
|
PlayerBufferExecCompleted();
|
||||||
}
|
break;
|
||||||
else if (canSelectTarget == 1)
|
case 1:
|
||||||
{
|
|
||||||
gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseTarget;
|
gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseTarget;
|
||||||
|
|
||||||
if (moveTarget & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED))
|
if (moveTarget & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED))
|
||||||
@ -620,10 +673,13 @@ static void HandleInputChooseMove(void)
|
|||||||
gMultiUsePlayerCursor = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
|
gMultiUsePlayerCursor = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
|
||||||
|
|
||||||
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_ShowAsMoveTarget;
|
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_ShowAsMoveTarget;
|
||||||
}
|
break;
|
||||||
else
|
case 2:
|
||||||
{
|
|
||||||
gBattlerControllerFuncs[gActiveBattler] = HandleInputShowTargets;
|
gBattlerControllerFuncs[gActiveBattler] = HandleInputShowTargets;
|
||||||
|
break;
|
||||||
|
case 3: // Entire field
|
||||||
|
gBattlerControllerFuncs[gActiveBattler] = HandleInputShowEntireFieldTargets;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59)
|
else if (JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59)
|
||||||
|
@ -8838,7 +8838,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
|||||||
.accuracy = 0,
|
.accuracy = 0,
|
||||||
.pp = 10,
|
.pp = 10,
|
||||||
.secondaryEffectChance = 0,
|
.secondaryEffectChance = 0,
|
||||||
.target = MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_USER,
|
.target = MOVE_TARGET_ALL_BATTLERS,
|
||||||
.priority = 0,
|
.priority = 0,
|
||||||
.flags = 0,
|
.flags = 0,
|
||||||
.split = SPLIT_STATUS,
|
.split = SPLIT_STATUS,
|
||||||
@ -9083,7 +9083,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
|||||||
.accuracy = 0,
|
.accuracy = 0,
|
||||||
.pp = 10,
|
.pp = 10,
|
||||||
.secondaryEffectChance = 0,
|
.secondaryEffectChance = 0,
|
||||||
.target = MOVE_TARGET_USER | MOVE_TARGET_FOES_AND_ALLY,
|
.target = MOVE_TARGET_ALL_BATTLERS,
|
||||||
.priority = 0,
|
.priority = 0,
|
||||||
.flags = 0,
|
.flags = 0,
|
||||||
.split = SPLIT_STATUS,
|
.split = SPLIT_STATUS,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user