コード例 #1
0
        private string GetStringFirstLine(string form)
        {
            string specForm = Strings.Species[Species];

            if (!string.IsNullOrWhiteSpace(form))
            {
                specForm += $"-{form.Replace("Mega ", "Mega-")}";
            }

            string result = Nickname != null && PKX.GetSpeciesNameGeneration(Species, LanguageID, Format) != Nickname ? $"{Nickname} ({specForm})" : specForm;

            if (!string.IsNullOrEmpty(Gender))
            {
                result += $" ({Gender})";
            }
            if (HeldItem > 0)
            {
                var items = Strings.GetItemStrings(Format);
                if (HeldItem < items.Count)
                {
                    result += $" @ {items[HeldItem]}";
                }
            }
            return(result);
        }
コード例 #2
0
        public PKM ConvertToPKM(ITrainerInfo SAV, EncounterCriteria criteria)
        {
            int gen = Version.GetGeneration();

            if (gen < 2)
            {
                gen     = 2;
                Version = GameVersion.C;
            }
            var pk = PKMConverter.GetBlank(gen, Version);

            SAV.ApplyToPKM(pk);

            pk.Species      = Species;
            pk.Nickname     = PKX.GetSpeciesNameGeneration(Species, SAV.Language, gen);
            pk.CurrentLevel = Level;
            pk.Version      = (int)Version;
            pk.Ball         = 4;
            int[] moves = GetCurrentEggMoves(pk);
            pk.Moves = moves;
            pk.SetMaximumPPCurrent(moves);
            pk.OT_Friendship = pk.PersonalInfo.BaseFriendship;

            pk.SetRandomIVs(flawless: 3);

            if (pk.Format <= 2 && Version != GameVersion.C)
            {
                return(pk);
            }

            SetMetData(pk);

            if (pk.Format < 3)
            {
                return(pk);
            }

            SetNatureGenderAbility(pk, criteria);

            if (pk.GenNumber >= 4)
            {
                pk.SetEggMetData(Version, (GameVersion)SAV.Game);
            }

            if (pk.Format < 6)
            {
                return(pk);
            }
            if (pk.Gen6)
            {
                pk.SetHatchMemory6();
            }

            SetAltForm(pk, SAV);

            pk.SetRandomEC();
            pk.RelearnMoves = moves;

            return(pk);
        }
