|
|
|
|
@@ -105,7 +105,8 @@ static bool8 AllAtActionConfirmed(void);
|
|
|
|
|
static void TryChangeTurnOrder(void);
|
|
|
|
|
static void CheckChosenMoveForEffectsBeforeTurnStarts(void);
|
|
|
|
|
static void CheckMegaEvolutionBeforeTurn(void);
|
|
|
|
|
static void CheckQuickClaw_CustapBerryActivation(void);
|
|
|
|
|
static void TryChangingTurnOrderEffects(u32 battler1, u32 battler2);
|
|
|
|
|
static void CheckChangingTurnOrderEffects(void);
|
|
|
|
|
static void FreeResetData_ReturnToOvOrDoEvolutions(void);
|
|
|
|
|
static void ReturnFromBattleToOverworld(void);
|
|
|
|
|
static void TryEvolvePokemon(void);
|
|
|
|
|
@@ -203,7 +204,6 @@ EWRAM_DATA u32 gStatuses4[MAX_BATTLERS_COUNT] = {0};
|
|
|
|
|
EWRAM_DATA struct DisableStruct gDisableStructs[MAX_BATTLERS_COUNT] = {0};
|
|
|
|
|
EWRAM_DATA u16 gPauseCounterBattle = 0;
|
|
|
|
|
EWRAM_DATA u16 gPaydayMoney = 0;
|
|
|
|
|
EWRAM_DATA u16 gRandomTurnNumber = 0;
|
|
|
|
|
EWRAM_DATA u8 gBattleCommunication[BATTLE_COMMUNICATION_ENTRIES_COUNT] = {0};
|
|
|
|
|
EWRAM_DATA u8 gBattleOutcome = 0;
|
|
|
|
|
EWRAM_DATA struct ProtectStruct gProtectStructs[MAX_BATTLERS_COUNT] = {0};
|
|
|
|
|
@@ -3096,8 +3096,6 @@ static void BattleStartClearSetData(void)
|
|
|
|
|
gBattleStruct->givenExpMons = 0;
|
|
|
|
|
gBattleStruct->palaceFlags = 0;
|
|
|
|
|
|
|
|
|
|
gRandomTurnNumber = Random();
|
|
|
|
|
|
|
|
|
|
gBattleResults.shinyWildMon = IsMonShiny(&gEnemyParty[0]);
|
|
|
|
|
|
|
|
|
|
gBattleStruct->arenaLostPlayerMons = 0;
|
|
|
|
|
@@ -3854,8 +3852,6 @@ static void TryDoEventsBeforeFirstTurn(void)
|
|
|
|
|
gBattleStruct->turnCountersTracker = 0;
|
|
|
|
|
gMoveResultFlags = 0;
|
|
|
|
|
|
|
|
|
|
gRandomTurnNumber = Random();
|
|
|
|
|
|
|
|
|
|
SetAiLogicDataForTurn(AI_DATA); // get assumed abilities, hold effects, etc of all battlers
|
|
|
|
|
|
|
|
|
|
if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
|
|
|
|
|
@@ -3950,7 +3946,6 @@ void BattleTurnPassed(void)
|
|
|
|
|
BattlePutTextOnWindow(gText_EmptyString3, B_WIN_MSG);
|
|
|
|
|
SetAiLogicDataForTurn(AI_DATA); // get assumed abilities, hold effects, etc of all battlers
|
|
|
|
|
gBattleMainFunc = HandleTurnActionSelectionState;
|
|
|
|
|
gRandomTurnNumber = Random();
|
|
|
|
|
|
|
|
|
|
if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
|
|
|
|
|
BattleScriptExecute(BattleScript_PalacePrintFlavorText);
|
|
|
|
|
@@ -4746,26 +4741,6 @@ u32 GetWhichBattlerFasterArgs(u32 battler1, u32 battler2, bool32 ignoreChosenMov
|
|
|
|
|
{
|
|
|
|
|
u32 strikesFirst = 0;
|
|
|
|
|
|
|
|
|
|
// Battler 1
|
|
|
|
|
// Quick Draw
|
|
|
|
|
if (!ignoreChosenMoves && ability1 == ABILITY_QUICK_DRAW && !IS_MOVE_STATUS(gChosenMoveByBattler[battler1]) && RandomPercentage(RNG_QUICK_DRAW, 30))
|
|
|
|
|
gProtectStructs[battler1].quickDraw = TRUE;
|
|
|
|
|
// Quick Claw and Custap Berry
|
|
|
|
|
if (!gProtectStructs[battler1].quickDraw
|
|
|
|
|
&& ((holdEffectBattler1 == HOLD_EFFECT_QUICK_CLAW && gRandomTurnNumber < (0xFFFF * GetBattlerHoldEffectParam(battler1)) / 100)
|
|
|
|
|
|| (holdEffectBattler1 == HOLD_EFFECT_CUSTAP_BERRY && HasEnoughHpToEatBerry(battler1, 4, gBattleMons[battler1].item))))
|
|
|
|
|
gProtectStructs[battler1].usedCustapBerry = TRUE;
|
|
|
|
|
|
|
|
|
|
// Battler 2
|
|
|
|
|
// Quick Draw
|
|
|
|
|
if (!ignoreChosenMoves && ability2 == ABILITY_QUICK_DRAW && !IS_MOVE_STATUS(gChosenMoveByBattler[battler2]) && RandomPercentage(RNG_QUICK_DRAW, 30))
|
|
|
|
|
gProtectStructs[battler2].quickDraw = TRUE;
|
|
|
|
|
// Quick Claw and Custap Berry
|
|
|
|
|
if (!gProtectStructs[battler2].quickDraw
|
|
|
|
|
&& ((holdEffectBattler2 == HOLD_EFFECT_QUICK_CLAW && gRandomTurnNumber < (0xFFFF * GetBattlerHoldEffectParam(battler2)) / 100)
|
|
|
|
|
|| (holdEffectBattler2 == HOLD_EFFECT_CUSTAP_BERRY && HasEnoughHpToEatBerry(battler2, 4, gBattleMons[battler2].item))))
|
|
|
|
|
gProtectStructs[battler2].usedCustapBerry = TRUE;
|
|
|
|
|
|
|
|
|
|
if (priority1 == priority2)
|
|
|
|
|
{
|
|
|
|
|
// QUICK CLAW / CUSTAP - always first
|
|
|
|
|
@@ -4936,6 +4911,7 @@ static void SetActionsAndBattlersTurnOrder(void)
|
|
|
|
|
{
|
|
|
|
|
u8 battler1 = gBattlerByTurnOrder[i];
|
|
|
|
|
u8 battler2 = gBattlerByTurnOrder[j];
|
|
|
|
|
TryChangingTurnOrderEffects(battler1, battler2);
|
|
|
|
|
if (gActionsByTurnOrder[i] != B_ACTION_USE_ITEM
|
|
|
|
|
&& gActionsByTurnOrder[j] != B_ACTION_USE_ITEM
|
|
|
|
|
&& gActionsByTurnOrder[i] != B_ACTION_SWITCH
|
|
|
|
|
@@ -4950,7 +4926,7 @@ static void SetActionsAndBattlersTurnOrder(void)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
gBattleMainFunc = CheckQuickClaw_CustapBerryActivation;
|
|
|
|
|
gBattleMainFunc = CheckChangingTurnOrderEffects;
|
|
|
|
|
gBattleStruct->quickClawBattlerId = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -4968,6 +4944,7 @@ static void TurnValuesCleanUp(bool8 var0)
|
|
|
|
|
gProtectStructs[i].banefulBunkered = FALSE;
|
|
|
|
|
gProtectStructs[i].quash = FALSE;
|
|
|
|
|
gProtectStructs[i].usedCustapBerry = FALSE;
|
|
|
|
|
gProtectStructs[i].quickDraw = FALSE;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
@@ -5115,7 +5092,37 @@ static void TryChangeTurnOrder(void)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void CheckQuickClaw_CustapBerryActivation(void)
|
|
|
|
|
static void TryChangingTurnOrderEffects(u32 battler1, u32 battler2)
|
|
|
|
|
{
|
|
|
|
|
u32 ability1 = GetBattlerAbility(battler1);
|
|
|
|
|
u32 speedBattler1 = GetBattlerTotalSpeedStat(battler1);
|
|
|
|
|
u32 holdEffectBattler1 = GetBattlerHoldEffect(battler1, TRUE);
|
|
|
|
|
u32 speedBattler2 = GetBattlerTotalSpeedStat(battler2);
|
|
|
|
|
u32 holdEffectBattler2 = GetBattlerHoldEffect(battler2, TRUE);
|
|
|
|
|
u32 ability2 = GetBattlerAbility(battler2);
|
|
|
|
|
|
|
|
|
|
// Battler 1
|
|
|
|
|
// Quick Draw
|
|
|
|
|
if (ability1 == ABILITY_QUICK_DRAW && !IS_MOVE_STATUS(gChosenMoveByBattler[battler1]) && RandomPercentage(RNG_QUICK_DRAW, 30))
|
|
|
|
|
gProtectStructs[battler1].quickDraw = TRUE;
|
|
|
|
|
// Quick Claw and Custap Berry
|
|
|
|
|
if (!gProtectStructs[battler1].quickDraw
|
|
|
|
|
&& ((holdEffectBattler1 == HOLD_EFFECT_QUICK_CLAW && RandomPercentage(RNG_QUICK_CLAW, 10))
|
|
|
|
|
|| (holdEffectBattler1 == HOLD_EFFECT_CUSTAP_BERRY && HasEnoughHpToEatBerry(battler1, 4, gBattleMons[battler1].item))))
|
|
|
|
|
gProtectStructs[battler1].usedCustapBerry = TRUE;
|
|
|
|
|
|
|
|
|
|
// Battler 2
|
|
|
|
|
// Quick Draw
|
|
|
|
|
if (ability2 == ABILITY_QUICK_DRAW && !IS_MOVE_STATUS(gChosenMoveByBattler[battler2]) && RandomPercentage(RNG_QUICK_DRAW, 30))
|
|
|
|
|
gProtectStructs[battler2].quickDraw = TRUE;
|
|
|
|
|
// Quick Claw and Custap Berry
|
|
|
|
|
if (!gProtectStructs[battler2].quickDraw
|
|
|
|
|
&& ((holdEffectBattler2 == HOLD_EFFECT_QUICK_CLAW && RandomPercentage(RNG_QUICK_CLAW, 10))
|
|
|
|
|
|| (holdEffectBattler2 == HOLD_EFFECT_CUSTAP_BERRY && HasEnoughHpToEatBerry(battler2, 4, gBattleMons[battler2].item))))
|
|
|
|
|
gProtectStructs[battler2].usedCustapBerry = TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void CheckChangingTurnOrderEffects(void)
|
|
|
|
|
{
|
|
|
|
|
u32 i, battler;
|
|
|
|
|
|
|
|
|
|
@@ -5150,7 +5157,6 @@ static void CheckQuickClaw_CustapBerryActivation(void)
|
|
|
|
|
else if (gProtectStructs[battler].quickDraw)
|
|
|
|
|
{
|
|
|
|
|
gBattlerAbility = battler;
|
|
|
|
|
gProtectStructs[battler].quickDraw = FALSE;
|
|
|
|
|
gLastUsedAbility = gBattleMons[battler].ability;
|
|
|
|
|
PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility);
|
|
|
|
|
RecordAbilityBattle(battler, gLastUsedAbility);
|
|
|
|
|
|