Tales-of-PKMN/game/battle/effects/status_registry.gd

50 lines
2.4 KiB
GDScript

class_name StatusRegistry
extends RefCounted
#correspondances entre les statuts principaux (PokemonInstance.Status) et leurs effets.
#les effets de statut n'ont pas d'etat propre (les compteurs sont sur BattleMon) : ils sont partages.
static var _effects : Dictionary = {}
static func effect_for(status : int) -> BattleEffect:
if status == PokemonInstance.Status.NONE: return null
if _effects.is_empty():
_effects[PokemonInstance.Status.BURN] = BurnEffect.new()
_effects[PokemonInstance.Status.PARALYSIS] = ParalysisEffect.new()
_effects[PokemonInstance.Status.POISON] = PoisonEffect.new(false)
_effects[PokemonInstance.Status.BAD_POISON] = PoisonEffect.new(true)
_effects[PokemonInstance.Status.SLEEP] = SleepEffect.new()
_effects[PokemonInstance.Status.FREEZE] = FreezeEffect.new()
return _effects.get(status)
## Nom PokeAPI du statut ("burn", "sleep"...) -> PokemonInstance.Status, ou -1 si ce n'est pas un statut principal.
static func from_ailment(ailment : String, move : MoveData = null) -> int:
match ailment:
"burn": return PokemonInstance.Status.BURN
"paralysis": return PokemonInstance.Status.PARALYSIS
"freeze": return PokemonInstance.Status.FREEZE
"sleep": return PokemonInstance.Status.SLEEP
"poison":
#Toxik et Crochet Venin inflige le poison grave
var severe : bool = move != null and (move.api_name == "toxic" or move.api_name == "poison-fang")
return PokemonInstance.Status.BAD_POISON if severe else PokemonInstance.Status.POISON
return -1
static func is_immune(types : Array[String], status : int) -> bool:
match status:
PokemonInstance.Status.BURN: return types.has("fire")
PokemonInstance.Status.FREEZE: return types.has("ice")
PokemonInstance.Status.PARALYSIS: return types.has("electric")
PokemonInstance.Status.POISON, PokemonInstance.Status.BAD_POISON: return types.has("poison") or types.has("steel")
return false
static func apply_message(status : int, pokemon_name : String) -> String:
match status:
PokemonInstance.Status.BURN: return "%s est brûlé !" % pokemon_name
PokemonInstance.Status.PARALYSIS: return "%s est paralysé ! Il aura du mal à attaquer !" % pokemon_name
PokemonInstance.Status.FREEZE: return "%s est gelé !" % pokemon_name
PokemonInstance.Status.SLEEP: return "%s s'endort !" % pokemon_name
PokemonInstance.Status.POISON: return "%s est empoisonné !" % pokemon_name
PokemonInstance.Status.BAD_POISON: return "%s est gravement empoisonné !" % pokemon_name
return ""