class_name BattleField extends RefCounted #etat du terrain, commun aux deux camps : meteo (terrains et barrieres viendront plus tard). #les talents (Crachin, Sechesse...) et les capacites (Danse Pluie...) la modifient via Battle.set_weather(). enum Weather { NONE, SUN, RAIN, SANDSTORM, SNOW } const DEFAULT_WEATHER_TURNS : int = 5 #capacites qui changent la meteo (nom d'API) const WEATHER_MOVES : Dictionary = { "sunny-day": Weather.SUN, "rain-dance": Weather.RAIN, "sandstorm": Weather.SANDSTORM, "hail": Weather.SNOW, "snowscape": Weather.SNOW, } var weather : Weather = Weather.NONE var weather_turns : int = 0 static func weather_for_move(move_api_name : String) -> int: return int(WEATHER_MOVES.get(move_api_name, Weather.NONE)) func set_weather(new_weather : Weather, turns : int = DEFAULT_WEATHER_TURNS) -> void: weather = new_weather weather_turns = turns if new_weather != Weather.NONE else 0 ## Multiplicateur de degats selon la meteo et le type de la capacite. func damage_multiplier(move_type : String) -> float: match weather: Weather.SUN: if move_type == "fire": return 1.5 if move_type == "water": return 0.5 Weather.RAIN: if move_type == "water": return 1.5 if move_type == "fire": return 0.5 return 1.0 ## Bonus defensifs de la meteo : tempete de sable (Roche, Def. Spe. x1.5), neige (Glace, Defense x1.5). func modify_stat(mon : BattleMon, stat : PokemonNature.Stat, value : float) -> float: if weather == Weather.SANDSTORM and stat == PokemonNature.Stat.SP_DEFENSE and mon.get_types().has("rock"): return value * 1.5 if weather == Weather.SNOW and stat == PokemonNature.Stat.DEFENSE and mon.get_types().has("ice"): return value * 1.5 return value static func is_sandstorm_immune(types : Array[String]) -> bool: return types.has("rock") or types.has("ground") or types.has("steel") static func start_message(w : int) -> String: match w: Weather.SUN: return "Les rayons du soleil brillent !" Weather.RAIN: return "Il commence à pleuvoir !" Weather.SANDSTORM: return "Une tempête de sable se lève !" Weather.SNOW: return "Il commence à neiger !" return "" static func end_message(w : int) -> String: match w: Weather.SUN: return "Le soleil se couche." Weather.RAIN: return "La pluie s'arrête." Weather.SANDSTORM: return "La tempête de sable se calme." Weather.SNOW: return "La neige s'arrête." return ""