Aller au contenu principal
Voir

Modifier la formule de calcul des dégâts

Principe

La formule de calcul des dégâts est définie dans la méthode damages. Par défaut, elle utilise la formule standard de Pokémon (puissance, attaque, défense, STAB, efficacité, etc.).

Certaines attaques nécessitent de remplacer entièrement cette formule. Par exemple, Draco-Rage inflige toujours 40 PV de dégâts fixes, indépendamment des stats.

Remplacer la formule complète

Pour gérer ce comportement, on override la méthode damages dans la classe de l'attaque.

Exemple : Attaques à dégâts fixes

# Fixed damage values for specific moves
FIXED_DAMAGE_VALUES = {
sonic_boom: 20,
dragon_rage: 40
}.freeze

# Method calculating the damages done by the actual move
# @param user [PFM::PokemonBattler] user of the move
# @param target [PFM::PokemonBattler] target of the move
# @return [Integer]
def damages(user, target)
@critical = false
@effectiveness = 1
damage = FIXED_DAMAGE_VALUES.fetch(db_symbol, 1)
log_data("Fixed Damage Move: #{damage} HP")

return damage
end
  • @critical = false désactive le coup critique pour cette attaque.
  • @effectiveness = 1 force l'efficacité à neutre (pas de "super efficace" sur des dégâts fixes).

Modifier des sous-étapes de la formule

Si vous ne souhaitez pas remplacer la formule complète mais ajuster une étape spécifique, plusieurs méthodes internes à damages peuvent être overridées :

  • calc_critical_hit : calcul du coup critique
  • calc_sp_atk : stat d'attaque (physique ou spéciale)
  • calc_sp_def : stat de défense (physique ou spéciale)
  • calc_mod1 : premier modificateur (pré-critique)
  • calc_ch : multiplicateur de coup critique
  • calc_mod2 : deuxième modificateur (post-critique)
  • calc_stab : bonus STAB (Same Type Attack Bonus)
  • calc_mod3 : troisième modificateur (post-STAB)

Certaines de ces méthodes appellent à leur tour des hooks accessibles depuis les effets.

Conclusion

  • Utilisez damages pour remplacer entièrement la formule de calcul des dégâts.
  • Utilisez les sous-méthodes (calc_critical_hit, calc_stab, etc.) pour modifier une étape spécifique de la formule standard.
  • Pour les dégâts fixes, pensez à désactiver le critique (@critical = false) et l'efficacité (@effectiveness = 1).