Aller au contenu principal
Voir

Modifier la puissance d'une attaque

Principe

La puissance d'une attaque peut être modifiée pour deux raisons distinctes :

  • Depuis l'attaque elle-même : l'attaque recalcule sa puissance de base en fonction du contexte.
  • Depuis un effet externe : un effet actif applique un multiplicateur sur la puissance de base.

Les deux mécanismes n'interviennent pas au même niveau : real_base_power retourne la puissance de base (valeur absolue), tandis que base_power_multiplier retourne un multiplicateur appliqué après.

Depuis l'attaque

Certaines attaques peuvent modifier leur puissance selon leurs propres règles. Par exemple, l'attaque Acrobatie double sa puissance si l'utilisateur n'a pas d'objet.

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

Exemple : Acrobatie

# Get the real base power of the move (taking in account all parameter)
# @param user [PFM::PokemonBattler] user of the move
# @param target [PFM::PokemonBattler] target of the move
# @return [Numeric]
def real_base_power(user, target)
return power * 2 if user.item_effect.is_a?(Battle::Effects::Item::Gems) && user.item_consumed
return power * 2 unless user.hold_item?(user.battle_item_db_symbol)

return super
end
  • power est la puissance de base définie dans les données de l'attaque.
  • super retourne la puissance de base non modifiée si aucune condition n'est remplie.

Depuis un effet

Certains effets peuvent modifier la puissance d'une attaque via un multiplicateur. Par exemple, le talent Technicien multiplie par 1.5 la puissance des attaques de 60 ou moins.

Pour gérer ce comportement, on utilise la méthode base_power_multiplier dans la classe de l'effet.

Exemple : Technicien

# Get the base power multiplier of this move
# @param user [PFM::PokemonBattler]
# @param target [PFM::PokemonBattler]
# @param move [Battle::Move]
# @return [Float]
def base_power_multiplier(user, target, move)
return super if user != @target
return super if move.power > 60

return 1.5
end
  • super retourne le multiplicateur par défaut (1.0) si les conditions ne sont pas remplies.
  • La vérification porte sur move.power (puissance de base) et non sur real_base_power (puissance après modifications).
  • Le retour 1.5 est un multiplicateur : la puissance finale sera real_base_power * 1.5.

Conclusion

  • Utilisez real_base_power si la modification dépend de la logique propre de l'attaque. Retournez la puissance de base modifiée (Numeric).
  • Utilisez base_power_multiplier si la modification dépend d'un effet externe. Retournez un multiplicateur (Float).
  • real_base_power définit la puissance absolue, base_power_multiplier applique un facteur multiplicatif par-dessus.