Fix 2 localization mis-mapped

tested 100k, no more thrown Exception's
This commit is contained in:
Kurt 2025-07-28 02:11:26 -05:00
parent fb814ac878
commit c331d97e89
15 changed files with 22 additions and 32 deletions

View File

@ -164,7 +164,7 @@ public sealed class LegalityCheckLocalization
public string FormEternalInvalid { get; set; } = "Invalid Eternal Flower encounter.";
public string FormInvalidGame { get; set; } = "Form cannot be obtained in origin game.";
public string FormInvalidNature { get; set; } = "Form cannot have this nature.";
public string FormInvalidRange { get; set; } = "Form Count is out of range. Expected <= {0}, got {1}.";
public string FormInvalidRange_01 { get; set; } = "Form Count is out of range. Expected <= {0}, got {1}.";
public string FormItem { get; set; } = "Held item matches Form.";
public string FormItemInvalid { get; set; } = "Held item does not match Form.";
public string FormParty { get; set; } = "Form cannot exist outside of Party.";
@ -408,7 +408,7 @@ public sealed class LegalityCheckLocalization
public string EncTradeShouldHaveEvolvedToSpecies_0 { get; set; } = "Trade Encounter should have evolved to species: {0}.";
public string EncGiftLanguageNotDistributed { get; set; } = "Gift Encounter was never distributed with this language.";
public string EncGiftRegionNotDistributed { get; set; } = "Gift Encounter was never distributed to this Console Region.";
public string FormInvalidRangeLEQ_0 { get; set; } = "Form Count is out of range. Expected <= {0}, got {1}.";
public string FormInvalidRangeLEQ_0F { get; set; } = "Form Count is out of range. Expected <= {0}, got {1}.";
public string MovesShouldMatchRelearnMoves { get; set; } = "Moves should exactly match Relearn Moves.";
public string MemoryStatEnjoyment_0 { get; set; } = "Enjoyment should be {0}.";
public string MemoryStatFullness_0 { get; set; } = "Fullness should be {0}.";

View File

@ -142,7 +142,6 @@ public static class LegalityCheckResultCodeExtensions
FormEternalInvalid => localization.FormEternalInvalid,
FormInvalidGame => localization.FormInvalidGame,
FormInvalidNature => localization.FormInvalidNature,
FormInvalidRange_0 => localization.FormInvalidRange,
FormItemMatches => localization.FormItem,
FormItemInvalid => localization.FormItemInvalid,
FormParty => localization.FormParty,
@ -207,7 +206,7 @@ public static class LegalityCheckResultCodeExtensions
FatefulMystery => localization.FatefulMystery,
FatefulMysteryMissing => localization.FatefulMysteryMissing,
FavoriteMarkingUnavailable => localization.FavoriteMarkingUnavailable,
FormInvalidRangeLEQ_0 => localization.FormInvalidRangeLEQ_0,
FormInvalidRangeLEQ_0F => localization.FormInvalidRangeLEQ_0F,
G1CatchRateChain => localization.G1CatchRateChain,
G1CatchRateEvo => localization.G1CatchRateEvo,
G1CatchRateItem => localization.G1CatchRateItem,

View File

