mirror of
https://github.com/kwsch/PKHeX.git
synced 2026-10-02 01:38:07 -05:00
Add ability to load blank japanese/korean save files
Detects the language of the currently loaded save file, and passes that info to the blank sav creator Use a trainer name of "1337" instead of PKHeX for any Japanese save file, because Gen1/2(/3?) character tables don't have regular ascii chars.
This commit is contained in:
@@ -564,15 +564,26 @@ private static GameVersion GetIsG8SAV(byte[] data)
|
||||
return sav;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a <see cref="LanguageID"/> that feels best for the save file's language.
|
||||
/// </summary>
|
||||
public static LanguageID GetSafeLanguage(SaveFile? sav) => sav switch
|
||||
{
|
||||
null => LanguageID.English,
|
||||
ILangDeviantSave s => s.Japanese ? LanguageID.Japanese : s.Korean ? LanguageID.Korean : LanguageID.English,
|
||||
_ => sav.Language <= Legal.GetMaxLanguageID(sav.Generation) ? (LanguageID)sav.Language : LanguageID.English,
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Creates an instance of a SaveFile with a blank base.
|
||||
/// </summary>
|
||||
/// <param name="game">Version to create the save file for.</param>
|
||||
/// <param name="trainerName">Trainer Name</param>
|
||||
/// <param name="language">Language to initialize with</param>
|
||||
/// <returns>Blank save file from the requested game, null if no game exists for that <see cref="GameVersion"/>.</returns>
|
||||
public static SaveFile GetBlankSAV(GameVersion game, string trainerName)
|
||||
public static SaveFile GetBlankSAV(GameVersion game, string trainerName, LanguageID language = LanguageID.English)
|
||||
{
|
||||
var SAV = GetBlankSAV(game);
|
||||
var SAV = GetBlankSAV(game, language);
|
||||
SAV.Game = (int)game;
|
||||
SAV.OT = trainerName;
|
||||
|
||||
@@ -587,7 +598,7 @@ public static SaveFile GetBlankSAV(GameVersion game, string trainerName)
|
||||
SAV.TID = 12345;
|
||||
SAV.SID = 54321;
|
||||
}
|
||||
SAV.Language = (int)LanguageID.English; // English
|
||||
SAV.Language = (int)language;
|
||||
|
||||
// Only set geolocation data for 3DS titles
|
||||
if (SAV is IRegionOrigin o)
|
||||
@@ -600,8 +611,9 @@ public static SaveFile GetBlankSAV(GameVersion game, string trainerName)
|
||||
/// Creates an instance of a SaveFile with a blank base.
|
||||
/// </summary>
|
||||
/// <param name="game">Version to create the save file for.</param>
|
||||
/// <param name="language">Save file language to initialize for</param>
|
||||
/// <returns>Blank save file from the requested game, null if no game exists for that <see cref="GameVersion"/>.</returns>
|
||||
private static SaveFile GetBlankSAV(GameVersion game)
|
||||
private static SaveFile GetBlankSAV(GameVersion game, LanguageID language)
|
||||
{
|
||||
switch (game)
|
||||
{
|
||||
@@ -611,23 +623,23 @@ private static SaveFile GetBlankSAV(GameVersion game)
|
||||
case StadiumJ:
|
||||
return new SAV1StadiumJ();
|
||||
case Stadium:
|
||||
return new SAV1Stadium();
|
||||
return new SAV1Stadium(language == LanguageID.Japanese);
|
||||
|
||||
case GS: case GD: case SV:
|
||||
return new SAV2(version: GS);
|
||||
return new SAV2(version: GS, lang: language);
|
||||
case GSC: case C:
|
||||
return new SAV2(version: C);
|
||||
return new SAV2(version: C, lang: language);
|
||||
case Stadium2:
|
||||
return new SAV2Stadium();
|
||||
|
||||
case R: case S: case E: case FR: case LG:
|
||||
return new SAV3(version: game);
|
||||
return new SAV3(version: game, language == LanguageID.Japanese);
|
||||
case FRLG:
|
||||
return new SAV3(version: FR);
|
||||
return new SAV3(version: FR, language == LanguageID.Japanese);
|
||||
case RS:
|
||||
return new SAV3(version: R);
|
||||
return new SAV3(version: R, language == LanguageID.Japanese);
|
||||
case RSE:
|
||||
return new SAV3(version: E);
|
||||
return new SAV3(version: E, language == LanguageID.Japanese);
|
||||
|
||||
case CXD:
|
||||
case COLO:
|
||||
@@ -678,11 +690,12 @@ private static SaveFile GetBlankSAV(GameVersion game)
|
||||
/// </summary>
|
||||
/// <param name="generation">Generation of the Save File.</param>
|
||||
/// <param name="trainerName">Trainer Name</param>
|
||||
/// <param name="language">Save file language to initialize for</param>
|
||||
/// <returns>Save File for that generation.</returns>
|
||||
public static SaveFile GetBlankSAV(int generation, string trainerName)
|
||||
public static SaveFile GetBlankSAV(int generation, string trainerName, LanguageID language = LanguageID.English)
|
||||
{
|
||||
var ver = GameUtil.GetVersion(generation);
|
||||
return GetBlankSAV(ver, trainerName);
|
||||
return GetBlankSAV(ver, trainerName, language);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -219,9 +219,11 @@ private void FormLoadInitialFiles(string[] args)
|
||||
|
||||
private void LoadBlankSaveFile(GameVersion ver)
|
||||
{
|
||||
var sav = SaveUtil.GetBlankSAV(ver, "PKHeX");
|
||||
var lang = SaveUtil.GetSafeLanguage(C_SAV?.SAV);
|
||||
var tr = lang != LanguageID.Japanese ? "PKHeX" : "1337";
|
||||
var sav = SaveUtil.GetBlankSAV(ver, tr, lang);
|
||||
if (sav.Version == GameVersion.Invalid) // will fail to load
|
||||
sav = SaveUtil.GetBlankSAV((GameVersion)GameInfo.VersionDataSource.Max(z => z.Value), "PKHeX");
|
||||
sav = SaveUtil.GetBlankSAV((GameVersion)GameInfo.VersionDataSource.Max(z => z.Value), tr, lang);
|
||||
OpenSAV(sav, null);
|
||||
C_SAV.SAV.Edited = false; // Prevents form close warning from showing until changes are made
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user