Adjusted AI calcs for Triple Kick Effect (#5127)
* Adjusted AI calcs for Triple Kick Effect * use strikeCount * fix compile
This commit is contained in:
parent
77afb01477
commit
527cc33e0d
@ -577,13 +577,13 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u
|
|||||||
if (critChanceIndex > 1) // Consider crit damage only if a move has at least +2 crit chance
|
if (critChanceIndex > 1) // Consider crit damage only if a move has at least +2 crit chance
|
||||||
{
|
{
|
||||||
s32 nonCritDmg = CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower,
|
s32 nonCritDmg = CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower,
|
||||||
effectivenessMultiplier, weather, FALSE,
|
effectivenessMultiplier, weather, FALSE,
|
||||||
aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef],
|
aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef],
|
||||||
aiData->abilities[battlerAtk], aiData->abilities[battlerDef]);
|
aiData->abilities[battlerAtk], aiData->abilities[battlerDef]);
|
||||||
s32 critDmg = CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower,
|
s32 critDmg = CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower,
|
||||||
effectivenessMultiplier, weather, TRUE,
|
effectivenessMultiplier, weather, TRUE,
|
||||||
aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef],
|
aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef],
|
||||||
aiData->abilities[battlerAtk], aiData->abilities[battlerDef]);
|
aiData->abilities[battlerAtk], aiData->abilities[battlerDef]);
|
||||||
|
|
||||||
u32 critOdds = GetCritHitOdds(critChanceIndex);
|
u32 critOdds = GetCritHitOdds(critChanceIndex);
|
||||||
// With critOdds getting closer to 1, dmg gets closer to critDmg.
|
// With critOdds getting closer to 1, dmg gets closer to critDmg.
|
||||||
@ -596,20 +596,33 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u
|
|||||||
else if (critChanceIndex == -2) // Guaranteed critical
|
else if (critChanceIndex == -2) // Guaranteed critical
|
||||||
{
|
{
|
||||||
s32 critDmg = CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower,
|
s32 critDmg = CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower,
|
||||||
effectivenessMultiplier, weather, TRUE,
|
effectivenessMultiplier, weather, TRUE,
|
||||||
aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef],
|
aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef],
|
||||||
aiData->abilities[battlerAtk], aiData->abilities[battlerDef]);
|
aiData->abilities[battlerAtk], aiData->abilities[battlerDef]);
|
||||||
|
|
||||||
simDamage.expected = GetDamageByRollType(critDmg, rollType);
|
simDamage.expected = GetDamageByRollType(critDmg, rollType);
|
||||||
simDamage.minimum = LowestRollDmg(critDmg);
|
simDamage.minimum = LowestRollDmg(critDmg);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
s32 nonCritDmg = CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower,
|
s32 nonCritDmg = 0;
|
||||||
effectivenessMultiplier, weather, FALSE,
|
if (gMovesInfo[move].effect == EFFECT_TRIPLE_KICK)
|
||||||
aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef],
|
{
|
||||||
aiData->abilities[battlerAtk], aiData->abilities[battlerDef]);
|
for (gMultiHitCounter = gMovesInfo[move].strikeCount; gMultiHitCounter > 0; gMultiHitCounter--) // The global is used to simulate actual damage done
|
||||||
|
{
|
||||||
|
nonCritDmg += CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower,
|
||||||
|
effectivenessMultiplier, weather, FALSE,
|
||||||
|
aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef],
|
||||||
|
aiData->abilities[battlerAtk], aiData->abilities[battlerDef]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nonCritDmg = CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower,
|
||||||
|
effectivenessMultiplier, weather, FALSE,
|
||||||
|
aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef],
|
||||||
|
aiData->abilities[battlerAtk], aiData->abilities[battlerDef]);
|
||||||
|
}
|
||||||
simDamage.expected = GetDamageByRollType(nonCritDmg, rollType);
|
simDamage.expected = GetDamageByRollType(nonCritDmg, rollType);
|
||||||
simDamage.minimum = LowestRollDmg(nonCritDmg);
|
simDamage.minimum = LowestRollDmg(nonCritDmg);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8898,10 +8898,7 @@ static inline u32 CalcMoveBasePower(u32 move, u32 battlerAtk, u32 battlerDef, u3
|
|||||||
basePower = gBattleStruct->presentBasePower;
|
basePower = gBattleStruct->presentBasePower;
|
||||||
break;
|
break;
|
||||||
case EFFECT_TRIPLE_KICK:
|
case EFFECT_TRIPLE_KICK:
|
||||||
if (gMultiHitCounter == 0) // Calc damage with max BP for move consideration
|
basePower *= 1 + gMovesInfo[move].strikeCount - gMultiHitCounter;
|
||||||
basePower *= 6;
|
|
||||||
else
|
|
||||||
basePower *= 1 + gMovesInfo[move].strikeCount - gMultiHitCounter;
|
|
||||||
break;
|
break;
|
||||||
case EFFECT_SPIT_UP:
|
case EFFECT_SPIT_UP:
|
||||||
basePower = 100 * gDisableStructs[battlerAtk].stockpileCounter;
|
basePower = 100 * gDisableStructs[battlerAtk].stockpileCounter;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user