Minor tweaks

Remove GameSync/SecureValue from SAV tab (still lives in Block Data)
Remove inaccessible items from FRLG/E key items
This commit is contained in:
Kurt 2026-03-08 23:40:56 -05:00
parent d827cec5a7
commit 8b08f263e5
27 changed files with 30 additions and 195 deletions

View File

@ -205,10 +205,10 @@ public ModifyResult TryModify(TObject entity, IEnumerable<StringInstruction> fil
return result;
}
private static Dictionary<string, PropertyInfo>.AlternateLookup<ReadOnlySpan<char>>[] GetPropertyDictionaries(IReadOnlyList<Type> types, int expectedMax)
private static Dictionary<string, PropertyInfo>.AlternateLookup<ReadOnlySpan<char>>[] GetPropertyDictionaries(ReadOnlySpan<Type> types, int expectedMax)
{
var result = new Dictionary<string, PropertyInfo>.AlternateLookup<ReadOnlySpan<char>>[types.Count];
for (int i = 0; i < types.Count; i++)
var result = new Dictionary<string, PropertyInfo>.AlternateLookup<ReadOnlySpan<char>>[types.Length];
for (int i = 0; i < types.Length; i++)
result[i] = GetPropertyDictionary(types[i], ReflectUtil.GetAllPropertyInfoPublic, expectedMax).GetAlternateLookup<ReadOnlySpan<char>>();
return result;
}

View File

@ -1,21 +1,12 @@
using System;
using System;
namespace PKHeX.Core;
/// <summary>
/// Base class for defining a manipulation of box data.
/// </summary>
public abstract class BoxManipBase : IBoxManip
public abstract record BoxManipBase(BoxManipType Type, Func<SaveFile, bool> Usable) : IBoxManip
{
public BoxManipType Type { get; }
public Func<SaveFile, bool> Usable { get; }
protected BoxManipBase(BoxManipType type, Func<SaveFile, bool> usable)
{
Type = type;
Usable = usable;
}
public abstract string GetPrompt(bool all);
public abstract string GetFail(bool all);
public abstract string GetSuccess(bool all);

View File

@ -5,7 +5,7 @@ namespace PKHeX.Core;
/// <summary>
/// Clears contents of boxes by deleting all that satisfy a criteria.
/// </summary>
public sealed class BoxManipClear(BoxManipType Type, Func<PKM, bool> criteria, Func<SaveFile, bool> Usable) : BoxManipBase(Type, Usable)
public sealed record BoxManipClear(BoxManipType Type, Func<PKM, bool> Criteria, Func<SaveFile, bool> Usable) : BoxManipBase(Type, Usable)
{
public BoxManipClear(BoxManipType Type, Func<PKM, bool> Criteria) : this(Type, Criteria, _ => true) { }
@ -18,6 +18,6 @@ public override int Execute(SaveFile sav, BoxManipParam param)
var (start, stop, reverse) = param;
return sav.ClearBoxes(start, stop, Method);
bool Method(PKM p) => reverse ^ criteria(p);
bool Method(PKM p) => reverse ^ Criteria(p);
}
}

View File

@ -5,7 +5,7 @@ namespace PKHeX.Core;
/// <summary>
/// Clears contents of boxes by deleting all that satisfy a criteria based on a <see cref="SaveFile"/>.
/// </summary>
public sealed class BoxManipClearComplex(BoxManipType Type, Func<PKM, SaveFile, bool> criteria, Func<SaveFile, bool> Usable) : BoxManipBase(Type, Usable)
public sealed record BoxManipClearComplex(BoxManipType Type, Func<PKM, SaveFile, bool> Criteria, Func<SaveFile, bool> Usable) : BoxManipBase(Type, Usable)
{
public BoxManipClearComplex(BoxManipType Type, Func<PKM, SaveFile, bool> Criteria) : this(Type, Criteria, _ => true) { }
@ -18,6 +18,6 @@ public override int Execute(SaveFile sav, BoxManipParam param)
var (start, stop, reverse) = param;
return sav.ClearBoxes(start, stop, Method);
bool Method(PKM p) => reverse ^ criteria(p, sav);
bool Method(PKM p) => reverse ^ Criteria(p, sav);
}
}

