mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2025-03-28 00:24:11 +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);
|
gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / (B_BURN_DAMAGE >= GEN_7 ? 16 : 8);
|
||||||
if (ability == ABILITY_HEATPROOF)
|
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;
|
gBattleMoveDamage /= 2;
|
||||||
|
}
|
||||||
if (gBattleMoveDamage == 0)
|
if (gBattleMoveDamage == 0)
|
||||||
gBattleMoveDamage = 1;
|
gBattleMoveDamage = 1;
|
||||||
BattleScriptExecute(BattleScript_BurnTurnDmg);
|
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)
|
static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, bool32 updateFlags)
|
||||||
{
|
{
|
||||||
u32 i;
|
u32 i, ability;
|
||||||
u32 holdEffectAtk, holdEffectParamAtk;
|
u32 holdEffectAtk, holdEffectParamAtk;
|
||||||
u16 basePower = CalcMoveBasePower(move, battlerAtk, battlerDef);
|
u16 basePower = CalcMoveBasePower(move, battlerAtk, battlerDef);
|
||||||
u16 holdEffectModifier;
|
u16 holdEffectModifier;
|
||||||
@ -5921,12 +5925,17 @@ static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDe
|
|||||||
}
|
}
|
||||||
|
|
||||||
// target's abilities
|
// target's abilities
|
||||||
switch (GetBattlerAbility(battlerDef))
|
ability = GetBattlerAbility(battlerDef);
|
||||||
|
switch (ability)
|
||||||
{
|
{
|
||||||
case ABILITY_HEATPROOF:
|
case ABILITY_HEATPROOF:
|
||||||
case ABILITY_WATER_BUBBLE:
|
case ABILITY_WATER_BUBBLE:
|
||||||
if (moveType == TYPE_FIRE)
|
if (moveType == TYPE_FIRE)
|
||||||
|
{
|
||||||
MulModifier(&modifier, UQ_4_12(0.5));
|
MulModifier(&modifier, UQ_4_12(0.5));
|
||||||
|
if (updateFlags)
|
||||||
|
RecordAbilityBattle(battlerDef, ability);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case ABILITY_DRY_SKIN:
|
case ABILITY_DRY_SKIN:
|
||||||
if (moveType == TYPE_FIRE)
|
if (moveType == TYPE_FIRE)
|
||||||
@ -5934,7 +5943,11 @@ static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDe
|
|||||||
break;
|
break;
|
||||||
case ABILITY_FLUFFY:
|
case ABILITY_FLUFFY:
|
||||||
if (IsMoveMakingContact(move, battlerAtk))
|
if (IsMoveMakingContact(move, battlerAtk))
|
||||||
|
{
|
||||||
MulModifier(&modifier, UQ_4_12(0.5));
|
MulModifier(&modifier, UQ_4_12(0.5));
|
||||||
|
if (updateFlags)
|
||||||
|
RecordAbilityBattle(battlerDef, ability);
|
||||||
|
}
|
||||||
if (moveType == TYPE_FIRE)
|
if (moveType == TYPE_FIRE)
|
||||||
MulModifier(&modifier, UQ_4_12(2.0));
|
MulModifier(&modifier, UQ_4_12(2.0));
|
||||||
break;
|
break;
|
||||||
@ -6065,7 +6078,7 @@ static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDe
|
|||||||
return ApplyModifier(modifier, basePower);
|
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;
|
u8 atkStage;
|
||||||
u32 atkStat;
|
u32 atkStat;
|
||||||
@ -6179,7 +6192,11 @@ static u32 CalcAttackStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, b
|
|||||||
{
|
{
|
||||||
case ABILITY_THICK_FAT:
|
case ABILITY_THICK_FAT:
|
||||||
if (moveType == TYPE_FIRE || moveType == TYPE_ICE)
|
if (moveType == TYPE_FIRE || moveType == TYPE_ICE)
|
||||||
|
{
|
||||||
MulModifier(&modifier, UQ_4_12(0.5));
|
MulModifier(&modifier, UQ_4_12(0.5));
|
||||||
|
if (updateFlags)
|
||||||
|
RecordAbilityBattle(battlerDef, ABILITY_THICK_FAT);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6235,7 +6252,7 @@ static bool32 CanEvolve(u32 species)
|
|||||||
return FALSE;
|
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;
|
bool32 usesDefStat;
|
||||||
u8 defStage;
|
u8 defStage;
|
||||||
@ -6287,15 +6304,27 @@ static u32 CalcDefenseStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType,
|
|||||||
{
|
{
|
||||||
case ABILITY_MARVEL_SCALE:
|
case ABILITY_MARVEL_SCALE:
|
||||||
if (gBattleMons[battlerDef].status1 & STATUS1_ANY && usesDefStat)
|
if (gBattleMons[battlerDef].status1 & STATUS1_ANY && usesDefStat)
|
||||||
|
{
|
||||||
MulModifier(&modifier, UQ_4_12(1.5));
|
MulModifier(&modifier, UQ_4_12(1.5));
|
||||||
|
if (updateFlags)
|
||||||
|
RecordAbilityBattle(battlerDef, ABILITY_MARVEL_SCALE);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case ABILITY_FUR_COAT:
|
case ABILITY_FUR_COAT:
|
||||||
if (usesDefStat)
|
if (usesDefStat)
|
||||||
|
{
|
||||||
MulModifier(&modifier, UQ_4_12(2.0));
|
MulModifier(&modifier, UQ_4_12(2.0));
|
||||||
|
if (updateFlags)
|
||||||
|
RecordAbilityBattle(battlerDef, ABILITY_FUR_COAT);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case ABILITY_GRASS_PELT:
|
case ABILITY_GRASS_PELT:
|
||||||
if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && usesDefStat)
|
if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && usesDefStat)
|
||||||
|
{
|
||||||
MulModifier(&modifier, UQ_4_12(1.5));
|
MulModifier(&modifier, UQ_4_12(1.5));
|
||||||
|
if (updateFlags)
|
||||||
|
RecordAbilityBattle(battlerDef, ABILITY_GRASS_PELT);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case ABILITY_FLOWER_GIFT:
|
case ABILITY_FLOWER_GIFT:
|
||||||
if (gBattleMons[battlerDef].species == SPECIES_CHERRIM && WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_SUN_ANY && !usesDefStat)
|
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
|
// long dmg basic formula
|
||||||
dmg = ((gBattleMons[battlerAtk].level * 2) / 5) + 2;
|
dmg = ((gBattleMons[battlerAtk].level * 2) / 5) + 2;
|
||||||
dmg *= gBattleMovePower;
|
dmg *= gBattleMovePower;
|
||||||
dmg *= CalcAttackStat(move, battlerAtk, battlerDef, moveType, isCrit);
|
dmg *= CalcAttackStat(move, battlerAtk, battlerDef, moveType, isCrit, updateFlags);
|
||||||
dmg /= CalcDefenseStat(move, battlerAtk, battlerDef, moveType, isCrit);
|
dmg /= CalcDefenseStat(move, battlerAtk, battlerDef, moveType, isCrit, updateFlags);
|
||||||
dmg = (dmg / 50) + 2;
|
dmg = (dmg / 50) + 2;
|
||||||
|
|
||||||
// Calculate final modifiers.
|
// Calculate final modifiers.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user