using System; using System.Collections.Generic; using static PKHeX.Core.EReaderBerryMatch; namespace PKHeX.Core; /// /// Stores details about the Gen3 e-Reader Berry values. /// public static class EReaderBerrySettings { /// e-Reader Berry is Enigma or special berry (from e-Reader data) public static bool IsEnigma { get; set; } = true; /// e-Reader Berry Name private static string Name { get; set; } = string.Empty; /// e-Reader Berry Name formatted in Title Case public static string DisplayName => string.Format(LegalityCheckStrings.L_XEnigmaBerry_0, Util.ToTitleCase(Name.AsSpan())); private static int Language { get; set; } /// /// Checks if the most recently loaded Generation 3 Save File has a proper Enigma Berry that matches known distributions. /// public static EReaderBerryMatch GetStatus() { if (IsEnigma) // no e-Reader Berry data provided, can't hold berry. return NoData; var name = Name; if (EReaderBerriesNames_USA.Contains(name)) { return Language switch { <= 0 => ValidAny, not 1 => ValidUSA, _ => InvalidUSA, }; } if (EReaderBerriesNames_JP.Contains(name)) { return Language switch { <= 0 => ValidAny, 1 => ValidJPN, _ => InvalidJPN, }; } return NoMatch; } private static readonly HashSet EReaderBerriesNames_USA = new() { // USA Series 1 "PUMKIN", "DRASH", "EGGANT", "STRIB", "CHILAN", "NUTPEA", }; private static readonly HashSet EReaderBerriesNames_JP = new() { // JP Series 1 "カチャ", // PUMKIN "ブ-カ", // DRASH "ビスナ", // EGGANT "エドマ", // STRIB "ホズ", // CHILAN "ラッカ", // NUTPEA "クオ", // KU // JP Series 2 "ギネマ", // GINEMA "クオ", // KUO "ヤゴ", // YAGO "トウガ", // TOUGA "ニニク", // NINIKU "トポ", // TOPO }; public static void LoadFrom(SAV3 sav3) { Language = sav3.Japanese ? (int)LanguageID.Japanese : (int)LanguageID.English; if (sav3.IsEBerryEngima) { IsEnigma = true; Name = string.Empty; } else { IsEnigma = false; Name = sav3.EBerryName; } } } /// /// For use in validating the current e-Reader Berry settings. /// public enum EReaderBerryMatch : byte { /// Invalid: Doesn't match either language NoMatch, /// Invalid: No data provided from a save file NoData, /// Invalid: USA berry name on JPN save file InvalidUSA, /// Invalid: JPN berry name on USA save file InvalidJPN, /// Valid: Berry name matches either USA/JPN (Ambiguous Save File Language) ValidAny, /// Valid: Berry name matches a USA berry name ValidUSA, /// Valid: Berry name matches a JPN berry name ValidJPN, }