View File

@ -7,7 +7,7 @@ namespace PKHeX.Core;
/// Clears contents of boxes by deleting all but the first duplicate detected.
/// </summary>
/// <typeparam name="T">Base type of the "is duplicate" hash for the duplicate detection.</typeparam>
public sealed class BoxManipClearDuplicate<T> : BoxManipBase
public sealed record BoxManipClearDuplicate<T> : BoxManipBase
{
private readonly HashSet<T> HashSet = [];
private readonly Func<PKM, bool> Criteria;

View File

@ -5,8 +5,8 @@ namespace PKHeX.Core;
/// <summary>
/// Modifies contents of boxes by using an <see cref="Action"/> to change data.
/// </summary>
public sealed class BoxManipModify(BoxManipType type, Action<PKM> Action, Func<SaveFile, bool> Usable)
: BoxManipBase(type, Usable)
public sealed record BoxManipModify(BoxManipType Type, Action<PKM> Action, Func<SaveFile, bool> Usable)
: BoxManipBase(Type, Usable)
{
public BoxManipModify(BoxManipType type, Action<PKM> Action) : this(type, Action, _ => true) { }

View File

@ -5,7 +5,7 @@ namespace PKHeX.Core;
/// <summary>
/// Modifies contents of boxes by using an <see cref="Action"/> (referencing a Save File) to change data.
/// </summary>
public sealed class BoxManipModifyComplex(BoxManipType Type, Action<PKM, SaveFile> Action, Func<SaveFile, bool> Usable)
public sealed record BoxManipModifyComplex(BoxManipType Type, Action<PKM, SaveFile> Action, Func<SaveFile, bool> Usable)
: BoxManipBase(Type, Usable)
{
public BoxManipModifyComplex(BoxManipType Type, Action<PKM, SaveFile> Action) : this(Type, Action, _ => true) { }

View File

@ -6,7 +6,7 @@ namespace PKHeX.Core;
/// <summary>
/// Sorts contents of boxes by using a Sorter to determine the order.
/// </summary>
public sealed class BoxManipSort(BoxManipType Type, Func<IEnumerable<PKM>, IEnumerable<PKM>> Sorter, Func<SaveFile, bool> Usable) : BoxManipBase(Type, Usable)
public sealed record BoxManipSort(BoxManipType Type, Func<IEnumerable<PKM>, IEnumerable<PKM>> Sorter, Func<SaveFile, bool> Usable) : BoxManipBase(Type, Usable)
{
public BoxManipSort(BoxManipType Type, Func<IEnumerable<PKM>, IEnumerable<PKM>> Sorter) : this(Type, Sorter, _ => true) { }

View File

@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
namespace PKHeX.Core;
@ -6,7 +6,7 @@ namespace PKHeX.Core;
/// <summary>
/// Sorts contents of boxes by using a <see cref="Sorter"/> (referencing a Save File) to determine the order.
/// </summary>
public sealed class BoxManipSortComplex : BoxManipBase
public sealed record BoxManipSortComplex : BoxManipBase
{
private readonly Func<IEnumerable<PKM>, SaveFile, int, IEnumerable<PKM>> Sorter;
public BoxManipSortComplex(BoxManipType type, Func<IEnumerable<PKM>, SaveFile, IEnumerable<PKM>> sorter) : this(type, sorter, _ => true) { }

View File

@ -13,9 +13,9 @@ public sealed class ItemStorage3E : IItemStorage
public static ReadOnlySpan<ushort> Key =>
[
// R/S
259, 260, 261, 262, 263, 264, 265, 266, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288,
259, 260, 261, 262, 263, 264, 265, 266, 268, 269, 270, 271, 272, 273, 274, 275, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288,
// FR/LG
349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374,
372,
// E
375, 376,
];

View File

@ -13,7 +13,7 @@ public sealed class ItemStorage3FRLG : IItemStorage
public static ReadOnlySpan<ushort> Key =>
[
// R/S
259, 260, 261, 262, 263, 264, 265, 266, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288,
260, 261, 262, 263, 264, 265,
// FR/LG
349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374,
];

View File

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using static System.Buffers.Binary.BinaryPrimitives;
@ -33,6 +34,7 @@ protected SAV_BEEF([ConstantExpected] int size, [ConstantExpected] int biOffset)
/// <summary>
/// Timestamp that the save file was last saved at (Secure Value)
/// </summary>
[TypeConverter(typeof(TypeConverterU64))]
public ulong TimeStampCurrent
{
get => ReadUInt64LittleEndian(Data[BlockInfoOffset..]);
@ -42,6 +44,7 @@ public ulong TimeStampCurrent
/// <summary>
/// Timestamp that the save file was saved at prior to the <see cref="TimeStampCurrent"/> (Secure Value)
/// </summary>
[TypeConverter(typeof(TypeConverterU64))]
public ulong TimeStampPrevious
{
get => ReadUInt64LittleEndian(Data[(BlockInfoOffset + 8)..]);

View File

@ -111,12 +111,6 @@ private void InitializeComponent()
B_ConvertKorean = new System.Windows.Forms.Button();
CB_SaveSlot = new System.Windows.Forms.ComboBox();
L_SaveSlot = new System.Windows.Forms.Label();
L_Secure2 = new System.Windows.Forms.Label();
TB_Secure2 = new System.Windows.Forms.TextBox();
L_Secure1 = new System.Windows.Forms.Label();
TB_Secure1 = new System.Windows.Forms.TextBox();
L_GameSync = new System.Windows.Forms.Label();
TB_GameSync = new System.Windows.Forms.TextBox();
tabBoxMulti.SuspendLayout();
Tab_Box.SuspendLayout();
PopoutMenu.SuspendLayout();
@ -410,12 +404,6 @@ private void InitializeComponent()
Tab_SAV.Controls.Add(FLP_SAVToolsMisc);
Tab_SAV.Controls.Add(CB_SaveSlot);
Tab_SAV.Controls.Add(L_SaveSlot);
Tab_SAV.Controls.Add(L_Secure2);
Tab_SAV.Controls.Add(TB_Secure2);
Tab_SAV.Controls.Add(L_Secure1);
Tab_SAV.Controls.Add(TB_Secure1);
Tab_SAV.Controls.Add(L_GameSync);
Tab_SAV.Controls.Add(TB_GameSync);
Tab_SAV.Location = new System.Drawing.Point(4, 26);
Tab_SAV.Name = "Tab_SAV";
Tab_SAV.Size = new System.Drawing.Size(441, 333);
@ -1040,72 +1028,6 @@ private void InitializeComponent()
L_SaveSlot.Text = "Save Slot:";
L_SaveSlot.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// L_Secure2
//
L_Secure2.Location = new System.Drawing.Point(32, 112);
L_Secure2.Name = "L_Secure2";
L_Secure2.Size = new System.Drawing.Size(120, 24);
L_Secure2.TabIndex = 18;
L_Secure2.Text = "Secure Value 2:";
L_Secure2.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// TB_Secure2
//
TB_Secure2.Enabled = false;
TB_Secure2.Font = new System.Drawing.Font("Courier New", 8.25F);
TB_Secure2.Location = new System.Drawing.Point(152, 112);
TB_Secure2.MaxLength = 16;
TB_Secure2.MinimumSize = new System.Drawing.Size(120, 24);
TB_Secure2.Name = "TB_Secure2";
TB_Secure2.PlaceholderText = "0000000000000000";
TB_Secure2.Size = new System.Drawing.Size(120, 24);
TB_Secure2.TabIndex = 17;
TB_Secure2.Validated += UpdateStringSeed;
//
// L_Secure1
//
L_Secure1.Location = new System.Drawing.Point(32, 88);
L_Secure1.Name = "L_Secure1";
L_Secure1.Size = new System.Drawing.Size(120, 24);
L_Secure1.TabIndex = 16;
L_Secure1.Text = "Secure Value 1:";
L_Secure1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// TB_Secure1
//
TB_Secure1.Enabled = false;
TB_Secure1.Font = new System.Drawing.Font("Courier New", 8.25F);
TB_Secure1.Location = new System.Drawing.Point(152, 88);
TB_Secure1.MaxLength = 16;
TB_Secure1.MinimumSize = new System.Drawing.Size(120, 24);
TB_Secure1.Name = "TB_Secure1";
TB_Secure1.PlaceholderText = "0000000000000000";
TB_Secure1.Size = new System.Drawing.Size(120, 24);
TB_Secure1.TabIndex = 15;
TB_Secure1.Validated += UpdateStringSeed;
//
// L_GameSync
//
L_GameSync.Location = new System.Drawing.Point(32, 64);
L_GameSync.Name = "L_GameSync";
L_GameSync.Size = new System.Drawing.Size(120, 24);
L_GameSync.TabIndex = 11;
L_GameSync.Text = "Game Sync ID:";
L_GameSync.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// TB_GameSync
//
TB_GameSync.Enabled = false;
TB_GameSync.Font = new System.Drawing.Font("Courier New", 8.25F);
TB_GameSync.Location = new System.Drawing.Point(152, 64);
TB_GameSync.MaxLength = 16;
TB_GameSync.MinimumSize = new System.Drawing.Size(120, 24);
TB_GameSync.Name = "TB_GameSync";
TB_GameSync.PlaceholderText = "0000000000000000";
TB_GameSync.Size = new System.Drawing.Size(120, 24);
TB_GameSync.TabIndex = 10;
TB_GameSync.Validated += UpdateStringSeed;
//
// SAVEditor
//
AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
@ -1152,13 +1074,7 @@ private void InitializeComponent()
private System.Windows.Forms.TabPage Tab_SAV;
private System.Windows.Forms.ComboBox CB_SaveSlot;
private System.Windows.Forms.Label L_SaveSlot;
private System.Windows.Forms.Label L_Secure2;
private System.Windows.Forms.TextBox TB_Secure2;
private System.Windows.Forms.Label L_Secure1;
private System.Windows.Forms.TextBox TB_Secure1;
private System.Windows.Forms.Button B_JPEG;
private System.Windows.Forms.Label L_GameSync;
private System.Windows.Forms.TextBox TB_GameSync;
private System.Windows.Forms.Button B_SaveBoxBin;
private System.Windows.Forms.Button B_VerifyCHK;
private System.Windows.Forms.FlowLayoutPanel FLP_SAVtools;

View File

@ -38,12 +38,6 @@ public void SetEditEnvironment(SaveDataEditor<PictureBox> value)
public bool HaX;
public bool ModifyPKM { private get; set; }
public bool HideSecretDetails
{
private get;
set => ToggleSecrets(SAV, field = value);
}
public ToolStripMenuItem Menu_Redo { get; set; } = null!;
public ToolStripMenuItem Menu_Undo { get; set; } = null!;
private bool FieldsLoaded;
@ -511,8 +505,7 @@ private void OpenBoxViewer()
z.BringToFront();
return;
}
var form = new SAV_BoxViewer(this, M, Box.CurrentBox);
form.Owner = FindForm();
var form = new SAV_BoxViewer(this, M, Box.CurrentBox) { Owner = FindForm() };
form.Show();
}
@ -579,21 +572,6 @@ private void UpdateStringSeed(object sender, EventArgs e)
if (GetCurrentDaycare() is { } s)
SetDaycareSeed(s, filterText);
}
else if (tb == TB_GameSync && SAV is IGameSync sync)
{
var value = filterText.PadLeft(sync.GameSyncIDSize, '0');
sync.GameSyncID = value;
SAV.State.Edited = true;
}
else if (SAV is ISecureValueStorage s)
{
var value = Convert.ToUInt64(filterText, 16);
if (tb == TB_Secure1)
s.TimeStampCurrent = value;
else if (tb == TB_Secure2)
s.TimeStampPrevious = value;
SAV.State.Edited = true;
}
}
private void SetDaycareSeed(IDaycareStorage daycare, string filterText)
@ -1357,7 +1335,6 @@ private void ToggleViewSubEditors(SaveFile sav)
private void ToggleViewMisc(SaveFile sav)
{
// Generational Interface
ToggleSecrets(sav, HideSecretDetails);
B_VerifyCHK.Visible = SAV.State.Exportable;
Menu_ExportBAK.Visible = SAV.State.Exportable && SAV.Metadata.FilePath is not null;
@ -1374,27 +1351,6 @@ private void ToggleViewMisc(SaveFile sav)
{
L_SaveSlot.Visible = CB_SaveSlot.Visible = false;
}
if (sav is ISecureValueStorage s)
{
TB_Secure1.Text = s.TimeStampCurrent.ToString("X16");
TB_Secure2.Text = s.TimeStampPrevious.ToString("X16");
}
if (sav is IGameSync sync)
{
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 shouldShow = sav.State.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
@ -1615,7 +1571,7 @@ private void B_SearchBox_Click(object sender, EventArgs e)
return;
}
}
if (_searchForm is null || !_searchForm.IsSameSaveFile(SAV))
if (_searchForm?.IsSameSaveFile(SAV) != true)
_searchForm = CreateSearcher(SAV, EditEnv.PKMEditor);
// Set the searcher Position immediately to the right of this parent form, and vertically aligned tops of forms.

View File

@ -362,7 +362,7 @@ private void ReloadProgramSettings(PKHeXSettings settings, bool skipCore = false
C_SAV.ModifyPKM = PKME_Tabs.ModifyPKM = settings.SlotWrite.SetUpdatePKM;
C_SAV.FlagIllegal = settings.Display.FlagIllegal;
C_SAV.M.Hover.GlowHover = settings.Hover.HoverSlotGlowEdges;
PKME_Tabs.HideSecretValues = C_SAV.HideSecretDetails = settings.Privacy.HideSecretDetails;
PKME_Tabs.HideSecretValues = settings.Privacy.HideSecretDetails;
WinFormsUtil.DetectSaveFileOnFileOpen = settings.Startup.TryDetectRecentSave;
SelectablePictureBox.FocusBorderDeflate = GenderToggle.FocusBorderDeflate = settings.Display.FocusBorderDeflate;

View File

@ -471,7 +471,6 @@ Main.L_DC2=2:
Main.L_DynamaxLevel=Dynamax Level:
Main.L_ExtraBytes=Extra Bytes:
Main.L_FormArgument=Form Argument:
Main.L_GameSync=Spielsynchro ID:
Main.L_HeartGauge=Crypto-Meter:
Main.L_Height=Höhe:
Main.L_HomeTracker=HOME Tracker:
@ -485,8 +484,6 @@ Main.L_PokeStarFame=Fame:
Main.L_ReadOnlyOther=Dieser Tab ist nur lesbar.
Main.L_SaveSlot=Speicher Slot:
Main.L_Scale=Scale:
Main.L_Secure1=Secure Value 1:
Main.L_Secure2=Secure Value 2:
Main.L_ShadowID=Crypto ID:
Main.L_Spirit7b=Spirit:
Main.L_TeraTypeOriginal=Original Tera Typ:

View File

@ -471,7 +471,6 @@ Main.L_DC2=2:
Main.L_DynamaxLevel=Dynamax Level:
Main.L_ExtraBytes=Extra Bytes:
Main.L_FormArgument=Form Argument:
Main.L_GameSync=Game Sync ID:
Main.L_HeartGauge=Heart Gauge:
Main.L_Height=Height:
Main.L_HomeTracker=HOME Tracker:
@ -485,8 +484,6 @@ Main.L_PokeStarFame=Fame:
Main.L_ReadOnlyOther=This tab is read only.
Main.L_SaveSlot=Save Slot:
Main.L_Scale=Scale:
Main.L_Secure1=Secure Value 1:
Main.L_Secure2=Secure Value 2:
Main.L_ShadowID=Shadow ID:
Main.L_Spirit7b=Spirit:
Main.L_TeraTypeOriginal=Original Tera Type:

View File

@ -471,7 +471,6 @@ Main.L_DC2=2:
Main.L_DynamaxLevel=Nivel Dinamax:
Main.L_ExtraBytes=Bytes extras:
Main.L_FormArgument=Forma:
Main.L_GameSync=ID de Sincronización:
Main.L_HeartGauge=Medidor de Corazón:
Main.L_Height=Altura:
Main.L_HomeTracker=Rastreador HOME:
@ -485,8 +484,6 @@ Main.L_PokeStarFame=Fame:
Main.L_ReadOnlyOther=Sólo lectura.
Main.L_SaveSlot=Ranura de guardado:
Main.L_Scale=Escala:
Main.L_Secure1=Valor seguro 1:
Main.L_Secure2=Valor seguro 2:
Main.L_ShadowID=ID Oscuro:
Main.L_Spirit7b=Spirit:
Main.L_TeraTypeOriginal=Teratipo original:

View File

@ -471,7 +471,6 @@ Main.L_DC2=2:
Main.L_DynamaxLevel=Nivel Dinamax:
Main.L_ExtraBytes=Bytes extras:
Main.L_FormArgument=Forma:
Main.L_GameSync=ID de Sincronización:
Main.L_HeartGauge=Medidor de Corazón:
Main.L_Height=Altura:
Main.L_HomeTracker=Rastreador HOME:
@ -485,8 +484,6 @@ Main.L_PokeStarFame=Salón:
Main.L_ReadOnlyOther=Sólo lectura.
Main.L_SaveSlot=Ranura de guardado:
Main.L_Scale=Escala:
Main.L_Secure1=Valor seguro 1:
Main.L_Secure2=Valor seguro 2:
Main.L_ShadowID=ID Oscuro:
Main.L_Spirit7b=Espíritu:
Main.L_TeraTypeOriginal=Teratipo original:

View File

@ -471,7 +471,6 @@ Main.L_DC2=2 :
Main.L_DynamaxLevel=Niveau Dynamax :
Main.L_ExtraBytes=Octets supplé. :
Main.L_FormArgument=Argument de forme :
Main.L_GameSync=ID de synchronisation de jeu :
Main.L_HeartGauge=Jauge cœur :
Main.L_Height=Taille :
Main.L_HomeTracker=Tracker HOME :
@ -485,8 +484,6 @@ Main.L_PokeStarFame=Prestige :
Main.L_ReadOnlyOther=Cet onglet est en lecture seule.
Main.L_SaveSlot=Sauvegarde :
Main.L_Scale=Échelle :
Main.L_Secure1=Valeur sécurité 1 :
Main.L_Secure2=Valeur sécurité 2 :
Main.L_ShadowID=ID Obscur :
Main.L_Spirit7b=Esprit :
Main.L_TeraTypeOriginal=Type Téra d'origine :

View File

@ -471,7 +471,6 @@ Main.L_DC2=2:
Main.L_DynamaxLevel=Livello Dynamax:
Main.L_ExtraBytes=Byte Extra:
Main.L_FormArgument=Form Argument:
Main.L_GameSync=Game Sync ID:
Main.L_HeartGauge=Cuore:
Main.L_Height=Altezza:
Main.L_HomeTracker=Monitoraggio HOME:
@ -485,8 +484,6 @@ Main.L_PokeStarFame=Fame:
Main.L_ReadOnlyOther=Questa sezione è di sola lettura.
Main.L_SaveSlot=Slot Salvataggio:
Main.L_Scale=Scala:
Main.L_Secure1=Secure Value 1:
Main.L_Secure2=Secure Value 2:
Main.L_ShadowID=ID Ombra:
Main.L_Spirit7b=Spirit:
Main.L_TeraTypeOriginal=Teratipo originale:

View File

@ -471,7 +471,6 @@ Main.L_DC2=2:
Main.L_DynamaxLevel=ダイマックスレベル:
Main.L_ExtraBytes=追加バイト
Main.L_FormArgument=フォルム変数
Main.L_GameSync=ゲームシンク ID:
Main.L_HeartGauge=リライブゲージ
Main.L_Height=高さ
Main.L_HomeTracker=HOME Tracker
@ -485,8 +484,6 @@ Main.L_PokeStarFame=Fame:
Main.L_ReadOnlyOther=このタブは読み取り専用です
Main.L_SaveSlot=セーブスロット:
Main.L_Scale=サイズ
Main.L_Secure1=Secure Value 1:
Main.L_Secure2=Secure Value 2:
Main.L_ShadowID=ダークポケモンID
Main.L_Spirit7b=Spirit:
Main.L_TeraTypeOriginal=元のテラスタイプ

View File

@ -471,7 +471,6 @@ Main.L_DC2=2:
Main.L_DynamaxLevel=다이맥스 레벨:
Main.L_ExtraBytes=추가 바이트:
Main.L_FormArgument=Form Argument:
Main.L_GameSync=게임싱크 ID:
Main.L_HeartGauge=배부름 게이지:
Main.L_Height=키:
Main.L_HomeTracker=HOME Tracker:
@ -485,8 +484,6 @@ Main.L_PokeStarFame=Fame:
Main.L_ReadOnlyOther=이 탭은 읽기 전용입니다.
Main.L_SaveSlot=세이브 슬롯:
Main.L_Scale=Scale:
Main.L_Secure1=보안 값 1:
Main.L_Secure2=보안 값 2:
Main.L_ShadowID=다크 ID:
Main.L_Spirit7b=Spirit:
Main.L_TeraTypeOriginal=Original Tera Type:

View File

@ -471,7 +471,6 @@ Main.L_DC2=2:
Main.L_DynamaxLevel=极巨等级:
Main.L_ExtraBytes=额外字节:
Main.L_FormArgument=形态参数:
Main.L_GameSync=游戏同步ID:
Main.L_HeartGauge=净化计:
Main.L_Height=身高:
Main.L_HomeTracker=HOME追踪:
@ -485,8 +484,6 @@ Main.L_PokeStarFame=名声:
Main.L_ReadOnlyOther=此选项卡不可编辑。
Main.L_SaveSlot=存档槽:
Main.L_Scale=大小:
Main.L_Secure1=安全值 1:
Main.L_Secure2=安全值 2:
Main.L_ShadowID=黑暗ID:
Main.L_Spirit7b=心情:
Main.L_TeraTypeOriginal=原始太晶属性:

View File

@ -471,7 +471,6 @@ Main.L_DC2=2:
Main.L_DynamaxLevel=極巨化等級:
Main.L_ExtraBytes=額外位元組:
Main.L_FormArgument=形態參數:
Main.L_GameSync=遊戲同步ID:
Main.L_HeartGauge=心靈計:
Main.L_Height=身高:
Main.L_HomeTracker=HOME追蹤碼:
@ -485,8 +484,6 @@ Main.L_PokeStarFame=Fame:
Main.L_ReadOnlyOther=此選項卡不可編輯。
Main.L_SaveSlot=儲存資料槽:
Main.L_Scale=尺寸:
Main.L_Secure1=安保值 1:
Main.L_Secure2=安保值 2:
Main.L_ShadowID=黑暗ID:
Main.L_Spirit7b=Spirit:
Main.L_TeraTypeOriginal=原始太晶屬性:

View File

@ -84,7 +84,6 @@ protected override void OnFormClosing(FormClosingEventArgs e)
Hide();
return;
}
CurrentSave = null;
SearchFilter = null;
base.OnFormClosing(e);
}
@ -137,7 +136,7 @@ private void B_Add_Click(object? sender, EventArgs e)
tb.AppendText(s);
}
public bool IsSameSaveFile(SaveFile sav) => CurrentSave is not null && CurrentSave == sav;
public bool IsSameSaveFile(SaveFile sav) => CurrentSave == sav;
public void ForceReset()
{