diff --git a/PKHeX.Core/Saves/SAV6.cs b/PKHeX.Core/Saves/SAV6.cs
index 170c49102..c68dcb3a8 100644
--- a/PKHeX.Core/Saves/SAV6.cs
+++ b/PKHeX.Core/Saves/SAV6.cs
@@ -5,7 +5,7 @@ namespace PKHeX.Core
///
/// Generation 6 object.
///
- public abstract class SAV6 : SAV_BEEF, ITrainerStatRecord, ISaveBlock6Core, IRegionOrigin
+ public abstract class SAV6 : SAV_BEEF, ITrainerStatRecord, ISaveBlock6Core, IRegionOrigin, IGameSync
{
// Save Data Attributes
protected override string BAKText => $"{OT} ({Version}) - {Played.LastSavedTime}";
@@ -63,8 +63,8 @@ namespace PKHeX.Core
public int Region { get => Status.SubRegion; set => Status.SubRegion = value; }
public int Country { get => Status.Country; set => Status.Country = value; }
public int ConsoleRegion { get => Status.ConsoleRegion; set => Status.ConsoleRegion = value; }
- public override int GameSyncIDSize => MyStatus6.GameSyncIDSize; // 64 bits
- public override string GameSyncID { get => Status.GameSyncID; set => Status.GameSyncID = value; }
+ public int GameSyncIDSize => MyStatus6.GameSyncIDSize; // 64 bits
+ public string GameSyncID { get => Status.GameSyncID; set => Status.GameSyncID = value; }
public override int PlayedHours { get => Played.PlayedHours; set => Played.PlayedHours = value; }
public override int PlayedMinutes { get => Played.PlayedMinutes; set => Played.PlayedMinutes = value; }
public override int PlayedSeconds { get => Played.PlayedSeconds; set => Played.PlayedSeconds = value; }
diff --git a/PKHeX.Core/Saves/SAV7.cs b/PKHeX.Core/Saves/SAV7.cs
index 070de2a8a..f77a7a748 100644
--- a/PKHeX.Core/Saves/SAV7.cs
+++ b/PKHeX.Core/Saves/SAV7.cs
@@ -139,8 +139,8 @@ namespace PKHeX.Core
public override int SID { get => MyStatus.SID; set => MyStatus.SID = value; }
public override int Game { get => MyStatus.Game; set => MyStatus.Game = value; }
public override int Gender { get => MyStatus.Gender; set => MyStatus.Gender = value; }
- public override int GameSyncIDSize => MyStatus7.GameSyncIDSize; // 64 bits
- public override string GameSyncID { get => MyStatus.GameSyncID; set => MyStatus.GameSyncID = value; }
+ public int GameSyncIDSize => MyStatus7.GameSyncIDSize; // 64 bits
+ public string GameSyncID { get => MyStatus.GameSyncID; set => MyStatus.GameSyncID = value; }
public int Region { get => MyStatus.SubRegion; set => MyStatus.SubRegion = value; }
public int Country { get => MyStatus.Country; set => MyStatus.Country = value; }
public int ConsoleRegion { get => MyStatus.ConsoleRegion; set => MyStatus.ConsoleRegion = value; }
diff --git a/PKHeX.Core/Saves/SAV7b.cs b/PKHeX.Core/Saves/SAV7b.cs
index 5039303dc..436c86ddc 100644
--- a/PKHeX.Core/Saves/SAV7b.cs
+++ b/PKHeX.Core/Saves/SAV7b.cs
@@ -7,7 +7,7 @@ namespace PKHeX.Core
///
/// Generation 7 object for games.
///
- public sealed class SAV7b : SAV_BEEF
+ public sealed class SAV7b : SAV_BEEF, IGameSync
{
protected override string BAKText => $"{OT} ({Version}) - {Blocks.Played.LastSavedTime}";
public override string Filter => "savedata|*.bin";
@@ -172,7 +172,7 @@ namespace PKHeX.Core
protected override bool[] MysteryGiftReceivedFlags { get => Blocks.GiftRecords.Flags; set => Blocks.GiftRecords.Flags = value; }
protected override DataMysteryGift[] MysteryGiftCards { get => Blocks.GiftRecords.Records; set => Blocks.GiftRecords.Records = (WR7[])value; }
- public override int GameSyncIDSize => MyStatus7b.GameSyncIDSize; // 64 bits
- public override string GameSyncID { get => Blocks.Status.GameSyncID; set => Blocks.Status.GameSyncID = value; }
+ public int GameSyncIDSize => MyStatus7b.GameSyncIDSize; // 64 bits
+ public string GameSyncID { get => Blocks.Status.GameSyncID; set => Blocks.Status.GameSyncID = value; }
}
}
diff --git a/PKHeX.Core/Saves/SaveFile.cs b/PKHeX.Core/Saves/SaveFile.cs
index 955fb77d5..2de7c40a2 100644
--- a/PKHeX.Core/Saves/SaveFile.cs
+++ b/PKHeX.Core/Saves/SaveFile.cs
@@ -317,8 +317,6 @@ namespace PKHeX.Core
// Varied Methods
protected abstract void SetChecksums();
- public virtual int GameSyncIDSize { get; } = 8;
- public virtual string GameSyncID { get => string.Empty; set { } }
#region Daycare
public bool HasDaycare => DaycareOffset > -1;
diff --git a/PKHeX.Core/Saves/Substructures/Misc/IGameSync.cs b/PKHeX.Core/Saves/Substructures/Misc/IGameSync.cs
new file mode 100644
index 000000000..16d32032d
--- /dev/null
+++ b/PKHeX.Core/Saves/Substructures/Misc/IGameSync.cs
@@ -0,0 +1,11 @@
+namespace PKHeX.Core
+{
+ ///
+ /// Provides details about the save file's Game Sync identifier.
+ ///
+ public interface IGameSync
+ {
+ int GameSyncIDSize { get; }
+ string GameSyncID { get; set; }
+ }
+}
diff --git a/PKHeX.WinForms/Controls/SAV Editor/SAVEditor.cs b/PKHeX.WinForms/Controls/SAV Editor/SAVEditor.cs
index b221424d9..37163e8db 100644
--- a/PKHeX.WinForms/Controls/SAV Editor/SAVEditor.cs
+++ b/PKHeX.WinForms/Controls/SAV Editor/SAVEditor.cs
@@ -462,10 +462,10 @@ namespace PKHeX.WinForms.Controls
SAV.SetDaycareRNGSeed(SAV.DaycareIndex, value);
SAV.Edited = true;
}
- else if (tb == TB_GameSync)
+ else if (tb == TB_GameSync && SAV is IGameSync sync)
{
- var value = filterText.PadLeft(SAV.GameSyncIDSize, '0');
- SAV.GameSyncID = value;
+ var value = filterText.PadLeft(sync.GameSyncIDSize, '0');
+ sync.GameSyncID = value;
SAV.Edited = true;
}
else if (SAV is ISecureValueStorage s)
@@ -1122,23 +1122,20 @@ namespace PKHeX.WinForms.Controls
TB_Secure2.Text = s.TimeStampPrevious.ToString("X16");
}
- switch (sav.Generation)
+ if (sav is IGameSync sync)
{
- case 6:
- case 7:
- var gsid = sav.GameSyncID;
- TB_GameSync.Enabled = !string.IsNullOrEmpty(gsid);
- TB_GameSync.MaxLength = sav.GameSyncIDSize;
- TB_GameSync.Text = (string.IsNullOrEmpty(gsid) ? 0.ToString() : gsid).PadLeft(sav.GameSyncIDSize, '0');
- break;
+ var gsid = sync.GameSyncID;
+ TB_GameSync.Enabled = !string.IsNullOrEmpty(gsid);
+ TB_GameSync.MaxLength = sync.GameSyncIDSize;
+ TB_GameSync.Text = (string.IsNullOrEmpty(gsid) ? 0.ToString() : gsid).PadLeft(sync.GameSyncIDSize, '0');
}
}
private void ToggleSecrets(SaveFile sav, bool hide)
{
- var g67 = 6 <= sav.Generation && sav.Generation <= 7;
- TB_Secure1.Visible = TB_Secure2.Visible = L_Secure1.Visible = L_Secure2.Visible = sav.Exportable && g67 && !hide;
- TB_GameSync.Visible = L_GameSync.Visible = sav.Exportable && g67 && !hide;
+ var shouldShow = sav.Exportable && !hide;
+ TB_Secure1.Visible = TB_Secure2.Visible = L_Secure1.Visible = L_Secure2.Visible = shouldShow && sav is ISecureValueStorage;
+ TB_GameSync.Visible = L_GameSync.Visible = shouldShow && sav is IGameSync;
}
// DragDrop