@ -96,8 +96,8 @@ private string GetInternalString(CheckResult chk)
private string GetMemory(CheckResult chk, string template, LegalityCheckResultCode code)
{
if (code is < FirstMemoryWithValue)
return string.Format(template, chk.Value);
if (code < FirstMemoryWithValue)
return string.Format(template, GetTrainer(chk.Argument));
if (code is MemoryArgBadItem_H1)
return string.Format(template, GetTrainer(chk.Argument), GetSpeciesName(chk.Argument2));
if (code is MemoryArgBadMove_H1)
@ -111,8 +111,8 @@ private string GetMemory(CheckResult chk, string template, LegalityCheckResultCo
{
< FirstComplex => format, // why are you even here?
RibbonsInvalid_A => string.Format(format, GetRibbonMessage()),
WordFilterFlaggedPattern_01 => string.Format(format, (WordFilterType)chk.Argument, WordFilter.GetPattern((WordFilterType)chk.Argument, chk.Argument2)),
WordFilterInvalidCharacter_0 => string.Format(format, chk.Argument.ToString("X4")),
WordFilterFlaggedPattern_01 => string.Format(format, WordFilter.GetPattern((WordFilterType)chk.Argument, chk.Argument2), (WordFilterType)chk.Argument),
WordFilterInvalidCharacter_0 => string.Format(format, chk.Argument, chk.Argument.ToString("X4")),
AwakenedStatGEQ_01 => string.Format(format, chk.Argument, GetStatName(chk.Argument2)),
GanbaruStatLEQ_01 => string.Format(format, chk.Argument, GetStatName(chk.Argument2)),
@ -128,6 +128,7 @@ private string GetMemory(CheckResult chk, string template, LegalityCheckResultCo
StoredSlotSourceInvalid_0 => string.Format(format, (StorageSlotSource)chk.Argument),
HintEvolvesToRareForm_0 => string.Format(format, chk.Argument == 1),
FormInvalidRangeLEQ_0F => string.Format(format, chk.Argument, Analysis.Entity.Form),
OTLanguageShouldBe_0or1 => string.Format(format, GetLanguageName(chk.Argument), GetLanguageName(chk.Argument2), GetLanguageName(Analysis.Entity.Language)),

View File

@ -379,8 +379,6 @@ public enum LegalityCheckResultCode : ushort
EvoTradeReqOutsider_0,
FormArgumentLEQ_0,
FormArgumentGEQ_0,
FormInvalidRange_0,
FormInvalidRangeLEQ_0,
HyperTrainLevelGEQ_0, // level
IVAllEqual_0,
IVFlawlessCountGEQ_0, // count
@ -452,6 +450,7 @@ public enum LegalityCheckResultCode : ushort
StoredSlotSourceInvalid_0, // StorageSlotType
HintEvolvesToRareForm_0, // bool
FormInvalidRangeLEQ_0F,
OTLanguageShouldBe_0or1, // language,language

View File

@ -38,7 +38,7 @@ private CheckResult VerifyForm(LegalityAnalysis data)
var enc = data.EncounterMatch;
if (!pi.IsFormWithinRange(form) && !FormInfo.IsValidOutOfBoundsForm(species, form, enc.Generation))
return GetInvalid(FormInvalidRange_0, (ushort)(count - 1));
return GetInvalid(FormInvalidRangeLEQ_0F, (ushort)(count - 1));
switch ((Species)species)
{
@ -71,7 +71,7 @@ private CheckResult VerifyForm(LegalityAnalysis data)
break;
case Unown when enc.Generation == 2 && form >= 26:
return GetInvalid(FormInvalidRangeLEQ_0, 25);
return GetInvalid(FormInvalidRangeLEQ_0F, 25);
case Unown when enc.Generation == 3:
var expectUnown = EntityPID.GetUnownForm3(pk.EncryptionConstant);
if (expectUnown != form)
@ -105,7 +105,7 @@ private CheckResult VerifyForm(LegalityAnalysis data)
if (form > 1) // Ash Battle Bond active
return GetInvalid(FormBattle);
if (form != 0 && enc is not MysteryGift) // Form can not be bred for, MysteryGift already checked
return GetInvalid(FormInvalidRange_0, 0);
return GetInvalid(FormInvalidRangeLEQ_0F, 0);
break;
case Scatterbug or Spewpa or Vivillon when enc.Context is EntityContext.Gen9:

View File

@ -112,7 +112,6 @@
"FormEternalInvalid": "Invalid Eternal Flower encounter.",
"FormInvalidGame": "Form cannot be obtained in origin game.",
"FormInvalidNature": "Form cannot have this nature.",
"FormInvalidRange": "Form Count is out of range. Expected <= {0}, got {1}.",
"FormItem": "Held item matches Form.",
"FormItemInvalid": "Held item does not match Form.",
"FormParty": "Form cannot exist outside of Party.",
@ -322,7 +321,7 @@
"EncTradeShouldHaveEvolvedToSpecies_0": "Trade Encounter should have evolved to species: {0}.",
"EncGiftLanguageNotDistributed": "Gift Encounter was never distributed with this language.",
"EncGiftRegionNotDistributed": "Gift Encounter was never distributed to this Console Region.",
"FormInvalidRangeLEQ_0": "Form Count is out of range. Expected <= {0}, got {1}.",
"FormInvalidRangeLEQ_0F": "Form Count is out of range. Expected <= {0}, got {1}.",
"MovesShouldMatchRelearnMoves": "Moves should exactly match Relearn Moves.",
"MemoryStatEnjoyment_0": "Enjoyment should be {0}.",
"MemoryStatFullness_0": "Fullness should be {0}.",

View File

@ -112,7 +112,6 @@
"FormEternalInvalid": "Invalid Eternal Flower encounter.",
"FormInvalidGame": "Form cannot be obtained in origin game.",
"FormInvalidNature": "Form cannot have this nature.",
"FormInvalidRange": "Form Count is out of range. Expected <= {0}, got {1}.",
"FormItem": "Held item matches Form.",
"FormItemInvalid": "Held item does not match Form.",
"FormParty": "Form cannot exist outside of Party.",
@ -322,7 +321,7 @@
"EncTradeShouldHaveEvolvedToSpecies_0": "Trade Encounter should have evolved to species: {0}.",
"EncGiftLanguageNotDistributed": "Gift Encounter was never distributed with this language.",
"EncGiftRegionNotDistributed": "Gift Encounter was never distributed to this Console Region.",
"FormInvalidRangeLEQ_0": "Form Count is out of range. Expected <= {0}, got {1}.",
"FormInvalidRangeLEQ_0F": "Form Count is out of range. Expected <= {0}, got {1}.",
"MovesShouldMatchRelearnMoves": "Moves should exactly match Relearn Moves.",
"MemoryStatEnjoyment_0": "Enjoyment should be {0}.",
"MemoryStatFullness_0": "Fullness should be {0}.",

View File

@ -112,7 +112,6 @@
"FormEternalInvalid": "Encuentro con Flor Eterna inválido.",
"FormInvalidGame": "La forma no se puede obtener en el juego de origen.",
"FormInvalidNature": "La forma no puede tener esta Naturaleza.",
"FormInvalidRange": "Contador de forma fuera de rango. Se esperaba <= {0}, se obtuvo {1}.",
"FormItem": "El objeto equipado coincide con la forma.",
"FormItemInvalid": "El objeto equipado no coincide con la forma.",
"FormParty": "La forma no puede existir fuera del equipo.",
@ -322,7 +321,7 @@
"EncTradeShouldHaveEvolvedToSpecies_0": "Trade Encounter should have evolved to species: {0}.",
"EncGiftLanguageNotDistributed": "Gift Encounter was never distributed with this language.",
"EncGiftRegionNotDistributed": "Gift Encounter was never distributed to this Console Region.",
"FormInvalidRangeLEQ_0": "Form Count is out of range. Expected <= {0}, got {1}.",
"FormInvalidRangeLEQ_0F": "Contador de forma fuera de rango. Se esperaba <= {0}, se obtuvo {1}.",
"MovesShouldMatchRelearnMoves": "Moves should exactly match Relearn Moves.",
"MemoryStatEnjoyment_0": "Los mimos deberían ser {0}.",
"MemoryStatFullness_0": "La saciedad debería ser {0}.",

View File

@ -112,7 +112,6 @@
"FormEternalInvalid": "Rencontre de fleur éternelle invalide.",
"FormInvalidGame": "La Forme ne peut pas être obtenue dans le jeu actuel.",
"FormInvalidNature": "La Forme ne peut pas avoir cette nature.",
"FormInvalidRange": "Le nombre de forme est hors de portée. Attendu <= {0}, obtenu {1}.",
"FormItem": "L'objet tenu correspond à la forme.",
"FormItemInvalid": "L'objet tenu ne correspond pas à la forme.",
"FormParty": "La Forme ne peut pas exister en dehors de l'Équipe.",
@ -322,7 +321,7 @@
"EncTradeShouldHaveEvolvedToSpecies_0": "Trade Encounter should have evolved to species: {0}.",
"EncGiftLanguageNotDistributed": "Gift Encounter was never distributed with this language.",
"EncGiftRegionNotDistributed": "Gift Encounter was never distributed to this Console Region.",
"FormInvalidRangeLEQ_0": "Form Count is out of range. Expected <= {0}, got {1}.",
"FormInvalidRangeLEQ_0F": "Le nombre de forme est hors de portée. Attendu <= {0}, obtenu {1}.",
"MovesShouldMatchRelearnMoves": "Moves should exactly match Relearn Moves.",
"MemoryStatEnjoyment_0": "Le plaisir doit être {0}.",
"MemoryStatFullness_0": "La plénitude doit être {0}.",

View File

@ -112,7 +112,6 @@
"FormEternalInvalid": "Incontro per Fiore Eterno non valido.",
"FormInvalidGame": "La forma non può essere ottenuta nel gioco di origine.",
"FormInvalidNature": "La forma non può avere la natura.",
"FormInvalidRange": "Il conteggio della forma è fuori dall'indice. Valore previsto <= {0}, non {1}.",
"FormItem": "Lo strumento tenuto corrisponde alla forma.",
"FormItemInvalid": "Lo strumento tenuto non corrisponde alla forma.",
"FormParty": "La forma non può esistere al di fuori della squadra.",
@ -322,7 +321,7 @@
"EncTradeShouldHaveEvolvedToSpecies_0": "Trade Encounter should have evolved to species: {0}.",
"EncGiftLanguageNotDistributed": "Gift Encounter was never distributed with this language.",
"EncGiftRegionNotDistributed": "Gift Encounter was never distributed to this Console Region.",
"FormInvalidRangeLEQ_0": "Form Count is out of range. Expected <= {0}, got {1}.",
"FormInvalidRangeLEQ_0F": "Il conteggio della forma è fuori dall'indice. Valore previsto <= {0}, non {1}.",
"MovesShouldMatchRelearnMoves": "Moves should exactly match Relearn Moves.",
"MemoryStatEnjoyment_0": "Enjoyment dovrebbe essere {0}.",
"MemoryStatFullness_0": "Fullness dovrebbe essere {0}.",

View File

@ -112,7 +112,6 @@
"FormEternalInvalid": "無効なえいえんのはな個体。",
"FormInvalidGame": "このフォルムは元々のゲームでは獲得できません。",
"FormInvalidNature": "フォルムと性格が不一致です。",
"FormInvalidRange": "フォルムの数が範囲外です。予想:<= {0},取得したのは {1} です。",
"FormItem": "持ち物とフォルムは一致しています。",
"FormItemInvalid": "持ち物とフォルムが一致しません。",
"FormParty": "このフォルムは手持ちの外では存在できません。",
@ -322,7 +321,7 @@
"EncTradeShouldHaveEvolvedToSpecies_0": "Trade Encounter should have evolved to species: {0}.",
"EncGiftLanguageNotDistributed": "Gift Encounter was never distributed with this language.",
"EncGiftRegionNotDistributed": "Gift Encounter was never distributed to this Console Region.",
"FormInvalidRangeLEQ_0": "Form Count is out of range. Expected <= {0}, got {1}.",
"FormInvalidRangeLEQ_0F": "フォルムの数が範囲外です。予想:<= {0},取得したのは {1} です。",
"MovesShouldMatchRelearnMoves": "Moves should exactly match Relearn Moves.",
"MemoryStatEnjoyment_0": "Enjoyment should be {0}.",
"MemoryStatFullness_0": "まんぷく度は {0} である必要があります。",

View File

@ -112,7 +112,6 @@
"FormEternalInvalid": "사용할 수 없는 영원의 꽃 인카운터입니다.",
"FormInvalidGame": "이 양식은 원래 게임에서 얻을 수 없습니다.",
"FormInvalidNature": "Form cannot have this nature.",
"FormInvalidRange": "폼 번호가 범위를 벗어났습니다. 예상되는 폼 번호는 최대 {0}입니다. got {1}.",
"FormItem": "지닌 물건이 도구와 일치합니다.",
"FormItemInvalid": "지닌 물건이 도구와 일치하지 않습니다.",
"FormParty": "파티 밖에서 존재할 수 없는 폼입니다.",
@ -322,7 +321,7 @@
"EncTradeShouldHaveEvolvedToSpecies_0": "Trade Encounter should have evolved to species: {0}.",
"EncGiftLanguageNotDistributed": "Gift Encounter was never distributed with this language.",
"EncGiftRegionNotDistributed": "Gift Encounter was never distributed to this Console Region.",
"FormInvalidRangeLEQ_0": "Form Count is out of range. Expected <= {0}, got {1}.",
"FormInvalidRangeLEQ_0F": "폼 번호가 범위를 벗어났습니다. 예상되는 폼 번호는 최대 {0}입니다. got {1}.",
"MovesShouldMatchRelearnMoves": "Moves should exactly match Relearn Moves.",
"MemoryStatEnjoyment_0": "Enjoyment should be {0}.",
"MemoryStatFullness_0": "Fullness should be {0}.",

View File

@ -112,7 +112,6 @@
"FormEternalInvalid": "永恒之花相遇非法。",
"FormInvalidGame": "这种形态不能在来源版本中获得。",
"FormInvalidNature": "此形态无法拥有这种性格。",
"FormInvalidRange": "形态数超过最大值。 应该 <= {0}, 实际是 {1}。",
"FormItem": "持有物与形态一致。",
"FormItemInvalid": "持有物与形态不一致。",
"FormParty": "该形态不可能存在同行队伍外。",
@ -322,7 +321,7 @@
"EncTradeShouldHaveEvolvedToSpecies_0": "Trade Encounter should have evolved to species: {0}.",
"EncGiftLanguageNotDistributed": "Gift Encounter was never distributed with this language.",
"EncGiftRegionNotDistributed": "Gift Encounter was never distributed to this Console Region.",
"FormInvalidRangeLEQ_0": "Form Count is out of range. Expected <= {0}, got {1}.",
"FormInvalidRangeLEQ_0F": "形态数超过最大值。 应该 <= {0}, 实际是 {1}。",
"MovesShouldMatchRelearnMoves": "Moves should exactly match Relearn Moves.",
"MemoryStatEnjoyment_0": "享受度应该为{0}。",
"MemoryStatFullness_0": "饱腹度应该为{0}。",

View File

@ -112,7 +112,6 @@
"FormEternalInvalid": "永恆之花遇見不合法。",
"FormInvalidGame": "此形態不能於出身游戲中獲得。",
"FormInvalidNature": "此形態無法擁有該種性格。",
"FormInvalidRange": "形態數超過最大值。 應該 <=「 {0} 」, 實際是「 {1} 」。",
"FormItem": "持有物與形態匹配。",
"FormItemInvalid": "持有物與現時形態不匹配(可能此形態僅於持有某種持有物時生效)。",
"FormParty": "該形態不可於同行隊伍外存在。",
@ -322,7 +321,7 @@
"EncTradeShouldHaveEvolvedToSpecies_0": "Trade Encounter should have evolved to species: {0}.",
"EncGiftLanguageNotDistributed": "Gift Encounter was never distributed with this language.",
"EncGiftRegionNotDistributed": "Gift Encounter was never distributed to this Console Region.",
"FormInvalidRangeLEQ_0": "Form Count is out of range. Expected <= {0}, got {1}.",
"FormInvalidRangeLEQ_0F": "形態數超過最大值。 應該 <=「 {0} 」, 實際是「 {1} 」。",
"MovesShouldMatchRelearnMoves": "Moves should exactly match Relearn Moves.",
"MemoryStatEnjoyment_0": "Enjoyment should be {0}.",
"MemoryStatFullness_0": "飽腹度應該為{0}。",

View File

@ -65,7 +65,7 @@ private static List<string> GetSaveFileErrata(this SaveFile sav, PKM pk, IBasicS
errata.Add($"{MsgIndexSpeciesGame} {strings.Species[pk.Species]}");
if (!sav.Personal[pk.Species].IsFormWithinRange(pk.Form) && !FormInfo.IsValidOutOfBoundsForm(pk.Species, pk.Form, pk.Generation))
errata.Add(string.Format(legality.FormInvalidRange, Math.Max(0, sav.Personal[pk.Species].FormCount - 1), pk.Form));
errata.Add(string.Format(legality.FormInvalidRange_01, Math.Max(0, sav.Personal[pk.Species].FormCount - 1), pk.Form));
var movestr = strings.Move;
for (int i = 0; i < 4; i++)