From 0e2dac3ff6d8e8f29ae00552cf5f9df7ae6d4517 Mon Sep 17 00:00:00 2001 From: Kurt Date: Wed, 25 Aug 2021 19:23:15 -0700 Subject: [PATCH] Minor tweaks Empty return for invalid species encountertemplate fetch Expose property for ck3 @ 0xD7 show legal memory context items rather than gen8 always --- PKHeX.Core/Game/GameStrings/MemoryStrings.cs | 12 +++++++----- .../Generator/Moveset/EncounterMovesetGenerator.cs | 2 ++ PKHeX.Core/PKM/CK3.cs | 2 +- PKHeX.WinForms/Subforms/PKM Editors/MemoryAmie.cs | 10 ++++++---- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/PKHeX.Core/Game/GameStrings/MemoryStrings.cs b/PKHeX.Core/Game/GameStrings/MemoryStrings.cs index 7f6c9b7b3..67dc5ae82 100644 --- a/PKHeX.Core/Game/GameStrings/MemoryStrings.cs +++ b/PKHeX.Core/Game/GameStrings/MemoryStrings.cs @@ -20,7 +20,8 @@ public MemoryStrings(GameStrings strings, int format) memories = new Lazy>(GetMemories); none = new Lazy>(() => Util.GetCBList(new[] {string.Empty})); species = new Lazy>(() => Util.GetCBList(s.specieslist)); - item = new Lazy>(() => GetItems(format)); + item6 = new Lazy>(() => GetItems(6)); + item8 = new Lazy>(() => GetItems(8)); genloc = new Lazy>(() => Util.GetCBList(s.genloc)); moves = new Lazy>(() => Util.GetCBList(s.movelist)); specific = new Lazy>(() => Util.GetCBList(s.metXY_00000, Legal.Met_XY_0)); @@ -34,12 +35,13 @@ private List GetItems(int format) } private readonly Lazy> memories; - private readonly Lazy> none, species, item, genloc, moves, specific; + private readonly Lazy> none, species, item6, item8, genloc, moves, specific; public List Memory => memories.Value; public List None => none.Value; public List Moves => moves.Value; - public List Items => item.Value; + public List Items6 => item6.Value; + public List Items8 => item8.Value; public List GeneralLocations => genloc.Value; public List SpecificLocations => specific.Value; public List Species => species.Value; @@ -55,11 +57,11 @@ private List GetMemories() public ReadOnlySpan GetMemoryQualities() => s.intensity; public ReadOnlySpan GetMemoryFeelings(int memoryGen) => memoryGen >= 8 ? s.feeling.AsSpan(0, 25) : s.feeling.AsSpan(1, 24); // empty line for 0 in gen8+ - public List GetArgumentStrings(MemoryArgType type) => type switch + public List GetArgumentStrings(MemoryArgType type, int memoryGen) => type switch { MemoryArgType.Species => Species, MemoryArgType.GeneralLocation => GeneralLocations, - MemoryArgType.Item => Items, + MemoryArgType.Item => memoryGen == 6 ? Items6 : Items8, MemoryArgType.Move => Moves, MemoryArgType.SpecificLocation => SpecificLocations, _ => None, diff --git a/PKHeX.Core/Legality/Encounters/Generator/Moveset/EncounterMovesetGenerator.cs b/PKHeX.Core/Legality/Encounters/Generator/Moveset/EncounterMovesetGenerator.cs index 16437b749..80ee753e2 100644 --- a/PKHeX.Core/Legality/Encounters/Generator/Moveset/EncounterMovesetGenerator.cs +++ b/PKHeX.Core/Legality/Encounters/Generator/Moveset/EncounterMovesetGenerator.cs @@ -139,6 +139,8 @@ public static IEnumerable GenerateEncounters(PKM pk, int[]? move /// A consumable list of possible encounters. public static IEnumerable GenerateVersionEncounters(PKM pk, IEnumerable moves, GameVersion version) { + if (pk.Species == 0) // can enter this method after failing to set a species ID that cannot exist in the format + return Array.Empty(); pk.Version = (int)version; var format = pk.Format; if (format is 2 && version is GameVersion.RD or GameVersion.GN or GameVersion.BU or GameVersion.YW) diff --git a/PKHeX.Core/PKM/CK3.cs b/PKHeX.Core/PKM/CK3.cs index ccb1cf0ed..08e425cbe 100644 --- a/PKHeX.Core/PKM/CK3.cs +++ b/PKHeX.Core/PKM/CK3.cs @@ -183,7 +183,7 @@ public sealed class CK3 : G3PKM, IShadowPKM public override int MarkValue { get => SwapBits(Data[0xCF], 1, 2); protected set => Data[0xCF] = (byte)SwapBits(value, 1, 2); } public override int PKRS_Days { get => Math.Max((sbyte)Data[0xD0], (sbyte)0); set => Data[0xD0] = (byte)(value == 0 ? 0xFF : value & 0xF); } - private int PartySlot { get => Data[0xD7]; set => Data[0xD7] = (byte)value; } // or not; only really used while in party? + public int PartySlot { get => Data[0xD7]; set => Data[0xD7] = (byte)value; } // or not; only really used while in party? public int ShadowID { get => BigEndian.ToUInt16(Data, 0xD8); set => BigEndian.GetBytes((ushort)value).CopyTo(Data, 0xD8); } public int Purification { get => BigEndian.ToInt32(Data, 0xDC); set => BigEndian.GetBytes(value).CopyTo(Data, 0xDC); } public uint EXP_Shadow { get => BigEndian.ToUInt32(Data, 0xC0); set => BigEndian.GetBytes(value).CopyTo(Data, 0xC0); } diff --git a/PKHeX.WinForms/Subforms/PKM Editors/MemoryAmie.cs b/PKHeX.WinForms/Subforms/PKM Editors/MemoryAmie.cs index 9a692697e..8944941de 100644 --- a/PKHeX.WinForms/Subforms/PKM Editors/MemoryAmie.cs +++ b/PKHeX.WinForms/Subforms/PKM Editors/MemoryAmie.cs @@ -237,9 +237,10 @@ private void UpdateMemoryDisplay(object sender) { if (sender == CB_CTMemory) { + int memoryGen = pkm.Generation; int memory = WinFormsUtil.GetIndex((ComboBox)sender); - var memIndex = Memories.GetMemoryArgType(memory, pkm.Generation); - var argvals = MemStrings.GetArgumentStrings(memIndex); + var memIndex = Memories.GetMemoryArgType(memory, memoryGen); + var argvals = MemStrings.GetArgumentStrings(memIndex, memoryGen); CB_CTVar.InitializeBinding(); CB_CTVar.DataSource = new BindingSource(argvals, null); LCTV.Text = TextArgs.GetMemoryCategory(memIndex, pkm.Generation); @@ -247,9 +248,10 @@ private void UpdateMemoryDisplay(object sender) } else { + int memoryGen = pkm.Format; int memory = WinFormsUtil.GetIndex((ComboBox)sender); - var memIndex = Memories.GetMemoryArgType(memory, pkm.Format); - var argvals = MemStrings.GetArgumentStrings(memIndex); + var memIndex = Memories.GetMemoryArgType(memory, memoryGen); + var argvals = MemStrings.GetArgumentStrings(memIndex, memoryGen); CB_OTVar.InitializeBinding(); CB_OTVar.DataSource = new BindingSource(argvals, null); LOTV.Text = TextArgs.GetMemoryCategory(memIndex, pkm.Format);