using PkmnLib.Static.Utils; namespace PkmnLib.Static.Species; /// /// Data about how and into which Pokémon a species can evolve. /// public interface IEvolution { /// /// The species that the Pokémon evolves into. /// StringKey ToSpecies { get; } } /// /// Evolves when a certain level is reached. /// public record LevelEvolution : IEvolution { /// /// The level at which the Pokémon evolves. /// public required LevelInt Level { get; init; } /// public required StringKey ToSpecies { get; init; } } /// /// Evolves when a certain level is reached, and the Pokémon is a specific gender /// public record LevelGenderEvolution : IEvolution { /// /// The level at which the Pokémon evolves. /// public required LevelInt Level { get; init; } /// /// The gender the Pokémon needs to have to evolve /// public required Gender Gender { get; init; } /// public required StringKey ToSpecies { get; init; } } /// /// Evolves when an item is used on the Pokémon. /// public record ItemUseEvolution : IEvolution { /// /// The item that needs to be used. /// public required StringKey Item { get; init; } /// public required StringKey ToSpecies { get; init; } } /// /// Evolves when an item is used on the Pokémon, and the Pokémon is a specific gender /// public record ItemGenderEvolution : IEvolution { /// /// The item that needs to be used. /// public required StringKey Item { get; init; } /// /// The gender the Pokémon needs to have to evolve /// public Gender Gender { get; init; } /// public required StringKey ToSpecies { get; init; } } /// /// Evolves when an item is held by the Pokémon, and the Pokémon levels up. /// public record HoldItemEvolution : IEvolution { /// /// The item that needs to be held. /// public required StringKey Item { get; init; } /// public required StringKey ToSpecies { get; init; } } /// /// Evolves when an item is held by the Pokémon, and the Pokémon levels up, and it's day. /// public record DayHoldItemEvolution : IEvolution { /// /// The item that needs to be held. /// public required StringKey Item { get; init; } /// public required StringKey ToSpecies { get; init; } } /// /// Evolves when an item is held by the Pokémon, and the Pokémon levels up, and it's night. /// public record NightHoldItemEvolution : IEvolution { /// /// The item that needs to be held. /// public required StringKey Item { get; init; } /// public required StringKey ToSpecies { get; init; } } /// /// Evolves when the Pokémon knows a certain move, and the Pokémon levels up. /// public record HasMoveEvolution : IEvolution { /// /// The name of the move that needs to be known. /// public required StringKey MoveName { get; init; } /// public required StringKey ToSpecies { get; init; } } /// /// Evolves when above a certain happiness level, and the Pokémon levels up. /// public record HappinessEvolution : IEvolution { /// /// The happiness level that needs to be reached. /// public required byte Happiness { get; init; } /// public required StringKey ToSpecies { get; init; } } /// /// Evolves when above a certain happiness level, and the Pokémon levels up, and it's day. /// public record HappinessDayEvolution : IEvolution { /// /// The happiness level that needs to be reached. /// public required byte Happiness { get; init; } /// public required StringKey ToSpecies { get; init; } } /// /// Evolves when above a certain happiness level, and the Pokémon levels up, and it's night. /// public record HappinessNightEvolution : IEvolution { /// /// The happiness level that needs to be reached. /// public required byte Happiness { get; init; } /// public required StringKey ToSpecies { get; init; } } /// /// Evolves when traded. /// public record TradeEvolution : IEvolution { /// public required StringKey ToSpecies { get; init; } } /// /// Evolves when traded with a certain species. /// public record TradeSpeciesEvolution : IEvolution { /// /// The species that needs to be traded with. /// public required StringKey WithSpecies { get; init; } /// public required StringKey ToSpecies { get; init; } } /// /// Evolves when traded while it's holding a certain item. /// public record TradeItemEvolution : IEvolution { /// /// The item that needs to be held. /// public required StringKey Item { get; init; } /// public required StringKey ToSpecies { get; init; } } /// /// Custom evolution method, implemented by the user. /// public record CustomEvolution : IEvolution { /// /// The name of the custom evolution method. This should refer to the name of the script that will be executed. /// public required StringKey Name { get; init; } /// /// The parameters of the custom evolution method. /// public required IReadOnlyDictionary Parameters { get; init; } /// public required StringKey ToSpecies { get; init; } }