opponents properly revert Gigantamax + understand Max Guard
This commit is contained in:
parent
fff0f78c89
commit
e1c819a863
4 changed files with 16 additions and 3 deletions
|
@ -533,6 +533,7 @@ struct DynamaxData
|
||||||
u16 baseMove[MAX_BATTLERS_COUNT]; // base move of Max Move
|
u16 baseMove[MAX_BATTLERS_COUNT]; // base move of Max Move
|
||||||
u16 lastUsedBaseMove;
|
u16 lastUsedBaseMove;
|
||||||
u16 levelUpHP;
|
u16 levelUpHP;
|
||||||
|
u16 opponentBaseForm; // changedSpecies isn't used for opposing Pokemon
|
||||||
};
|
};
|
||||||
|
|
||||||
struct StolenItem
|
struct StolenItem
|
||||||
|
|
|
@ -3080,6 +3080,10 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score)
|
||||||
// We only check for moves that have a 20% chance or more for their secondary effect to happen because moves with a smaller chance are rather worthless. We don't want the AI to use those.
|
// We only check for moves that have a 20% chance or more for their secondary effect to happen because moves with a smaller chance are rather worthless. We don't want the AI to use those.
|
||||||
bool32 sereneGraceBoost = (AI_DATA->abilities[battlerAtk] == ABILITY_SERENE_GRACE && (gBattleMoves[move].secondaryEffectChance >= 20 && gBattleMoves[move].secondaryEffectChance < 100));
|
bool32 sereneGraceBoost = (AI_DATA->abilities[battlerAtk] == ABILITY_SERENE_GRACE && (gBattleMoves[move].secondaryEffectChance >= 20 && gBattleMoves[move].secondaryEffectChance < 100));
|
||||||
|
|
||||||
|
// The AI should understand that while Dynamaxed, status moves function like Protect.
|
||||||
|
if (IsDynamaxed(battlerAtk) && gBattleMoves[move].split == SPLIT_STATUS)
|
||||||
|
moveEffect = EFFECT_PROTECT;
|
||||||
|
|
||||||
// Targeting partner, check benefits of doing that instead
|
// Targeting partner, check benefits of doing that instead
|
||||||
if (IsTargetingPartner(battlerAtk, battlerDef))
|
if (IsTargetingPartner(battlerAtk, battlerDef))
|
||||||
return score;
|
return score;
|
||||||
|
|
|
@ -115,7 +115,7 @@ bool32 CanDynamax(u16 battlerId)
|
||||||
#if B_FLAG_DYNAMAX_BATTLE != 0
|
#if B_FLAG_DYNAMAX_BATTLE != 0
|
||||||
if (!FlagGet(B_FLAG_DYNAMAX_BATTLE))
|
if (!FlagGet(B_FLAG_DYNAMAX_BATTLE))
|
||||||
#endif
|
#endif
|
||||||
return FALSE;
|
//return FALSE;
|
||||||
|
|
||||||
|
|
||||||
// Check if Player has a Dynamax Band.
|
// Check if Player has a Dynamax Band.
|
||||||
|
|
|
@ -10268,6 +10268,10 @@ bool32 TryBattleFormChange(u8 battlerId, u16 method)
|
||||||
// Saves the original species on the first form change for the player.
|
// Saves the original species on the first form change for the player.
|
||||||
if (side == B_SIDE_PLAYER && gBattleStruct->changedSpecies[monId] == SPECIES_NONE)
|
if (side == B_SIDE_PLAYER && gBattleStruct->changedSpecies[monId] == SPECIES_NONE)
|
||||||
gBattleStruct->changedSpecies[monId] = gBattleMons[battlerId].species;
|
gBattleStruct->changedSpecies[monId] = gBattleMons[battlerId].species;
|
||||||
|
|
||||||
|
// Saves the original species for Gigantamax forms for the opponent.
|
||||||
|
if (side == B_SIDE_OPPONENT && gBattleStruct->dynamax.opponentBaseForm == SPECIES_NONE)
|
||||||
|
gBattleStruct->dynamax.opponentBaseForm = gBattleMons[battlerId].species;
|
||||||
|
|
||||||
TryToSetBattleFormChangeMoves(&party[monId], method);
|
TryToSetBattleFormChangeMoves(&party[monId], method);
|
||||||
SetMonData(&party[monId], MON_DATA_SPECIES, &targetSpecies);
|
SetMonData(&party[monId], MON_DATA_SPECIES, &targetSpecies);
|
||||||
|
@ -10275,7 +10279,8 @@ bool32 TryBattleFormChange(u8 battlerId, u16 method)
|
||||||
RecalcBattlerStats(battlerId, &party[monId]);
|
RecalcBattlerStats(battlerId, &party[monId]);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
else if (gBattleStruct->changedSpecies[monId] != SPECIES_NONE)
|
else if (gBattleStruct->changedSpecies[monId] != SPECIES_NONE
|
||||||
|
|| gBattleStruct->dynamax.opponentBaseForm != SPECIES_NONE)
|
||||||
{
|
{
|
||||||
bool8 restoreSpecies = FALSE;
|
bool8 restoreSpecies = FALSE;
|
||||||
|
|
||||||
|
@ -10295,7 +10300,10 @@ bool32 TryBattleFormChange(u8 battlerId, u16 method)
|
||||||
{
|
{
|
||||||
// Reverts the original species
|
// Reverts the original species
|
||||||
TryToSetBattleFormChangeMoves(&party[monId], method);
|
TryToSetBattleFormChangeMoves(&party[monId], method);
|
||||||
SetMonData(&party[monId], MON_DATA_SPECIES, &gBattleStruct->changedSpecies[monId]);
|
if (side == B_SIDE_PLAYER)
|
||||||
|
SetMonData(&party[monId], MON_DATA_SPECIES, &gBattleStruct->changedSpecies[monId]);
|
||||||
|
else
|
||||||
|
SetMonData(&party[monId], MON_DATA_SPECIES, &gBattleStruct->dynamax.opponentBaseForm);
|
||||||
RecalcBattlerStats(battlerId, &party[monId]);
|
RecalcBattlerStats(battlerId, &party[monId]);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue