From 47dcb56090f368608a023901e16600a112e5b845 Mon Sep 17 00:00:00 2001 From: Kurt Date: Thu, 10 Aug 2017 20:51:21 -0700 Subject: [PATCH] Misc fixes static-wild encounter g4 collision (abra gift), closes #1390 off by one pokepuff strings unshuffle bk4 ribbons pgt bad sanity events now auto-sanitized --- PKHeX.Core/Game/GameInfo.cs | 4 +++- .../Legality/Encounters/EncounterGenerator.cs | 12 +++++++++++- PKHeX.Core/MysteryGifts/PGT.cs | 2 +- PKHeX.Core/PKM/BK4.cs | 16 ++++++++-------- .../Subforms/Save Editors/Gen6/SAV_Pokepuff.cs | 4 +--- 5 files changed, 24 insertions(+), 14 deletions(-) diff --git a/PKHeX.Core/Game/GameInfo.cs b/PKHeX.Core/Game/GameInfo.cs index 80ce85364..289b6e3ff 100644 --- a/PKHeX.Core/Game/GameInfo.cs +++ b/PKHeX.Core/Game/GameInfo.cs @@ -120,6 +120,8 @@ public GameStrings(string l) trainingbags = Get("trainingbag"); trainingstage = Get("supertraining"); puffs = Get("puff"); + Array.Resize(ref puffs, puffs.Length + 1); + Array.Copy(puffs, 0, puffs, 1, puffs.Length - 1); eggname = specieslist[0]; mail4 = Get("mail4"); @@ -236,7 +238,7 @@ private void Sanitize() // Set the first entry of a met location to "" (nothing) // Fix (None) tags var none = $"({itemlist[0]})"; - abilitylist[0] = itemlist[0] = movelist[0] = metXY_00000[0] = metBW2_00000[0] = metHGSS_00000[0] = metCXD_00000[0] = none; + abilitylist[0] = itemlist[0] = movelist[0] = metXY_00000[0] = metBW2_00000[0] = metHGSS_00000[0] = metCXD_00000[0] = puffs[0] = none; } private string[] Get(string ident) { diff --git a/PKHeX.Core/Legality/Encounters/EncounterGenerator.cs b/PKHeX.Core/Legality/Encounters/EncounterGenerator.cs index 79e2602b3..14ec455a3 100644 --- a/PKHeX.Core/Legality/Encounters/EncounterGenerator.cs +++ b/PKHeX.Core/Legality/Encounters/EncounterGenerator.cs @@ -243,10 +243,18 @@ private static IEnumerable GenerateRawEncounters4(PKM pkm) { yield return z; ++ctr; } } + var deferred = new List(); bool safariSport = pkm.Ball == 0x05 || pkm.Ball == 0x18; // never static encounters if (!safariSport) foreach (var z in GetValidStaticEncounter(pkm)) - { yield return z; ++ctr; } + { + if (z.Gift && pkm.Ball != 4) + deferred.Add(z); + else + { + yield return z; ++ctr; + } + } // if (ctr != 0) yield break; foreach (var z in GetValidWildEncounters(pkm)) { yield return z; ++ctr; } @@ -259,6 +267,8 @@ private static IEnumerable GenerateRawEncounters4(PKM pkm) if (safariSport) foreach (var z in GetValidStaticEncounter(pkm)) yield return z; + foreach (var z in deferred) + yield return z; } private static IEnumerable GenerateRawEncounters3(PKM pkm) { diff --git a/PKHeX.Core/MysteryGifts/PGT.cs b/PKHeX.Core/MysteryGifts/PGT.cs index 057220e68..5f0dda66e 100644 --- a/PKHeX.Core/MysteryGifts/PGT.cs +++ b/PKHeX.Core/MysteryGifts/PGT.cs @@ -190,7 +190,7 @@ public override PKM ConvertToPKM(SaveFile SAV) if (!IsPokémon) return null; - PK4 pk4 = new PK4(PK.Data); + PK4 pk4 = new PK4(PK.Data) {Sanity = 0}; var pi = PersonalTable.HGSS.GetFormeEntry(Species, PK.AltForm); if (!IsHatched && Detail == 0) { diff --git a/PKHeX.Core/PKM/BK4.cs b/PKHeX.Core/PKM/BK4.cs index 45f43ca31..35294c89b 100644 --- a/PKHeX.Core/PKM/BK4.cs +++ b/PKHeX.Core/PKM/BK4.cs @@ -78,10 +78,10 @@ public override uint EXP public override int CNT_Tough { get => Data[0x22]; set => Data[0x22] = (byte)value; } public override int CNT_Sheen { get => Data[0x23]; set => Data[0x23] = (byte)value; } - private byte RIB0 { get => Data[0x24]; set => Data[0x24] = value; } // Sinnoh 1 - private byte RIB1 { get => Data[0x25]; set => Data[0x25] = value; } // Sinnoh 2 - private byte RIB2 { get => Data[0x26]; set => Data[0x26] = value; } // Unova 1 - private byte RIB3 { get => Data[0x27]; set => Data[0x27] = value; } // Unova 2 + private byte RIB3 { get => Data[0x24]; set => Data[0x24] = value; } // Unova 2 + private byte RIB2 { get => Data[0x25]; set => Data[0x25] = value; } // Unova 1 + private byte RIB1 { get => Data[0x26]; set => Data[0x26] = value; } // Sinnoh 2 + private byte RIB0 { get => Data[0x27]; set => Data[0x27] = value; } // Sinnoh 1 public bool RibbonChampionSinnoh { get => (RIB0 & (1 << 0)) == 1 << 0; set => RIB0 = (byte)(RIB0 & ~(1 << 0) | (value ? 1 << 0 : 0)); } public bool RibbonAbility { get => (RIB0 & (1 << 1)) == 1 << 1; set => RIB0 = (byte)(RIB0 & ~(1 << 1) | (value ? 1 << 1 : 0)); } public bool RibbonAbilityGreat { get => (RIB0 & (1 << 2)) == 1 << 2; set => RIB0 = (byte)(RIB0 & ~(1 << 2) | (value ? 1 << 2 : 0)); } @@ -139,10 +139,10 @@ public override uint EXP public override bool IsNicknamed { get => ((IV32 >> 0) & 1) == 1; set => IV32 = (uint)((IV32 & ~0x00000001) | (uint)(value ? 0x00000001 : 0)); } public override bool IsEgg { get => ((IV32 >> 1) & 1) == 1; set => IV32 = (uint)((IV32 & ~0x00000002) | (uint)(value ? 0x00000002 : 0)); } - private byte RIB4 { get => Data[0x3C]; set => Data[0x3C] = value; } // Hoenn 1a - private byte RIB5 { get => Data[0x3D]; set => Data[0x3D] = value; } // Hoenn 1b - private byte RIB6 { get => Data[0x3E]; set => Data[0x3E] = value; } // Hoenn 2a - private byte RIB7 { get => Data[0x3F]; set => Data[0x3F] = value; } // Hoenn 2b + private byte RIB7 { get => Data[0x3C]; set => Data[0x3C] = value; } // Hoenn 2b + private byte RIB6 { get => Data[0x3D]; set => Data[0x3D] = value; } // Hoenn 2a + private byte RIB5 { get => Data[0x3E]; set => Data[0x3E] = value; } // Hoenn 1b + private byte RIB4 { get => Data[0x3F]; set => Data[0x3F] = value; } // Hoenn 1a public bool RibbonG3Cool { get => (RIB4 & (1 << 0)) == 1 << 0; set => RIB4 = (byte)(RIB4 & ~(1 << 0) | (value ? 1 << 0 : 0)); } public bool RibbonG3CoolSuper { get => (RIB4 & (1 << 1)) == 1 << 1; set => RIB4 = (byte)(RIB4 & ~(1 << 1) | (value ? 1 << 1 : 0)); } public bool RibbonG3CoolHyper { get => (RIB4 & (1 << 2)) == 1 << 2; set => RIB4 = (byte)(RIB4 & ~(1 << 2) | (value ? 1 << 2 : 0)); } diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Pokepuff.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Pokepuff.cs index ca7abb565..3cec5d05f 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Pokepuff.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Pokepuff.cs @@ -15,15 +15,13 @@ public SAV_Pokepuff(SaveFile sav) InitializeComponent(); WinFormsUtil.TranslateInterface(this, Main.CurrentLanguage); - pfa = GameInfo.Strings.puffs; - pfa[0] = "---"; Setup(); new ToolTip().SetToolTip(B_Sort, "Hold CTRL to reverse sort."); new ToolTip().SetToolTip(B_All, "Hold CTRL to best instead of varied."); } - private readonly string[] pfa; + private readonly string[] pfa = GameInfo.Strings.puffs; private int PuffCount { get; set; } private void Setup() {