class_name BattleEffect extends RefCounted #un effet actif sur un pokemon en combat : statut, confusion, peur... (plus tard : talent, objet tenu). #le moteur appelle ces crochets aux moments cles ; une sous-classe ne redefinit que ceux qui l'interessent. #les crochets "async" peuvent utiliser "await" (messages, degats...). var id : StringName = &"" ## Modifie une statistique (brulure : Attaque / 2, paralysie : Vitesse / 2...). Synchrone. func modify_stat(_mon : BattleMon, _stat : PokemonNature.Stat, value : float) -> float: return value ## Appele juste avant qu'un pokemon utilise une capacite. Renvoyer false = il ne peut pas agir. func before_action(_battle : Battle, _slot : BattleSlot, _action : BattleAction) -> bool: return true ## Appele quand le pokemon entre en combat (Intimidation, Crachin...). func on_enter(_battle : Battle, _slot : BattleSlot) -> void: pass ## Appele sur le DEFENSEUR avant qu'une capacite ne le touche. Renvoyer true = la capacite est annulee (talent d'absorption...). func on_before_hit(_battle : Battle, _attacker : BattleSlot, _defender : BattleSlot, _move : MoveData) -> bool: return false ## Appele sur le DEFENSEUR apres chaque coup recu (talents de contact...). func on_after_hit(_battle : Battle, _attacker : BattleSlot, _defender : BattleSlot, _move : MoveData, _damage : int) -> void: pass ## Appele sur l'ATTAQUANT pendant le calcul des degats : renvoie les degats modifies (Technicien, Adaptabilite...). func modify_outgoing_damage(_attacker : BattleMon, _defender : BattleMon, _move : MoveData, damage : float) -> float: return damage ## Appele a la fin de chaque tour (degats de brulure, de poison...). func on_turn_end(_battle : Battle, _slot : BattleSlot) -> void: pass ## Pour les effets temporaires : true = retire a la fin du tour (peur). func is_expired() -> bool: return false