class_name PokemonNature extends RefCounted enum Stat { HP, ATTACK, DEFENSE, SP_ATTACK, SP_DEFENSE, SPEED } #meme ordre que dans les jeux officiels (25 natures) enum Nature { HARDY, LONELY, BRAVE, ADAMANT, NAUGHTY, BOLD, DOCILE, RELAXED, IMPISH, LAX, TIMID, HASTY, SERIOUS, JOLLY, NAIVE, MODEST, MILD, QUIET, BASHFUL, RASH, CALM, GENTLE, SASSY, CAREFUL, QUIRKY, } #ordre des stats dans la table des natures : index // 5 = stat augmentee, index % 5 = stat diminuee #(si les deux sont identiques, la nature est neutre) const _STAT_ORDER : Array[int] = [Stat.ATTACK, Stat.DEFENSE, Stat.SPEED, Stat.SP_ATTACK, Stat.SP_DEFENSE] static func get_multiplier(nature : Nature, stat : Stat) -> float: var up_idx : int = floori(int(nature) / 5.0) var down_idx : int = int(nature) % 5 if up_idx == down_idx: return 1.0 if stat == _STAT_ORDER[up_idx]: return 1.1 if stat == _STAT_ORDER[down_idx]: return 0.9 return 1.0 static func random_nature() -> Nature: return Nature.values().pick_random() as Nature