/// <summary> /// Sets a random memory specific to <see cref="GameVersion.Gen6"/> locality. /// </summary> /// <param name="pk">Pokémon to modify.</param> public static void SetRandomMemory6(this PKM pk) { // for lack of better randomization :) pk.OT_Memory = 63; pk.OT_Intensity = 6; pk.OT_Feeling = Memories.GetRandomFeeling(pk.OT_Memory); }
/// <summary> /// Sets a Link Trade memory to the <see cref="ht"/>. /// </summary> public static void SetTradeMemoryHT(this IMemoryHT ht, bool bank) { ht.HT_Memory = 4; // Link trade to [VAR: General Location] ht.HT_TextVar = bank ? 0 : 9; // Somewhere (Bank) : Pokécenter (Trade) ht.HT_Intensity = 1; ht.HT_Feeling = Memories.GetRandomFeeling(4, bank ? 10 : 20); // 0-9 Bank, 0-19 Trade }
/// <summary> /// Sets the Memory details to a Hatched Egg's memories. /// </summary> /// <param name="pk">Pokémon to modify.</param> public static void SetHatchMemory6(this PKM pk) { pk.OT_Memory = 2; pk.OT_Affection = 0; pk.OT_Feeling = Memories.GetRandomFeeling(pk.OT_Memory); pk.OT_Intensity = 1; pk.OT_TextVar = pk.XY ? 43 : 27; // riverside road : battling spot }
/// <summary> /// Sets the Memory details to a Hatched Egg's memories. /// </summary> /// <param name="pk">Pokémon to modify.</param> public static void SetHatchMemory6(this PKM pk) { if (pk is IMemoryOT o) { o.OT_Memory = 2; o.OT_Feeling = Memories.GetRandomFeeling(2); o.OT_Intensity = 1; o.OT_TextVar = pk.XY ? 43 : 27; // riverside road : battling spot } if (pk is IAffection a) { a.OT_Affection = 0; } }
private static bool CommonErrorHandling2(PKM pk) { var report = GetReport(pk); // f*****g M2 if (GameVersion.FRLG.Contains(pk.Version) && UsesEventBasedMethod(pk.Species, pk.Moves, PIDType.Method_2)) { pk = M2EventFix(pk, pk.IsShiny); report = GetReport(pk); } if (UsesEventBasedMethod(pk.Species, pk.Moves, PIDType.BACD_R) && pk.Version == (int)GameVersion.R) { pk = BACD_REventFix(pk, pk.IsShiny); report = GetReport(pk); } if (report.Contains(LNickMatchLanguageFail)) { pk.Nickname = PKX.GetSpeciesNameGeneration(pk.Species, pk.Language, pk.Format); // failsafe to reset nick report = GetReport(pk); } if (report.Contains(LStatIncorrectCP)) { ((PB7)pk).ResetCP(); report = GetReport(pk); } if (report.Contains(LAbilityMismatch)) //V223 = Ability mismatch for encounter. { pk.RefreshAbility(pk.AbilityNumber < 6 ? pk.AbilityNumber >> 1 : 0); report = GetReport(pk); if (report.Contains(LAbilityMismatch)) //V223 = Ability mismatch for encounter. { AlternateAbilityRefresh(pk); } report = GetReport(pk); } if (report.Contains(LTransferEggLocationTransporter)) //V61 = Invalid Met Location, expected Transporter. { pk.Met_Location = 30001; report = GetReport(pk); } if (report.Contains(LBallEncMismatch)) //V118 = Can't have ball for encounter type. { if (pk.B2W2) { pk.Ball = 25; //Dream Ball report = GetReport(pk); } else { pk.Ball = 0; report = GetReport(pk); } } if (report.Contains(LEncUnreleasedEMewJP)) //V353 = Non japanese Mew from Faraway Island. Unreleased event. { bool shiny = pk.IsShiny; pk.Language = 1; pk.FatefulEncounter = true; pk.Nickname = PKX.GetSpeciesNameGeneration(pk.Species, pk.Language, 3); pk.PID = PKX.GetRandomPID(pk.Species, pk.Gender, pk.Version, pk.Nature, pk.Format, (uint)(pk.AbilityNumber * 0x10001)); if (shiny) { pk.SetShinySID(); } report = GetReport(pk); } if (report.Contains(LPIDEqualsEC)) //V208 = Encryption Constant matches PID. { pk.SetRandomEC(); report = GetReport(pk); } if (report.Contains(LTransferPIDECEquals)) //V216 = PID should be equal to EC! { pk.EncryptionConstant = pk.PID; report = GetReport(pk); } if (report.Contains(LTransferPIDECBitFlip)) //V215 = PID should be equal to EC [with top bit flipped]! { pk.PID = PKX.GetRandomPID(pk.Species, pk.Gender, pk.Version, pk.Nature, pk.Format, (uint)(pk.AbilityNumber * 0x10001)); if (pk.IsShiny) { pk.SetShiny(); } report = GetReport(pk); } if (report.Contains(LPIDGenderMismatch)) //V251 = PID-Gender mismatch. { pk.Gender = pk.Gender == 0 ? 1 : 0; report = GetReport(pk); } if (report.Contains(LG3OTGender) || report.Contains(LG1OTGender)) //V407 = OT from Colosseum/XD cannot be female. V408 = Female OT from Generation 1 / 2 is invalid. { pk.OT_Gender = 0; report = GetReport(pk); } if (report.Contains(LLevelMetBelow)) //V85 = Current level is below met level. { pk.CurrentLevel = 100; report = GetReport(pk); } if (report.Contains(string.Format(LRibbonFMissing_0, "National"))) //V600 = Missing Ribbons: {0} (National in this case) { if (pk is IRibbonSetEvent3 e3) { e3.RibbonNational = true; } report = GetReport(pk); } if (report.Contains(string.Format(LRibbonFInvalid_0, "National"))) //V601 = Invalid Ribbons: {0} (National in this case) { if (pk is IRibbonSetEvent3 e3) { e3.RibbonNational = false; } report = GetReport(pk); } if (report.Contains(LOTLong)) //V38 = OT Name too long. { pk.OT_Name = "ARCH"; report = GetReport(pk); } if (report.Contains(LG1CharOT)) //V421 = OT from Generation 1/2 uses unavailable characters. { pk.OT_Name = "ARCH"; report = GetReport(pk); } if (report.Contains(LGeoNoCountryHT)) { var g = (IGeoTrack)pk; g.Geo1_Country = 1; report = GetReport(pk); } if (report.Contains(LMemoryMissingHT)) //V150 = Memory: Handling Trainer Memory missing. { pk.HT_Memory = 3; pk.HT_TextVar = 9; pk.HT_Intensity = 1; pk.HT_Feeling = Util.Rand.Next(0, 10); // 0-9 pk.HT_Friendship = pk.OT_Friendship; report = GetReport(pk); } if (report.Contains(LMemoryMissingOT)) //V152 = Memory: Original Trainer Memory missing. { pk.OT_Memory = 3; pk.OT_TextVar = 9; pk.OT_Intensity = 1; pk.OT_Feeling = Util.Rand.Next(0, 10); // 0-9 report = GetReport(pk); } if (report.Contains(string.Format(LMemoryFeelInvalid, "OT")) || report.Contains(string.Format(LMemoryFeelInvalid, "HT"))) //V255 = {0} Memory: Invalid Feeling (0 = OT/HT) { pk.HT_Memory = 3; pk.HT_TextVar = 9; pk.HT_Intensity = 1; pk.HT_Feeling = Memories.GetRandomFeeling(pk.HT_Memory); pk.HT_Friendship = pk.OT_Friendship; pk.OT_Memory = 3; pk.OT_TextVar = 9; pk.OT_Intensity = 1; pk.OT_Feeling = Memories.GetRandomFeeling(pk.OT_Memory); report = GetReport(pk); } if (report.Contains(LMemoryIndexIDOT0)) //V130 = Can't have any OT Memory. { pk.ClearOTMemory(); report = GetReport(pk); } if (report.Contains(LGeoMemoryMissing)) //V137 = GeoLocation Memory: Memories should be present. { var g = (IGeoTrack)pk; g.Geo1_Country = 1; report = GetReport(pk); } if (report.Contains(LBallEncMismatch)) //V118 = Can't have ball for encounter type. { pk.Ball = 4; report = GetReport(pk); } if (report.Contains(LGeoHardwareInvalid)) //Geolocation: Country is not in 3DS region. { pk.Country = 0; pk.Region = 0; pk.ConsoleRegion = 2; report = GetReport(pk); } if (report.Contains(LFormBattle)) //V310 = Form cannot exist outside of a battle. { if (pk.Species == 718 && pk.Ability == 211) { pk.AltForm = 3; // Zygarde Edge case } else { pk.AltForm = 0; } report = GetReport(pk); } if (report.Contains(LFatefulMissing)) //V324 = Special ingame Fateful Encounter flag missing. { pk.FatefulEncounter = true; report = GetReport(pk); } if (report.Contains(LFatefulInvalid)) //V325 = Fateful Encounter should not be checked. { pk.FatefulEncounter = false; report = GetReport(pk); } if (report.Contains(LEncTypeMismatch)) //V381 = Encounter Type does not match encounter. { var match = new LegalityAnalysis(pk).Info.EncounterMatch; var type = GetRequiredEncounterType(pk, match); if (!type.Contains(pk.EncounterType)) { pk.EncounterType = Convert.ToInt32(Math.Log((int)type, 2)); } else { Debug.WriteLine("This should never happen"); } report = GetReport(pk); } if (report.Contains(LEvoInvalid)) //V86 = Evolution not valid (or level/trade evolution unsatisfied). { pk.Met_Level--; report = GetReport(pk); } if (report.Contains(LPIDTypeMismatch)) //V411 = Encounter Type PID mismatch. { SetPIDSID(pk, pk.IsShiny, pk.Version == (int)GameVersion.CXD); if (new LegalityAnalysis(pk).Valid) { return(false); } report = GetReport(pk); if (report.Equals(LPIDTypeMismatch)) // V411 = Encounter Type PID mismatch. { return(true); } if (report.Contains(LPIDGenderMismatch)) // V251 = PID-Gender mismatch. { pk.Gender = pk.Gender == 0 ? 1 : 0; report = GetReport(pk); if (new LegalityAnalysis(pk).Valid) { return(false); } } } if (report.Contains(LHyperPerfectAll)) // V41 = Can't Hyper Train a Pokémon with perfect IVs. { ((IHyperTrain)pk).HyperTrainClear(); report = GetReport(pk); } if (report.Contains(LHyperPerfectOne)) // V42 = Can't Hyper Train a perfect IV. { pk.ClearHyperTrainedPerfectIVs(); } return(false); }