From 8a2f1d56c26be7715e73d63b5f07eefc216276af Mon Sep 17 00:00:00 2001 From: Kurt Date: Tue, 9 May 2023 20:17:15 -0700 Subject: [PATCH] Misc tweaks --- PKHeX.Core/PKM/HOME/GameDataPA8.cs | 3 ++- PKHeX.Core/PKM/HOME/GameDataPK8.cs | 24 ++++++++++++++---------- PKHeX.Core/PKM/PA8.cs | 4 ++-- PKHeX.Core/PKM/PK9.cs | 2 +- PKHeX.Core/PKM/Shared/G8PKM.cs | 12 ++++++------ 5 files changed, 25 insertions(+), 20 deletions(-) diff --git a/PKHeX.Core/PKM/HOME/GameDataPA8.cs b/PKHeX.Core/PKM/HOME/GameDataPA8.cs index dd2a48012..cd55838d7 100644 --- a/PKHeX.Core/PKM/HOME/GameDataPA8.cs +++ b/PKHeX.Core/PKM/HOME/GameDataPA8.cs @@ -87,7 +87,8 @@ public void CopyTo(PA8 pk) pk.GV_SPE = GV_SPE; pk.GV_SPA = GV_SPA; pk.GV_SPD = GV_SPD; - Data.Slice(0x28, 8 + 8).CopyTo(pk.Data.AsSpan(0x155)); // Copy both bitflag regions + PurchasedRecord.CopyTo(pk.PurchasedRecord); + MasteredRecord.CopyTo(pk.MasteredRecord); } public PKM ConvertToPKM(PKH pkh) => ConvertToPA8(pkh); diff --git a/PKHeX.Core/PKM/HOME/GameDataPK8.cs b/PKHeX.Core/PKM/HOME/GameDataPK8.cs index 266497e56..98491081d 100644 --- a/PKHeX.Core/PKM/HOME/GameDataPK8.cs +++ b/PKHeX.Core/PKM/HOME/GameDataPK8.cs @@ -50,11 +50,11 @@ public sealed class GameDataPK8 : HomeOptional1, IGameDataSide, IGigantamax, IDy public byte Fullness { get => Data[0x2C]; set => Data[0x2C] = value; } - private Span RecordFlag => Data.Slice(0x2D, 14); - public bool GetMoveRecordFlag(int index) => FlagUtil.GetFlag(RecordFlag, index >> 3, index & 7); - public void SetMoveRecordFlag(int index, bool value) => FlagUtil.SetFlag(RecordFlag, index >> 3, index & 7, value); - public bool GetMoveRecordFlagAny() => RecordFlag.IndexOfAnyExcept(0) >= 0; - public void ClearMoveRecordFlags() => RecordFlag.Clear(); + private Span RecordFlags => Data.Slice(0x2D, 14); + public bool GetMoveRecordFlag(int index) => FlagUtil.GetFlag(RecordFlags, index >> 3, index & 7); + public void SetMoveRecordFlag(int index, bool value) => FlagUtil.SetFlag(RecordFlags, index >> 3, index & 7, value); + public bool GetMoveRecordFlagAny() => RecordFlags.IndexOfAnyExcept(0) >= 0; + public void ClearMoveRecordFlags() => RecordFlags.Clear(); public int Palma { get => ReadInt32LittleEndian(Data[0x3B..]); set => WriteInt32LittleEndian(Data[0x3B..], value); } public int Ball { get => Data[0x3F]; set => Data[0x3F] = (byte)value; } @@ -75,8 +75,8 @@ public void CopyTo(PK8 pk) pk.DynamaxLevel = DynamaxLevel; pk.Fullness = Fullness; pk.Palma = Palma; - PokeJob.CopyTo(pk.Data.AsSpan(0xCE)); // PokeJob - RecordFlag.CopyTo(pk.Data.AsSpan(0x127)); // Move Record + PokeJob.CopyTo(pk.PokeJob); + RecordFlags.CopyTo(pk.RecordFlags); } public PKM ConvertToPKM(PKH pkh) => ConvertToPK8(pkh); @@ -100,10 +100,14 @@ public PK8 ConvertToPK8(PKH pkh) var side = pkh.DataPB8 as IGameDataSide ?? pkh.DataPA8 as IGameDataSide ?? pkh.DataPK9; - if (side is null) - return null; + if (side is not null) + return Create(side, pkh.Version); - var ver = pkh.Version; + return null; + } + + private static GameDataPK8 Create(IGameDataSide side, int ver) + { var met = side.Met_Location; var ball = GetBall(side.Ball); var egg = GetEggLocation(side.Egg_Location); diff --git a/PKHeX.Core/PKM/PA8.cs b/PKHeX.Core/PKM/PA8.cs index 1d3da8365..bc8372c0a 100644 --- a/PKHeX.Core/PKM/PA8.cs +++ b/PKHeX.Core/PKM/PA8.cs @@ -504,13 +504,13 @@ public ulong Tracker set => WriteUInt64LittleEndian(Data.AsSpan(0x14D), value); } - private Span PurchasedRecord => Data.AsSpan(0x155, 8); + public Span PurchasedRecord => Data.AsSpan(0x155, 8); public bool GetPurchasedRecordFlag(int index) => FlagUtil.GetFlag(PurchasedRecord, index >> 3, index & 7); public void SetPurchasedRecordFlag(int index, bool value) => FlagUtil.SetFlag(PurchasedRecord, index >> 3, index & 7, value); public bool GetPurchasedRecordFlagAny() => PurchasedRecord.IndexOfAnyExcept(0) >= 0; public int GetPurchasedCount() => BitOperations.PopCount(ReadUInt64LittleEndian(PurchasedRecord)); - private Span MasteredRecord => Data.AsSpan(0x15D, 8); + public Span MasteredRecord => Data.AsSpan(0x15D, 8); public bool GetMasteredRecordFlag(int index) => FlagUtil.GetFlag(MasteredRecord, index >> 3, index & 7); public void SetMasteredRecordFlag(int index, bool value) => FlagUtil.SetFlag(MasteredRecord, index >> 3, index & 7, value); public bool GetMasteredRecordFlagAny() => MasteredRecord.IndexOfAnyExcept(0) >= 0; diff --git a/PKHeX.Core/PKM/PK9.cs b/PKHeX.Core/PKM/PK9.cs index 74387113b..073523827 100644 --- a/PKHeX.Core/PKM/PK9.cs +++ b/PKHeX.Core/PKM/PK9.cs @@ -467,7 +467,7 @@ public ulong Tracker private const int RecordStart = 0x12F; internal const int COUNT_RECORD = 200; // Up to 200 TM flags, but not all are used. private const int RecordLength = COUNT_RECORD / 8; - internal Span RecordFlags => Data.AsSpan(RecordStart, RecordLength); + public Span RecordFlags => Data.AsSpan(RecordStart, RecordLength); public bool GetMoveRecordFlag(int index) { diff --git a/PKHeX.Core/PKM/Shared/G8PKM.cs b/PKHeX.Core/PKM/Shared/G8PKM.cs index 83931698f..a842739e7 100644 --- a/PKHeX.Core/PKM/Shared/G8PKM.cs +++ b/PKHeX.Core/PKM/Shared/G8PKM.cs @@ -395,7 +395,7 @@ public override string HT_Name public byte HT_Feeling { get => Data[0xCB]; set => Data[0xCB] = value; } public ushort HT_TextVar { get => ReadUInt16LittleEndian(Data.AsSpan(0xCC)); set => WriteUInt16LittleEndian(Data.AsSpan(0xCC), value); } - private Span PokeJob => Data.Slice(0xCE, 14); + public Span PokeJob => Data.Slice(0xCE, 14); public bool GetPokeJobFlag(int index) => FlagUtil.GetFlag(PokeJob, index >> 3, index & 7); public void SetPokeJobFlag(int index, bool value) => FlagUtil.SetFlag(PokeJob, index >> 3, index & 7, value); public bool GetPokeJobFlagAny() => PokeJob.IndexOfAnyExcept(0) >= 0; @@ -450,11 +450,11 @@ public override string OT_Name public bool HT_SPD { get => ((HyperTrainFlags >> 4) & 1) == 1; set => HyperTrainFlags = (byte)((HyperTrainFlags & ~(1 << 4)) | ((value ? 1 : 0) << 4)); } public bool HT_SPE { get => ((HyperTrainFlags >> 5) & 1) == 1; set => HyperTrainFlags = (byte)((HyperTrainFlags & ~(1 << 5)) | ((value ? 1 : 0) << 5)); } - private Span RecordFlag => Data.Slice(0x127, 14); - public bool GetMoveRecordFlag(int index) => FlagUtil.GetFlag(RecordFlag, index >> 3, index & 7); - public void SetMoveRecordFlag(int index, bool value) => FlagUtil.SetFlag(RecordFlag, index >> 3, index & 7, value); - public bool GetMoveRecordFlagAny() => RecordFlag.IndexOfAnyExcept(0) >= 0; - public void ClearMoveRecordFlags() => RecordFlag.Clear(); + public Span RecordFlags => Data.Slice(0x127, 14); + public bool GetMoveRecordFlag(int index) => FlagUtil.GetFlag(RecordFlags, index >> 3, index & 7); + public void SetMoveRecordFlag(int index, bool value) => FlagUtil.SetFlag(RecordFlags, index >> 3, index & 7, value); + public bool GetMoveRecordFlagAny() => RecordFlags.IndexOfAnyExcept(0) >= 0; + public void ClearMoveRecordFlags() => RecordFlags.Clear(); // Why did you mis-align this field, GameFreak? public ulong Tracker