コード例 #3
0
ファイル: NicknameVerifier.cs プロジェクト: asanrom/PKHeX
        private bool VerifyUnNicknamedEncounter(LegalityAnalysis data, PKM pkm, string nickname)
        {
            if (pkm.IsNicknamed)
            {
                for (int i = 0; i < PKX.SpeciesLang.Length; i++)
                {
                    if (!PKX.SpeciesDict[i].TryGetValue(nickname, out int index))
                    {
                        continue;
                    }
                    var msg = index == pkm.Species && i != pkm.Language ? V15 : V16;
                    data.AddLine(Get(msg, Severity.Fishy));
                    return(true);
                }
                if (StringConverter.HasEastAsianScriptCharacters(nickname)) // East Asian Scripts
                {
                    data.AddLine(GetInvalid(V222));
                    return(true);
                }
                data.AddLine(GetValid(V17));
            }
            else if (pkm.Format < 3)
            {
                // pk1/pk2 IsNicknamed getter checks for match, logic should only reach here if matches.
                data.AddLine(GetValid(V18));
            }
            else
            {
                var EncounterMatch = data.EncounterMatch;
                // Can't have another language name if it hasn't evolved or wasn't a language-traded egg.
                bool evolved = EncounterMatch.Species != pkm.Species;
                bool match   = PKX.GetSpeciesNameGeneration(pkm.Species, pkm.Language, pkm.Format) == nickname;
                if (pkm.WasTradedEgg || evolved)
                {
                    match |= !PKX.IsNicknamedAnyLanguage(pkm.Species, nickname, pkm.Format);
                }
                if (!match && pkm.Format == 5 && !pkm.IsNative) // transfer
                {
                    if (evolved)
                    {
                        match |= !PKX.IsNicknamedAnyLanguage(pkm.Species, nickname, 4);
                    }
                    else
                    {
                        match |= PKX.GetSpeciesNameGeneration(pkm.Species, pkm.Language, 4) == nickname;
                    }
                }

                if (!match)
                {
                    if (EncounterMatch is WC7 wc7 && wc7.IsAshGreninjaWC7(pkm))
                    {
                        data.AddLine(GetValid(V19));
                    }
                    else
                    {
                        data.AddLine(GetInvalid(V20));
                    }
                }
コード例 #4
0
ファイル: EncounterEgg.cs プロジェクト: Zovrah/PKHeX
        public PKM ConvertToPKM(ITrainerInfo SAV, EncounterCriteria criteria)
        {
            int gen     = Version.GetGeneration();
            var version = Version;

            if (gen < 2)
            {
                gen     = 2;
                version = GameVersion.C;
            }
            var pk = PKMConverter.GetBlank(gen, version);

            SAV.ApplyToPKM(pk);

            pk.Species       = Species;
            pk.Nickname      = PKX.GetSpeciesNameGeneration(Species, SAV.Language, gen);
            pk.CurrentLevel  = Level;
            pk.Version       = (int)version;
            pk.Ball          = 4;
            pk.OT_Friendship = pk.PersonalInfo.BaseFriendship;

            int[] moves = SetEncounterMoves(pk, version);
            SetPINGA(pk, criteria);

            if (pk.Format <= 2 && version != GameVersion.C)
            {
                return(pk);
            }

            SetMetData(pk);

            if (pk.Format < 3)
            {
                return(pk);
            }


            if (pk.GenNumber >= 4)
            {
                pk.SetEggMetData(version, (GameVersion)SAV.Game);
            }

            if (pk.Format < 6)
            {
                return(pk);
            }
            if (pk.Format == 6)
            {
                pk.SetHatchMemory6();
            }

            SetAltForm(pk, SAV);

            pk.SetRandomEC();
            pk.RelearnMoves = moves;

            return(pk);
        }
コード例 #5
0
 /// <summary>
 /// Clears the <see cref="PKM.Nickname"/> to the default value.
 /// </summary>
 /// <param name="pk"></param>
 public static void ClearNickname(this PKM pk)
 {
     pk.IsNicknamed = false;
     pk.Nickname    = PKX.GetSpeciesNameGeneration(pk.Species, pk.Language, pk.Format);
     if (pk is _K12 pk12)
     {
         pk12.SetNotNicknamed();
     }
 }
コード例 #6
0
        /// <summary>
        /// Force hatches a PKM by applying the current species name and a valid Met Location from the origin game.
        /// </summary>
        /// <param name="pkm">PKM to apply hatch details to</param>
        /// <remarks>
        /// <see cref="PKM.IsEgg"/> is not checked; can be abused to re-hatch already hatched <see cref="PKM"/> inputs.
        /// <see cref="PKM.MetDate"/> is not modified; must be updated manually if desired.
        /// </remarks>
        private static void ForceHatchPKM(PKM pkm)
        {
            pkm.IsEgg    = false;
            pkm.Nickname = PKX.GetSpeciesNameGeneration(pkm.Species, pkm.Language, pkm.Format);
            var loc = EncounterSuggestion.GetSuggestedEggMetLocation(pkm);

            if (loc >= 0)
            {
                pkm.Met_Location = loc;
            }
        }
コード例 #7
0
        /// <summary>
        /// Clears the <see cref="PKM.Nickname"/> to the default value.
        /// </summary>
        /// <param name="pk"></param>
        public static string ClearNickname(this PKM pk)
        {
            pk.IsNicknamed = false;
            string nick = PKX.GetSpeciesNameGeneration(pk.Species, pk.Language, pk.Format);

            pk.Nickname = nick;
            if (pk is _K12 pk12)
            {
                pk12.SetNotNicknamed();
            }
            return(nick);
        }
コード例 #8
0
        private string GetSpeciesNickname(string specForm)
        {
            if (Nickname == null)
            {
                return(specForm);
            }
            var name = PKX.GetSpeciesNameGeneration(Species, LanguageID, Format);

            if (name == Nickname)
            {
                return(specForm);
            }
            return($"{Nickname} ({specForm})");
        }
コード例 #9
0
ファイル: BatchEditing.cs プロジェクト: shimakiui/PKHeX
        /// <summary>
        /// Sets the <see cref="PKM"/> property to a non-specific smart value.
        /// </summary>
        /// <param name="pkm">Pokémon to modify.</param>
        /// <param name="cmd">Modification</param>
        private static bool SetComplexProperty(PKM pkm, StringInstruction cmd)
        {
            if (cmd.PropertyName == nameof(pkm.MetDate))
            {
                pkm.MetDate = DateTime.ParseExact(cmd.PropertyValue, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None);
            }
            else if (cmd.PropertyName == nameof(pkm.EggMetDate))
            {
                pkm.EggMetDate = DateTime.ParseExact(cmd.PropertyValue, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None);
            }
            else if (cmd.PropertyName == nameof(pkm.EncryptionConstant) && cmd.PropertyValue == CONST_RAND)
            {
                pkm.EncryptionConstant = Util.Rand32();
            }
            else if ((cmd.PropertyName == nameof(pkm.Ability) || cmd.PropertyName == nameof(pkm.AbilityNumber)) && cmd.PropertyValue.StartsWith("$"))
            {
                pkm.RefreshAbility(Convert.ToInt16(cmd.PropertyValue[1]) - 0x30);
            }
            else if (cmd.PropertyName == nameof(pkm.PID) && cmd.PropertyValue == CONST_RAND)
            {
                pkm.SetPIDGender(pkm.Gender);
            }
            else if (cmd.PropertyName == nameof(pkm.EncryptionConstant) && cmd.PropertyValue == nameof(pkm.PID))
            {
                pkm.EncryptionConstant = pkm.PID;
            }
            else if (cmd.PropertyName == nameof(pkm.PID) && cmd.PropertyValue == CONST_SHINY)
            {
                pkm.SetShinyPID();
            }
            else if (cmd.PropertyName == nameof(pkm.Species) && cmd.PropertyValue == "0")
            {
                pkm.Data = new byte[pkm.Data.Length];
            }
            else if (cmd.PropertyName.StartsWith("IV") && cmd.PropertyValue == CONST_RAND)
            {
                SetRandomIVs(pkm, cmd);
            }
            else if (cmd.PropertyName == nameof(pkm.IsNicknamed) && string.Equals(cmd.PropertyValue, "false", StringComparison.OrdinalIgnoreCase))
            {
                pkm.IsNicknamed = false; pkm.Nickname = PKX.GetSpeciesNameGeneration(pkm.Species, pkm.Language, pkm.Format);
            }
            else
            {
                return(false);
            }

            return(true);
        }
コード例 #10
0
 /// <summary>
 /// Sets the <see cref="PKM.Nickname"/> to the provided value.
 /// </summary>
 /// <param name="pk">Pokémon to modify.</param>
 /// <param name="nick"><see cref="PKM.Nickname"/> to set. If no nickname is provided, the <see cref="PKM.Nickname"/> is set to the default value for its current language and format.</param>
 public static void SetNickname(this PKM pk, string nick = null)
 {
     if (nick != null)
     {
         pk.IsNicknamed = true;
         pk.Nickname    = nick;
     }
     else
     {
         pk.IsNicknamed = false;
         pk.Nickname    = PKX.GetSpeciesNameGeneration(pk.Species, pk.Language, pk.Format);
         if (pk is _K12 pk12)
         {
             pk12.SetNotNicknamed();
         }
     }
 }
コード例 #11
0
ファイル: NicknameVerifier.cs プロジェクト: zaksabeast/PKHeX
        private void VerifyNicknameEgg(LegalityAnalysis data)
        {
            var Info           = data.Info;
            var pkm            = data.pkm;
            var EncounterMatch = Info.EncounterMatch;

            switch (pkm.Format)
            {
            case 4:
                if (pkm.IsNicknamed)     // gen4 doesn't use the nickname flag for eggs
                {
                    data.AddLine(GetInvalid(LNickFlagEggNo, CheckIdentifier.Egg));
                }
                break;

            case 7:
                if (EncounterMatch is EncounterStatic ^ !pkm.IsNicknamed)     // gen7 doesn't use for ingame gifts
                {
                    data.AddLine(GetInvalid(pkm.IsNicknamed ? LNickFlagEggNo : LNickFlagEggYes, CheckIdentifier.Egg));
                }
                break;

            default:
                if (!pkm.IsNicknamed)
                {
                    data.AddLine(GetInvalid(LNickFlagEggYes, CheckIdentifier.Egg));
                }
                break;
            }

            if (pkm.Format == 2 && pkm.IsEgg && !PKX.IsNicknamedAnyLanguage(0, pkm.Nickname, 2))
            {
                data.AddLine(GetValid(LNickMatchLanguageEgg, CheckIdentifier.Egg));
            }
            else if (PKX.GetSpeciesNameGeneration(0, pkm.Language, Info.Generation) != pkm.Nickname)
            {
                data.AddLine(GetInvalid(LNickMatchLanguageEggFail, CheckIdentifier.Egg));
            }
            else
            {
                data.AddLine(GetValid(LNickMatchLanguageEgg, CheckIdentifier.Egg));
            }
        }
コード例 #12
0
        private string GetStringFirstLine(string form)
        {
            string specForm = species[Species];

            if (!string.IsNullOrWhiteSpace(form))
            {
                specForm += $"-{form.Replace("Mega ", "Mega-")}";
            }

            string result = Nickname != null && PKX.GetSpeciesNameGeneration(Species, LanguageID, Format) != Nickname ? $"{Nickname} ({specForm})" : specForm;

            if (!string.IsNullOrEmpty(Gender))
            {
                result += $" ({Gender})";
            }
            if (HeldItem > 0)
            {
                switch (Format)
                {
                case 2: if (HeldItem < g2items.Length)
                    {
                        result += $" @ {g2items[HeldItem]}";
                    }
                    break;

                case 3: if (HeldItem < g3items.Length)
                    {
                        result += $" @ {g3items[HeldItem]}";
                    }
                    break;

                default: if (HeldItem < items.Length)
                    {
                        result += $" @ {items[HeldItem]}";
                    }
                    break;
                }
            }
            return(result);
        }
コード例 #13
0
ファイル: NicknameVerifier.cs プロジェクト: rboninsegna/PKHeX
        private bool IsNicknameValid(PKM pkm, IEncounterable EncounterMatch, string nickname)
        {
            if (PKX.GetSpeciesNameGeneration(pkm.Species, pkm.Language, pkm.Format) == nickname)
            {
                return(true);
            }

            // Can't have another language name if it hasn't evolved or wasn't a language-traded egg.
            bool evolved            = EncounterMatch.Species != pkm.Species;
            bool canHaveAnyLanguage = evolved || pkm.WasTradedEgg;

            if (canHaveAnyLanguage && !PKX.IsNicknamedAnyLanguage(pkm.Species, nickname, pkm.Format))
            {
                return(true);
            }

            switch (EncounterMatch)
            {
            case WC7 wc7 when wc7.IsAshGreninjaWC7(pkm):
                return(true);

            case ILangNick loc:
                if (loc.Language != 0 && !loc.IsNicknamed && !PKX.IsNicknamedAnyLanguage(pkm.Species, nickname, pkm.Format))
                {
                    return(true);    // fixed language without nickname, nice job event maker!
                }
                break;
            }

            if (pkm.Format == 5 && !pkm.IsNative) // transfer
            {
                if (canHaveAnyLanguage)
                {
                    return(!PKX.IsNicknamedAnyLanguage(pkm.Species, nickname, 4));
                }
                return(PKX.GetSpeciesNameGeneration(pkm.Species, pkm.Language, 4) == nickname);
            }

            return(false);
        }
コード例 #14
0
        public PKM ConvertToPKM(ITrainerInfo SAV)
        {
            int gen = Math.Max(2, Version.GetGeneration());
            var pk  = PKMConverter.GetBlank(gen);

            SAV.ApplyToPKM(pk);

            pk.Species      = Species;
            pk.Nickname     = PKX.GetSpeciesNameGeneration(Species, SAV.Language, gen);
            pk.CurrentLevel = Level;
            pk.Version      = (int)Version;

            var moves = Legal.GetEggMoves(pk, Species, pk.AltForm, Version);

            if (moves.Length == 0)
            {
                moves = Legal.GetEncounterMoves(pk, Level, Version);
            }
            pk.Moves = moves;
            pk.SetMaximumPPCurrent(moves);
            pk.OT_Friendship = pk.PersonalInfo.BaseFriendship;

            pk.SetRandomIVs(flawless: 3);

            if (pk.Format <= 2 && Version != GameVersion.C)
            {
                return(pk);
            }

            pk.Met_Level    = EncounterSuggestion.GetSuggestedEncounterEggMetLevel(pk);
            pk.Met_Location = Math.Max(0, EncounterSuggestion.GetSuggestedEggMetLocation(pk));

            if (pk.Format < 3)
            {
                return(pk);
            }

            pk.Ball = 4;

            int gender = Util.Rand.Next(2);
            int nature = Util.Rand.Next(25);

            gender = pk.GetSaneGender(gender);
            if (pk.Format <= 5)
            {
                pk.SetPIDGender(gender);
                pk.SetPIDNature(nature);
                pk.RefreshAbility(pk.PIDAbility);
            }
            else
            {
                pk.PID    = Util.Rand32();
                pk.Nature = nature;
                pk.Gender = gender;
                pk.RefreshAbility(Util.Rand.Next(2));
            }

            bool traded = (int)Version == SAV.Game;
            var  today  = pk.MetDate = DateTime.Today;

            if (pk.GenNumber >= 4)
            {
                pk.Egg_Location = EncounterSuggestion.GetSuggestedEncounterEggLocationEgg(pk, traded);
                pk.EggMetDate   = today;
            }

            if (pk.Format < 6)
            {
                return(pk);
            }
            if (pk.Gen6)
            {
                pk.SetHatchMemory6();
            }

            pk.SetRandomEC();
            pk.RelearnMoves = moves;

            return(pk);
        }
コード例 #15
0
ファイル: EncounterEgg.cs プロジェクト: antwa/PKHeX
        public PKM ConvertToPKM(ITrainerInfo SAV)
        {
            int gen = Version.GetGeneration();

            if (gen < 2)
            {
                gen     = 2;
                Version = GameVersion.C;
            }
            var pk = PKMConverter.GetBlank(gen);

            SAV.ApplyToPKM(pk);

            pk.Species      = Species;
            pk.Nickname     = PKX.GetSpeciesNameGeneration(Species, SAV.Language, gen);
            pk.CurrentLevel = Level;
            pk.Version      = (int)Version;
            int[] moves = GetCurrentEggMoves(pk);
            pk.Moves = moves;
            pk.SetMaximumPPCurrent(moves);
            pk.OT_Friendship = pk.PersonalInfo.BaseFriendship;

            pk.SetRandomIVs(flawless: 3);

            if (pk.Format <= 2 && Version != GameVersion.C)
            {
                return(pk);
            }

            pk.Met_Level    = EncounterSuggestion.GetSuggestedEncounterEggMetLevel(pk);
            pk.Met_Location = Math.Max(0, EncounterSuggestion.GetSuggestedEggMetLocation(pk));

            if (pk.Format < 3)
            {
                return(pk);
            }

            pk.Ball = 4;

            int gender = pk.PersonalInfo.RandomGender;
            int nature = Util.Rand.Next(25);

            if (pk.Format <= 5)
            {
                pk.SetPIDGender(gender);
                pk.Gender = gender;
                pk.SetPIDNature(nature);
                pk.Nature = nature;
                pk.RefreshAbility(pk.PIDAbility);
            }
            else
            {
                pk.PID    = Util.Rand32();
                pk.Nature = nature;
                pk.Gender = gender;
                pk.RefreshAbility(Util.Rand.Next(2));
            }

            bool traded = (int)Version == SAV.Game;
            var  today  = pk.MetDate = DateTime.Today;

            if (pk.GenNumber >= 4)
            {
                pk.Egg_Location = EncounterSuggestion.GetSuggestedEncounterEggLocationEgg(pk, traded);
                pk.EggMetDate   = today;
            }

            if (pk.Format < 6)
            {
                return(pk);
            }
            if (pk.Gen6)
            {
                pk.SetHatchMemory6();
            }

            switch (Species)
            {
            case 774:     // Minior
                pk.AltForm = Util.Rand.Next(7, 14);
                break;

            case 664:     // Scatterbug
                pk.AltForm = Legal.GetVivillonPattern(SAV.Country, SAV.SubRegion);
                break;
            }

            pk.SetRandomEC();
            pk.RelearnMoves = moves;

            return(pk);
        }
コード例 #16
0
ファイル: PKMConverter.cs プロジェクト: sonnynomnom/PKHeX
        public static PKM ConvertToType(PKM pk, Type PKMType, out string comment)
        {
            if (pk == null || pk.Species == 0)
            {
                comment = "Null input. Aborting.";
                return(null);
            }

            Type fromType   = pk.GetType();
            int  fromFormat = int.Parse(fromType.Name.Last().ToString());
            int  toFormat   = int.Parse(PKMType.Name.Last().ToString());

            Debug.WriteLine($"Trying to convert {fromType.Name} to {PKMType.Name}.");

            PKM pkm = null;

            if (fromType == PKMType)
            {
                comment = "No need to convert, current format matches requested format.";
                return(pk);
            }
            if (fromFormat <= toFormat || fromFormat == 2)
            {
                pkm = pk.Clone();
                if (pkm.IsEgg) // force hatch
                {
                    pkm.IsEgg = false;
                    if (pkm.AO)
                    {
                        pkm.Met_Location = 318; // Battle Resort
                    }
                    else if (pkm.XY)
                    {
                        pkm.Met_Location = 38; // Route 7
                    }
                    else if (pkm.Gen5)
                    {
                        pkm.Met_Location = 16; // Route 16
                    }
                    else
                    {
                        pkm.Met_Location = 30001; // Pokétransfer
                    }
                    pkm.IsNicknamed = false;
                    pkm.Nickname    = PKX.GetSpeciesNameGeneration(pkm.Species, pkm.Language, fromFormat);
                }
                switch (fromType.Name)
                {
                case nameof(PK1):
                    if (toFormat == 2)
                    {
                        pkm = PKMType == typeof(PK2) ? ((PK1)pk).ConvertToPK2() : null;
                        break;
                    }
                    if (toFormat == 7)
                    {
                        pkm = ((PK1)pk).ConvertToPK7();
                    }
                    break;

                case nameof(PK2):
                    if (PKMType == typeof(PK1))
                    {
                        if (pk.Species > 151)
                        {
                            comment = $"Cannot convert a {PKX.GetSpeciesName(pkm.Species, ((PK2)pkm).Japanese ? 1 : 2)} to {PKMType.Name}";
                            return(null);
                        }
                        pkm = ((PK2)pk).ConvertToPK1();
                        pkm.ClearInvalidMoves();
                    }
                    else
                    {
                        pkm = null;
                    }
                    break;

                case nameof(CK3):
                case nameof(XK3):
                    // interconverting C/XD needs to visit main series format
                    // ends up stripping purification/shadow etc stats
                    pkm = pkm.ConvertToPK3();
                    goto case nameof(PK3);     // fall through

                case nameof(PK3):
                    if (toFormat == 3)     // Gen3 Inter-trading
                    {
                        switch (PKMType.Name)
                        {
                        case nameof(CK3): pkm = pkm.ConvertToCK3(); break;

                        case nameof(XK3): pkm = pkm.ConvertToXK3(); break;

                        case nameof(PK3): pkm = pkm.ConvertToPK3(); break;         // already converted, instantly returns

                        default: throw new FormatException();
                        }
                        break;
                    }
                    if (fromType.Name != nameof(PK3))
                    {
                        pkm = pkm.ConvertToPK3();
                    }

                    pkm = ((PK3)pkm).ConvertToPK4();
                    if (toFormat == 4)
                    {
                        break;
                    }
                    goto case nameof(PK4);

                case nameof(BK4):
                    pkm = ((BK4)pkm).ConvertToPK4();
                    if (toFormat == 4)
                    {
                        break;
                    }
                    goto case nameof(PK4);

                case nameof(PK4):
                    if (PKMType == typeof(BK4))
                    {
                        pkm = ((PK4)pkm).ConvertToBK4();
                        break;
                    }
                    if (pkm.Species == 172 && pkm.AltForm != 0)
                    {
                        comment = "Cannot transfer Spiky-Eared Pichu forward.";
                        return(null);
                    }
                    pkm = ((PK4)pkm).ConvertToPK5();
                    if (toFormat == 5)
                    {
                        break;
                    }
                    goto case nameof(PK5);

                case nameof(PK5):
                    pkm = ((PK5)pkm).ConvertToPK6();
                    if (toFormat == 6)
                    {
                        break;
                    }
                    goto case nameof(PK6);

                case nameof(PK6):
                    if (pkm.Species == 25 && pkm.AltForm != 0)     // cosplay pikachu
                    {
                        comment = "Cannot transfer Cosplay Pikachu forward.";
                        return(null);
                    }
                    pkm = ((PK6)pkm).ConvertToPK7();
                    if (toFormat == 7)
                    {
                        break;
                    }
                    goto case nameof(PK7);

                case nameof(PK7):
                    break;
                }
            }

            comment = pkm == null
                ? $"Cannot convert a {fromType.Name} to a {PKMType.Name}."
                : $"Converted from {fromType.Name} to {PKMType.Name}.";

            return(pkm);
        }