Extract SV Runtime Language get/set

Useful for get to check if things are misaligned in a save file. If future games continue doing this, then we can reuse the enum.
This commit is contained in:
Kurt 2025-01-02 19:54:46 -06:00
parent a41f32c66b
commit 92d49e858f
3 changed files with 36 additions and 26 deletions

View File

@ -6,6 +6,7 @@ namespace PKHeX.Core;
/// <summary>
/// Base class for a savegame data reader.
/// </summary>
[TypeConverter(typeof(ExpandableObjectConverter))]
public abstract class SaveBlock<T>(T sav, Memory<byte> raw) : IDataIndirect where T : SaveFile
{
protected readonly T SAV = sav;

View File

@ -46,36 +46,14 @@ public int Language
Data[0x07] = (byte)value;
// For runtime language, the game has different indexes (not even shifted like previous games, just different)
var runtimeLanguage = GetRuntimeLanguage((LanguageID)value);
SAV.SetValue(SaveBlockAccessor9SV.KGameLanguage, (int)runtimeLanguage); // Int32
RuntimeLanguageId = RuntimeLanguageExtensions.GetRuntimeLanguage((LanguageID)value);
}
}
private static RuntimeLanguage GetRuntimeLanguage(LanguageID value) => value switch
public RuntimeLanguage RuntimeLanguageId
{
LanguageID.Japanese => RuntimeLanguage.Japanese,
LanguageID.English => RuntimeLanguage.English,
LanguageID.Spanish => RuntimeLanguage.Spanish,
LanguageID.German => RuntimeLanguage.German,
LanguageID.French => RuntimeLanguage.French,
LanguageID.Italian => RuntimeLanguage.Italian,
LanguageID.Korean => RuntimeLanguage.Korean,
LanguageID.ChineseS => RuntimeLanguage.ChineseS,
LanguageID.ChineseT => RuntimeLanguage.ChineseT,
_ => RuntimeLanguage.English, // Default to English
};
private enum RuntimeLanguage
{
Japanese = 0,
English = 1,
Spanish = 2,
German = 3,
French = 4,
Italian = 5,
Korean = 6,
ChineseS = 7,
ChineseT = 8,
get => (RuntimeLanguage)SAV.GetValue<int>(SaveBlockAccessor9SV.KGameLanguage);
set => SAV.SetValue(SaveBlockAccessor9SV.KGameLanguage, (int)value);
}
private Span<byte> OriginalTrainerTrash => Data.Slice(0x10, 0x1A);

View File

@ -0,0 +1,31 @@
namespace PKHeX.Core;
public enum RuntimeLanguage
{
Japanese = 0,
English = 1,
Spanish = 2,
German = 3,
French = 4,
Italian = 5,
Korean = 6,
ChineseS = 7,
ChineseT = 8,
}
public static class RuntimeLanguageExtensions
{
public static RuntimeLanguage GetRuntimeLanguage(LanguageID value) => value switch
{
LanguageID.Japanese => RuntimeLanguage.Japanese,
LanguageID.English => RuntimeLanguage.English,
LanguageID.Spanish => RuntimeLanguage.Spanish,
LanguageID.German => RuntimeLanguage.German,
LanguageID.French => RuntimeLanguage.French,
LanguageID.Italian => RuntimeLanguage.Italian,
LanguageID.Korean => RuntimeLanguage.Korean,
LanguageID.ChineseS => RuntimeLanguage.ChineseS,
LanguageID.ChineseT => RuntimeLanguage.ChineseT,
_ => RuntimeLanguage.English, // Default to English
};
}