diff --git a/PKHeX.Core/PKM/CK3.cs b/PKHeX.Core/PKM/CK3.cs
index 45afc3dfe..83e3dbcee 100644
--- a/PKHeX.Core/PKM/CK3.cs
+++ b/PKHeX.Core/PKM/CK3.cs
@@ -25,10 +25,10 @@ public CK3(byte[] decryptedData = null, string ident = null)
if (Data.Length != SIZE_PARTY)
Array.Resize(ref Data, SIZE_PARTY);
}
- public override PKM Clone() { return new CK3(Data); }
+ public override PKM Clone() => new CK3(Data);
- public override string GetString(int Offset, int Count) => StringConverter.GetBEString3(Data, Offset, Count);
- public override byte[] SetString(string value, int maxLength) => StringConverter.SetBEString3(value, maxLength);
+ private string GetString(int Offset, int Count) => StringConverter.GetBEString3(Data, Offset, Count);
+ private byte[] SetString(string value, int maxLength) => StringConverter.SetBEString3(value, maxLength);
// Trash Bytes
public override byte[] Nickname_Trash { get => GetData(0x2E, 20); set { if (value?.Length == 20) value.CopyTo(Data, 0x2E); } }
diff --git a/PKHeX.Core/PKM/PK1.cs b/PKHeX.Core/PKM/PK1.cs
index 7bcca8bb9..86995c902 100644
--- a/PKHeX.Core/PKM/PK1.cs
+++ b/PKHeX.Core/PKM/PK1.cs
@@ -22,8 +22,8 @@ public class PK1 : PKM
internal const int STRLEN_U = 11;
private int StringLength => Japanese ? STRLEN_J : STRLEN_U;
- public override string GetString(int Offset, int Count) => StringConverter.GetString1(Data, Offset, Count, Japanese);
- public override byte[] SetString(string value, int maxLength) => StringConverter.SetString1(value, maxLength, Japanese);
+ private string GetString(int Offset, int Count) => StringConverter.GetString1(Data, Offset, Count, Japanese);
+ private byte[] SetString(string value, int maxLength) => StringConverter.SetString1(value, maxLength, Japanese);
// Trash Bytes
public override byte[] Nickname_Trash { get => nick; set { if (value?.Length == nick.Length) nick = value; } }
diff --git a/PKHeX.Core/PKM/PK2.cs b/PKHeX.Core/PKM/PK2.cs
index 023468354..3be3c1f00 100644
--- a/PKHeX.Core/PKM/PK2.cs
+++ b/PKHeX.Core/PKM/PK2.cs
@@ -23,14 +23,14 @@ public class PK2 : PKM
private int StringLength => Japanese ? STRLEN_J : STRLEN_U;
public override bool Korean => !Japanese && otname[0] <= 0xB;
- public override string GetString(int Offset, int Count)
+ private string GetString(int Offset, int Count)
{
if (Korean)
return StringConverter.GetString2KOR(Data, Offset, Count);
return StringConverter.GetString1(Data, Offset, Count, Japanese);
}
- public override byte[] SetString(string value, int maxLength)
+ private byte[] SetString(string value, int maxLength)
{
if (Korean)
return StringConverter.SetString2KOR(value, maxLength);
diff --git a/PKHeX.Core/PKM/PK3.cs b/PKHeX.Core/PKM/PK3.cs
index 737d8d36b..83b38cf02 100644
--- a/PKHeX.Core/PKM/PK3.cs
+++ b/PKHeX.Core/PKM/PK3.cs
@@ -21,10 +21,10 @@ public PK3(byte[] decryptedData = null, string ident = null)
if (Data.Length != SIZE_PARTY)
Array.Resize(ref Data, SIZE_PARTY);
}
- public override PKM Clone() { return new PK3(Data); }
+ public override PKM Clone() => new PK3(Data);
- public override string GetString(int Offset, int Count) => StringConverter.GetString3(Data, Offset, Count, Japanese);
- public override byte[] SetString(string value, int maxLength) => StringConverter.SetString3(value, maxLength, Japanese);
+ private string GetString(int Offset, int Count) => StringConverter.GetString3(Data, Offset, Count, Japanese);
+ private byte[] SetString(string value, int maxLength) => StringConverter.SetString3(value, maxLength, Japanese);
// Trash Bytes
public override byte[] Nickname_Trash { get => GetData(0x08, 10); set { if (value?.Length == 10) value.CopyTo(Data, 0x08); } }
diff --git a/PKHeX.Core/PKM/PK4.cs b/PKHeX.Core/PKM/PK4.cs
index 5f85b0057..736556734 100644
--- a/PKHeX.Core/PKM/PK4.cs
+++ b/PKHeX.Core/PKM/PK4.cs
@@ -22,10 +22,10 @@ public PK4(byte[] decryptedData = null, string ident = null)
if (Data.Length != SIZE_PARTY)
Array.Resize(ref Data, SIZE_PARTY);
}
- public override PKM Clone() { return new PK4(Data); }
+ public override PKM Clone() => new PK4(Data);
- public override string GetString(int Offset, int Count) => StringConverter.GetString4(Data, Offset, Count);
- public override byte[] SetString(string value, int maxLength) => StringConverter.SetString4(value, maxLength);
+ private string GetString(int Offset, int Count) => StringConverter.GetString4(Data, Offset, Count);
+ private byte[] SetString(string value, int maxLength) => StringConverter.SetString4(value, maxLength);
// Trash Bytes
public override byte[] Nickname_Trash { get => GetData(0x48, 22); set { if (value?.Length == 22) value.CopyTo(Data, 0x48); } }
diff --git a/PKHeX.Core/PKM/PK5.cs b/PKHeX.Core/PKM/PK5.cs
index face551bb..56d4b2250 100644
--- a/PKHeX.Core/PKM/PK5.cs
+++ b/PKHeX.Core/PKM/PK5.cs
@@ -22,10 +22,10 @@ public PK5(byte[] decryptedData = null, string ident = null)
if (Data.Length != SIZE_PARTY)
Array.Resize(ref Data, SIZE_PARTY);
}
- public override PKM Clone() { return new PK5(Data); }
+ public override PKM Clone() => new PK5(Data);
- public override string GetString(int Offset, int Count) => StringConverter.GetString5(Data, Offset, Count);
- public override byte[] SetString(string value, int maxLength) => StringConverter.SetString5(value, maxLength);
+ private string GetString(int Offset, int Count) => StringConverter.GetString5(Data, Offset, Count);
+ private byte[] SetString(string value, int maxLength) => StringConverter.SetString5(value, maxLength);
// Trash Bytes
public override byte[] Nickname_Trash { get => GetData(0x48, 22); set { if (value?.Length == 22) value.CopyTo(Data, 0x48); } }
diff --git a/PKHeX.Core/PKM/PK6.cs b/PKHeX.Core/PKM/PK6.cs
index f1abd9658..949cdc666 100644
--- a/PKHeX.Core/PKM/PK6.cs
+++ b/PKHeX.Core/PKM/PK6.cs
@@ -23,10 +23,10 @@ public PK6(byte[] decryptedData = null, string ident = null)
if (Data.Length != SIZE_PARTY)
Array.Resize(ref Data, SIZE_PARTY);
}
- public override PKM Clone() { return new PK6(Data); }
+ public override PKM Clone() => new PK6(Data);
- public override string GetString(int Offset, int Count) => StringConverter.GetString6(Data, Offset, Count);
- public override byte[] SetString(string value, int maxLength) => StringConverter.SetString6(value, maxLength);
+ private string GetString(int Offset, int Count) => StringConverter.GetString6(Data, Offset, Count);
+ private byte[] SetString(string value, int maxLength) => StringConverter.SetString6(value, maxLength);
// Trash Bytes
public override byte[] Nickname_Trash { get => GetData(0x40, 24); set { if (value?.Length == 24) value.CopyTo(Data, 0x40); } }
diff --git a/PKHeX.Core/PKM/PK7.cs b/PKHeX.Core/PKM/PK7.cs
index 21609e7e9..2941ae2b5 100644
--- a/PKHeX.Core/PKM/PK7.cs
+++ b/PKHeX.Core/PKM/PK7.cs
@@ -24,10 +24,10 @@ public PK7(byte[] decryptedData = null, string ident = null)
if (Data.Length != SIZE_PARTY)
Array.Resize(ref Data, SIZE_PARTY);
}
- public override PKM Clone() { return new PK7(Data); }
+ public override PKM Clone() => new PK7(Data);
- public override string GetString(int Offset, int Count) => StringConverter.GetString7(Data, Offset, Count);
- public override byte[] SetString(string value, int maxLength) => StringConverter.SetString7(value, maxLength, Language);
+ private string GetString(int Offset, int Count) => StringConverter.GetString7(Data, Offset, Count);
+ private byte[] SetString(string value, int maxLength, bool chinese = false) => StringConverter.SetString7(value, maxLength, Language, chinese: chinese);
// Trash Bytes
public override byte[] Nickname_Trash { get => GetData(0x40, 24); set { if (value?.Length == 24) value.CopyTo(Data, 0x40); } }
@@ -218,7 +218,7 @@ public override uint PID
public uint FormDuration { get => BitConverter.ToUInt32(Data, 0x3C); set => BitConverter.GetBytes(value).CopyTo(Data, 0x3C); }
#endregion
#region Block B
- public override string Nickname { get => GetString(0x40, 24); set => SetString(value, 12).CopyTo(Data, 0x40); }
+ public override string Nickname { get => GetString(0x40, 24); set => SetString(value, 12, !IsNicknamed && Chinese).CopyTo(Data, 0x40); }
public override int Move1
{
get => BitConverter.ToUInt16(Data, 0x5A);
diff --git a/PKHeX.Core/PKM/PKM.cs b/PKHeX.Core/PKM/PKM.cs
index 8b34ac73f..719c2ed53 100644
--- a/PKHeX.Core/PKM/PKM.cs
+++ b/PKHeX.Core/PKM/PKM.cs
@@ -23,9 +23,6 @@ public abstract class PKM
public virtual byte[] DecryptedBoxData => Write().Take(SIZE_STORED).ToArray();
public virtual bool Valid { get => ChecksumValid && Sanity == 0; set { if (!value) return; Sanity = 0; RefreshChecksum(); } }
- public abstract string GetString(int Offset, int Length);
- public abstract byte[] SetString(string value, int maxLength);
-
// Trash Bytes
public abstract byte[] Nickname_Trash { get; set; }
public abstract byte[] OT_Trash { get; set; }
@@ -144,6 +141,7 @@ private byte[] Write()
public abstract int OT_Friendship { get; set; }
public virtual bool Japanese => Language == 1;
public virtual bool Korean => Language == 8;
+ public virtual bool Chinese => Language == 9 || Language == 10;
// Future Properties
public virtual int Met_Year { get => 0; set { } }
diff --git a/PKHeX.Core/PKM/StringConverter.cs b/PKHeX.Core/PKM/StringConverter.cs
index a24946575..b4c5d1aaa 100644
--- a/PKHeX.Core/PKM/StringConverter.cs
+++ b/PKHeX.Core/PKM/StringConverter.cs
@@ -452,11 +452,13 @@ public static string GetString7(byte[] data, int offset, int count)
/// Pad to given length
/// Pad with value
/// Encoded data.
- public static byte[] SetString7(string value, int maxLength, int language, int padTo = 0, ushort padWith = 0)
+ public static byte[] SetString7(string value, int maxLength, int language, int padTo = 0, ushort padWith = 0, bool chinese = false)
{
+ if (chinese)
+ value = ConvertString2BinG7_zh(value, language);
if (value.Length > maxLength)
value = value.Substring(0, 12); // Hard cap
- string temp = ConvertString2BinG7_zh(UnSanitizeString(value, 7), language == 10)
+ string temp = UnSanitizeString(value, 7)
.PadRight(value.Length + 1, '\0') // Null Terminator
.PadRight(padTo, (char)padWith);
return Encoding.Unicode.GetBytes(temp);
@@ -484,10 +486,11 @@ public static string GetG1Char(byte key, bool jp)
/// Unicode string.
/// Pkm language is Traditional Chinese.
/// In-game chinese string.
- private static string ConvertString2BinG7_zh(string inputstr, bool cht = false)
+ private static string ConvertString2BinG7_zh(string inputstr, int lang)
{
var str = new StringBuilder();
+ bool cht = lang == 10;
// A string cannot contain a mix of CHS and CHT characters.
bool IsCHT = inputstr.Any(chr => Gen7_CHT.Contains(chr) && !Gen7_CHS.Contains(chr));
IsCHT |= cht && !inputstr.Any(chr => Gen7_CHT.Contains(chr) ^ Gen7_CHS.Contains(chr)); // CHS and CHT have the same display name
diff --git a/PKHeX.Core/Saves/SAV7.cs b/PKHeX.Core/Saves/SAV7.cs
index 4a8cbe703..66e8d06aa 100644
--- a/PKHeX.Core/Saves/SAV7.cs
+++ b/PKHeX.Core/Saves/SAV7.cs
@@ -1307,7 +1307,7 @@ public override byte[] SetString(string value, int maxLength, int PadToSize = 0,
{
if (PadToSize == 0)
PadToSize = maxLength + 1;
- return StringConverter.SetString7(value, maxLength, PadToSize, PadWith);
+ return StringConverter.SetString7(value, maxLength, Language, PadToSize, PadWith);
}
}
}