diff --git a/PKHeX.Core/Legality/RibbonStrings.cs b/PKHeX.Core/Legality/RibbonStrings.cs
index ffc5ca92b..cf1f9ace0 100644
--- a/PKHeX.Core/Legality/RibbonStrings.cs
+++ b/PKHeX.Core/Legality/RibbonStrings.cs
@@ -12,13 +12,15 @@ public static class RibbonStrings
/// Array of strings that are tab separated with Property Name, \t, and Display Name.
public static void ResetDictionary(IEnumerable lines)
{
- RibbonNames.Clear();
foreach (var line in lines)
{
string[] split = line.Split('\t');
if (split.Length != 2)
continue;
- RibbonNames.Add(split[0], split[1]);
+ if (RibbonNames.ContainsKey(split[0]))
+ RibbonNames[split[0]] = split[1];
+ else
+ RibbonNames.Add(split[0], split[1]);
}
}
diff --git a/PKHeX.Core/PKM/FormConverter.cs b/PKHeX.Core/PKM/FormConverter.cs
index a01b7f49c..19f69bb7d 100644
--- a/PKHeX.Core/PKM/FormConverter.cs
+++ b/PKHeX.Core/PKM/FormConverter.cs
@@ -618,8 +618,7 @@ private static string[] GetFormsUnown(int generation)
380, 381, 445, 448, 460,
// AO
- 003, 009, 065, 094, 115, 127, 130, 142, 181, 212, 214, 229, 248, 257, 282, 303, 306, 308, 310, 354, 359,
- 380, 381, 445, 448, 460,
+ 015, 018, 080, 208, 254, 260, 302, 319, 323, 334, 362, 373, 376, 384, 428, 475, 531, 719,
};
}
}
diff --git a/PKHeX.Core/Resources/text/fr/text_Ribbons_fr.txt b/PKHeX.Core/Resources/text/fr/text_Ribbons_fr.txt
index 0335c74c9..b3c59fd53 100644
--- a/PKHeX.Core/Resources/text/fr/text_Ribbons_fr.txt
+++ b/PKHeX.Core/Resources/text/fr/text_Ribbons_fr.txt
@@ -1,49 +1,49 @@
-RibbonChampionKalos = Maître Kalos
-RibbonChampionG3Hoenn = Maître Hoenn (RSE)
-RibbonChampionSinnoh = Maître Sinnoh
-RibbonBestFriends = Affection
-RibbonTraining = Perfectionnement
-RibbonBattlerSkillful = Élite
-RibbonBattlerExpert = Génie
-RibbonEffort = Effort
-RibbonAlert = Alerte
-RibbonShock = Choc
-RibbonDowncast = Déprime
-RibbonCareless = Négligence
-RibbonRelax = Détente
-RibbonSnooze = Sieste
-RibbonSmile = Sourire
-RibbonGorgeous = Sublime
-RibbonRoyal = Royal
-RibbonGorgeousRoyal = Royal Sublime
-RibbonArtist = Artiste
-RibbonFootprint = Empreinte
-RibbonRecord = Record
-RibbonLegend = Légende
-RibbonCountry = Pays
-RibbonNational = National
-RibbonEarth = Terre
-RibbonWorld = Monde
-RibbonClassic = Classique
-RibbonPremier = Premier
-RibbonEvent = Événement
-RibbonBirthday = Anniversaire
-RibbonSpecial = Spécial
-RibbonSouvenir = Souvenir
-RibbonWishing = Souhait
-RibbonChampionBattle = Vainqueur Championnat
-RibbonChampionRegional = Champion Régional
-RibbonChampionNational = Champion National
-RibbonChampionWorld = Champion du Monde
-RibbonCountMemoryContest = Souvenir Concours
-RibbonCountMemoryBattle = Souvenir Combat
-RibbonChampionG6Hoenn = Hoenn Champion (ORAS)
-RibbonContestStar = Contest Star
-RibbonMasterCoolness = Coolness Master
-RibbonMasterBeauty = Beauty Master
-RibbonMasterCuteness = Cuteness Master
-RibbonMasterCleverness = Cleverness Master
-RibbonMasterToughness = Toughness Master
+RibbonChampionKalos Maître Kalos
+RibbonChampionG3Hoenn Maître Hoenn (RSE)
+RibbonChampionSinnoh Maître Sinnoh
+RibbonBestFriends Affection
+RibbonTraining Perfectionnement
+RibbonBattlerSkillful Élite
+RibbonBattlerExpert Génie
+RibbonEffort Effort
+RibbonAlert Alerte
+RibbonShock Choc
+RibbonDowncast Déprime
+RibbonCareless Négligence
+RibbonRelax Détente
+RibbonSnooze Sieste
+RibbonSmile Sourire
+RibbonGorgeous Sublime
+RibbonRoyal Royal
+RibbonGorgeousRoyal Royal Sublime
+RibbonArtist Artiste
+RibbonFootprint Empreinte
+RibbonRecord Record
+RibbonLegend Légende
+RibbonCountry Pays
+RibbonNational National
+RibbonEarth Terre
+RibbonWorld Monde
+RibbonClassic Classique
+RibbonPremier Premier
+RibbonEvent Événement
+RibbonBirthday Anniversaire
+RibbonSpecial Spécial
+RibbonSouvenir Souvenir
+RibbonWishing Souhait
+RibbonChampionBattle Vainqueur Championnat
+RibbonChampionRegional Champion Régional
+RibbonChampionNational Champion National
+RibbonChampionWorld Champion du Monde
+RibbonCountMemoryContest Souvenir Concours
+RibbonCountMemoryBattle Souvenir Combat
+RibbonChampionG6Hoenn Hoenn Champion (ORAS)
+RibbonContestStar Contest Star
+RibbonMasterCoolness Coolness Master
+RibbonMasterBeauty Beauty Master
+RibbonMasterCuteness Cuteness Master
+RibbonMasterCleverness Cleverness Master
+RibbonMasterToughness Toughness Master
RibbonChampionAlola Alola Champion
RibbonBattleRoyale Battle Royal Champion
RibbonBattleTreeGreat Battle Tree Great
@@ -100,4 +100,4 @@ RibbonCountG3Cool Cool
RibbonCountG3Beauty Beauty
RibbonCountG3Cute Cute
RibbonCountG3Smart Smart
-RibbonCountG3Tough = Tough
\ No newline at end of file
+RibbonCountG3Tough Tough
\ No newline at end of file
diff --git a/PKHeX.Core/Saves/SAV4.cs b/PKHeX.Core/Saves/SAV4.cs
index 3180c08dd..0c2fa3ee1 100644
--- a/PKHeX.Core/Saves/SAV4.cs
+++ b/PKHeX.Core/Saves/SAV4.cs
@@ -855,12 +855,22 @@ protected override void SetDex(PKM pkm)
return;
// Set the Language
- int lang = pkm.Language - 1;
- if (lang > 5) lang = 0; // no KOR
- if (lang < 0) lang = 1;
int PokeDexLanguageFlags = FormOffset1 + (HGSS ? 0x3C : 0x20);
+ int lang = GetGen4LanguageBitIndex(pkm.Language);
Data[PokeDexLanguageFlags + (DP ? dpl : pkm.Species)] |= (byte)(1 << lang);
}
+ private static int GetGen4LanguageBitIndex(int lang)
+ {
+ lang -= 1;
+ switch (lang) // invert ITA/GER
+ {
+ case 3: return 4;
+ case 4: return 3;
+ }
+ if (lang > 5)
+ return 0; // no KOR+
+ return lang < 0 ? 1 : lang; // default English
+ }
public override bool GetCaught(int species)
{