mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2025-03-25 06:58:25 +01:00
AI learns abilities which halve/double damage
This commit is contained in:
parent
1b56216d7c
commit
3e27de72fa
@ -1575,7 +1575,11 @@ u8 DoBattlerEndTurnEffects(void)
|
||||
|
||||
gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / (B_BURN_DAMAGE >= GEN_7 ? 16 : 8);
|
||||
if (ability == ABILITY_HEATPROOF)
|
||||
{
|
||||
if (gBattleMoveDamage > (gBattleMoveDamage / 2) + 1) // Record ability if the burn takes less damage than it normally would.
|
||||
RecordAbilityBattle(gActiveBattler, ABILITY_HEATPROOF);
|
||||
gBattleMoveDamage /= 2;
|
||||
}
|
||||
if (gBattleMoveDamage == 0)
|
||||
gBattleMoveDamage = 1;
|
||||
BattleScriptExecute(BattleScript_BurnTurnDmg);
|
||||
@ -5804,7 +5808,7 @@ static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef)
|
||||
|
||||
static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, bool32 updateFlags)
|
||||
{
|
||||
u32 i;
|
||||
u32 i, ability;
|
||||
u32 holdEffectAtk, holdEffectParamAtk;
|
||||
u16 basePower = CalcMoveBasePower(move, battlerAtk, battlerDef);
|
||||
u16 holdEffectModifier;
|
||||
@ -5921,12 +5925,17 @@ static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDe
|
||||
}
|
||||
|
||||
// target's abilities
|
||||
switch (GetBattlerAbility(battlerDef))
|
||||
ability = GetBattlerAbility(battlerDef);
|
||||
switch (ability)
|
||||
{
|
||||
case ABILITY_HEATPROOF:
|
||||
case ABILITY_WATER_BUBBLE:
|
||||
if (moveType == TYPE_FIRE)
|
||||
{
|
||||
MulModifier(&modifier, UQ_4_12(0.5));
|
||||
if (updateFlags)
|
||||
RecordAbilityBattle(battlerDef, ability);
|
||||
}
|
||||
break;
|
||||
case ABILITY_DRY_SKIN:
|
||||
if (moveType == TYPE_FIRE)
|
||||
@ -5934,7 +5943,11 @@ static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDe
|
||||
break;
|
||||
case ABILITY_FLUFFY:
|
||||
if (IsMoveMakingContact(move, battlerAtk))
|
||||
{
|
||||
MulModifier(&modifier, UQ_4_12(0.5));
|
||||
if (updateFlags)
|
||||
RecordAbilityBattle(battlerDef, ability);
|
||||
}
|
||||
if (moveType == TYPE_FIRE)
|
||||
MulModifier(&modifier, UQ_4_12(2.0));
|
||||
break;
|
||||
@ -6065,7 +6078,7 @@ static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDe
|
||||
return ApplyModifier(modifier, basePower);
|
||||
}
|
||||
|
||||
static u32 CalcAttackStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, bool32 isCrit)
|
||||
static u32 CalcAttackStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, bool32 isCrit, bool32 updateFlags)
|
||||
{
|
||||
u8 atkStage;
|
||||
u32 atkStat;
|
||||
@ -6179,7 +6192,11 @@ static u32 CalcAttackStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, b
|
||||
{
|
||||
case ABILITY_THICK_FAT:
|
||||
if (moveType == TYPE_FIRE || moveType == TYPE_ICE)
|
||||
{
|
||||
MulModifier(&modifier, UQ_4_12(0.5));
|
||||
if (updateFlags)
|
||||
RecordAbilityBattle(battlerDef, ABILITY_THICK_FAT);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@ -6235,7 +6252,7 @@ static bool32 CanEvolve(u32 species)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static u32 CalcDefenseStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, bool32 isCrit)
|
||||
static u32 CalcDefenseStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, bool32 isCrit, bool32 updateFlags)
|
||||
{
|
||||
bool32 usesDefStat;
|
||||
u8 defStage;
|
||||
@ -6287,15 +6304,27 @@ static u32 CalcDefenseStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType,
|
||||
{
|
||||
case ABILITY_MARVEL_SCALE:
|
||||
if (gBattleMons[battlerDef].status1 & STATUS1_ANY && usesDefStat)
|
||||
{
|
||||
MulModifier(&modifier, UQ_4_12(1.5));
|
||||
if (updateFlags)
|
||||
RecordAbilityBattle(battlerDef, ABILITY_MARVEL_SCALE);
|
||||
}
|
||||
break;
|
||||
case ABILITY_FUR_COAT:
|
||||
if (usesDefStat)
|
||||
{
|
||||
MulModifier(&modifier, UQ_4_12(2.0));
|
||||
if (updateFlags)
|
||||
RecordAbilityBattle(battlerDef, ABILITY_FUR_COAT);
|
||||
}
|
||||
break;
|
||||
case ABILITY_GRASS_PELT:
|
||||
if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && usesDefStat)
|
||||
{
|
||||
MulModifier(&modifier, UQ_4_12(1.5));
|
||||
if (updateFlags)
|
||||
RecordAbilityBattle(battlerDef, ABILITY_GRASS_PELT);
|
||||
}
|
||||
break;
|
||||
case ABILITY_FLOWER_GIFT:
|
||||
if (gBattleMons[battlerDef].species == SPECIES_CHERRIM && WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_SUN_ANY && !usesDefStat)
|
||||
@ -6514,8 +6543,8 @@ s32 CalculateMoveDamage(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, s32
|
||||
// long dmg basic formula
|
||||
dmg = ((gBattleMons[battlerAtk].level * 2) / 5) + 2;
|
||||
dmg *= gBattleMovePower;
|
||||
dmg *= CalcAttackStat(move, battlerAtk, battlerDef, moveType, isCrit);
|
||||
dmg /= CalcDefenseStat(move, battlerAtk, battlerDef, moveType, isCrit);
|
||||
dmg *= CalcAttackStat(move, battlerAtk, battlerDef, moveType, isCrit, updateFlags);
|
||||
dmg /= CalcDefenseStat(move, battlerAtk, battlerDef, moveType, isCrit, updateFlags);
|
||||
dmg = (dmg / 50) + 2;
|
||||
|
||||
// Calculate final modifiers.
|
||||
|
Loading…
x
Reference in New Issue
Block a user