private static PKM ConvertPKM(PKM pk, Type PKMType, int toFormat, ref string comment) { PKM pkm = pk.Clone(); if (pkm.IsEgg) { pkm.ForceHatchPKM(); } while (true) { pkm = IntermediaryConvert(pkm, PKMType, toFormat, ref comment); if (pkm == null) // fail convert { return(null); } if (pkm.GetType() == PKMType) // finish convert { return(pkm); } } }
private static PKM ConvertPKM(PKM pk, Type PKMType, Type fromType, int toFormat, ref string comment) { PKM pkm = pk.Clone(); if (pkm.IsEgg) { pkm.ForceHatchPKM(); } switch (fromType.Name) { case nameof(PK1): if (toFormat == 7) // VC->Bank { pkm = ((PK1)pk).ConvertToPK7(); } else if (toFormat == 2) // GB<->GB { pkm = ((PK1)pk).ConvertToPK2(); } break; case nameof(PK2): if (toFormat == 7) // VC->Bank { pkm = ((PK2)pk).ConvertToPK7(); } else if (toFormat == 1) // GB<->GB { if (pk.Species > 151) { comment = $"Cannot convert a {PKX.GetSpeciesName(pkm.Species, pkm.Japanese ? 1 : 2)} to {PKMType.Name}"; return(pkm); } pkm = ((PK2)pk).ConvertToPK1(); pkm.ClearInvalidMoves(); } break; case nameof(CK3): pkm = ((CK3)pkm).ConvertToPK3(); goto case nameof(PK3); // fall through case nameof(XK3): pkm = ((XK3)pkm).ConvertToPK3(); goto case nameof(PK3); // fall through case nameof(PK3): if (toFormat == 3) { if (PKMType == typeof(CK3)) { pkm = ((PK3)pkm).ConvertToCK3(); } else if (PKMType == typeof(XK3)) { pkm = ((PK3)pkm).ConvertToXK3(); } break; } 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; } 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(pkm); } pkm = ((PK6)pkm).ConvertToPK7(); if (toFormat == 7) { break; } goto case nameof(PK7); case nameof(PK7): break; } return(pkm); }