Unroll some loops, reduce allocations a little for hacked eggs

This commit is contained in:
Kurt 2021-04-17 13:13:03 -07:00
parent 893f22a664
commit 5635e8f345
12 changed files with 137 additions and 127 deletions

View file

@ -157,7 +157,7 @@ namespace PKHeX.Core
if (info.EncounterMatch is EncounterEgg e)
{
return pkm.IsEgg
? VerifyPreRelearnEggBase(pkm, currentMoves, e)
? VerifyPreRelearnEggBase(currentMoves, e)
: ParseMovesWasEggPreRelearn(pkm, currentMoves, info, e);
}
@ -741,10 +741,10 @@ namespace PKHeX.Core
}
}
private static CheckMoveResult[] VerifyPreRelearnEggBase(PKM pkm, int[] currentMoves, EncounterEgg e)
private static CheckMoveResult[] VerifyPreRelearnEggBase(int[] currentMoves, EncounterEgg e)
{
CheckMoveResult[] result = new CheckMoveResult[4];
_ = VerifyRelearnMoves.VerifyEggMoveset(pkm, e, result, currentMoves, CurrentMove);
_ = VerifyRelearnMoves.VerifyEggMoveset(e, result, currentMoves, CurrentMove);
return result;
}

View file

@ -15,108 +15,120 @@ namespace PKHeX.Core
public static CheckResult[] VerifyRelearn(PKM pkm, IEncounterable enc, CheckResult[] result)
{
if (enc.Generation < 6 || (pkm is IBattleVersion {BattleVersion: not 0}))
if (ShouldNotHaveRelearnMoves(enc, pkm))
return VerifyRelearnNone(pkm, result);
return enc switch
{
IRelearn s when s.Relearn.Count > 0 => VerifyRelearnSpecifiedMoveset(pkm, s.Relearn, result),
EncounterEgg e => VerifyEggMoveset(pkm, e, result, pkm.RelearnMoves),
IRelearn s when s.Relearn.Count != 0 => VerifyRelearnSpecifiedMoveset(pkm, s.Relearn, result),
EncounterEgg e => VerifyEggMoveset(e, result, pkm.RelearnMoves),
EncounterSlot6AO z when pkm.RelearnMove1 != 0 && z.CanDexNav => VerifyRelearnDexNav(pkm, result),
_ => VerifyRelearnNone(pkm, result)
};
}
public static bool ShouldNotHaveRelearnMoves(IGeneration enc, PKM pkm) => enc.Generation < 6 || pkm is IBattleVersion {BattleVersion: not 0};
private static CheckResult[] VerifyRelearnSpecifiedMoveset(PKM pkm, IReadOnlyList<int> required, CheckResult[] result)
{
int[] relearn = pkm.RelearnMoves;
for (int i = 0; i < 4; i++)
{
result[i] = relearn[i] == required[i] ? DummyValid
: new CheckResult(Severity.Invalid, string.Format(LMoveFExpect_0, MoveStrings[required[i]]), CheckIdentifier.RelearnMove);
}
result[3] = CheckResult(pkm.RelearnMove4, required[3]);
result[2] = CheckResult(pkm.RelearnMove3, required[2]);
result[1] = CheckResult(pkm.RelearnMove2, required[1]);
result[0] = CheckResult(pkm.RelearnMove1, required[0]);
return result;
static CheckResult CheckResult(int move, int require)
{
if (move == require)
return DummyValid;
return new CheckResult(Severity.Invalid, string.Format(LMoveFExpect_0, MoveStrings[require]), CheckIdentifier.RelearnMove);
}
}
private static CheckResult[] VerifyRelearnDexNav(PKM pkm, CheckResult[] result)
{
int[] relearn = pkm.RelearnMoves;
// DexNav Pokémon can have 1 random egg move as a relearn move.
var baseSpec = EvoBase.GetBaseSpecies(pkm);
var firstRelearn = relearn[0];
var firstRelearn = pkm.RelearnMove1;
var eggMoves = MoveEgg.GetEggMoves(6, baseSpec.Species, baseSpec.Form, GameVersion.OR);
result[0] = Array.IndexOf(eggMoves, firstRelearn) == -1 // not found
? new CheckResult(Severity.Invalid, LMoveRelearnDexNav, CheckIdentifier.RelearnMove)
: DummyValid;
// All other relearn moves must be empty.
for (int i = 1; i < 4; i++)
result[i] = relearn[i] == 0 ? DummyValid : DummyNone;
result[3] = pkm.RelearnMove4 == 0 ? DummyValid : DummyNone;
result[2] = pkm.RelearnMove3 == 0 ? DummyValid : DummyNone;
result[1] = pkm.RelearnMove2 == 0 ? DummyValid : DummyNone;
return result;
}
private static CheckResult[] VerifyRelearnNone(PKM pkm, CheckResult[] result)
{
int[] RelearnMoves = pkm.RelearnMoves;
// No relearn moves should be present.
for (int i = 0; i < 4; i++)
result[i] = RelearnMoves[i] == 0 ? DummyValid : DummyNone;
result[3] = pkm.RelearnMove4 == 0 ? DummyValid : DummyNone;
result[2] = pkm.RelearnMove3 == 0 ? DummyValid : DummyNone;
result[1] = pkm.RelearnMove2 == 0 ? DummyValid : DummyNone;
result[0] = pkm.RelearnMove1 == 0 ? DummyValid : DummyNone;
return result;
}
internal static CheckResult[] VerifyEggMoveset(PKM pkm, EncounterEgg e, CheckResult[] result, int[] moves, CheckIdentifier type = CheckIdentifier.RelearnMove)
internal static CheckResult[] VerifyEggMoveset(EncounterEgg e, CheckResult[] result, int[] moves, CheckIdentifier type = CheckIdentifier.RelearnMove)
{
var origins = MoveBreed.Process(e.Generation, e.Species, e.Form, e.Version, moves, out var valid);
int gen = e.Generation;
var origins = MoveBreed.Process(gen, e.Species, e.Form, e.Version, moves, out var valid);
if (valid)
{
for (int i = 0; i < result.Length; i++)
{
var msg = EggSourceUtil.GetSource(origins, e.Generation, i);
result[i] = new CheckMoveResult(MoveSource.EggMove, e.Generation, Severity.Valid, msg, type);
var msg = EggSourceUtil.GetSource(origins, gen, i);
result[i] = new CheckMoveResult(MoveSource.EggMove, gen, Severity.Valid, msg, type);
}
}
else
{
var fix = MoveBreed.GetExpectedMoves(moves, e);
var expected = MoveBreed.GetExpectedMoves(moves, e);
origins = MoveBreed.Process(gen, e.Species, e.Form, e.Version, expected, out _);
for (int i = 0; i < moves.Length; i++)
{
var msg = EggSourceUtil.GetSource(origins, e.Generation, i);
if (moves[i] == fix[i])
var msg = EggSourceUtil.GetSource(origins, gen, i);
var expect = expected[i];
CheckMoveResult line;
if (moves[i] == expect)
{
result[i] = new CheckMoveResult(MoveSource.EggMove, e.Generation, Severity.Valid, msg, type);
continue;
line = new CheckMoveResult(MoveSource.EggMove, gen, Severity.Valid, msg, type);
}
msg = string.Format(LMoveRelearnFExpect_0, GetMoveName(fix[i]) + $" ({msg})");
result[i] = new CheckMoveResult(MoveSource.EggMove, e.Generation, Severity.Invalid, msg, type);
else
{
msg = string.Format(LMoveRelearnFExpect_0, MoveStrings[expect], msg);
line = new CheckMoveResult(MoveSource.EggMove, gen, Severity.Invalid, msg, type);
}
result[i] = line;
}
}
var dupe = IsAnyRelearnMoveDuplicate(pkm);
if (dupe > 0)
result[dupe] = new CheckMoveResult(MoveSource.EggMove, e.Generation, Severity.Invalid, LMoveSourceDuplicate, type);
var dupe = IsAnyMoveDuplicate(moves);
if (dupe != NO_DUPE)
result[dupe] = new CheckMoveResult(MoveSource.EggMove, gen, Severity.Invalid, LMoveSourceDuplicate, type);
return result;
}
private static int IsAnyRelearnMoveDuplicate(PKM pk)
private const int NO_DUPE = -1;
private static int IsAnyMoveDuplicate(int[] move)
{
int m1 = pk.RelearnMove1;
int m2 = pk.RelearnMove2;
int m1 = move[0];
int m2 = move[1];
if (m1 != 0 && m1 == m2)
return 1;
int m3 = pk.RelearnMove3;
int m3 = move[2];
if (m3 != 0 && (m1 == m3 || m2 == m3))
return 2;
int m4 = pk.RelearnMove4;
int m4 = move[3];
if (m4 != 0 && (m1 == m4 || m2 == m4 || m3 == m4))
return 3;
return -1;
return NO_DUPE;
}
}
}

View file

@ -140,11 +140,11 @@ namespace PKHeX.Core
public static string LEncInvalid { get; set; } = "Unable to match an encounter from origin game.";
public static string LEncTradeChangedNickname { get; set; } = "Ingame Trade Nickname has been altered.";
public static string LEncTradeChangedOT { get; set; } = "Ingame Trade OT has been altered.";
public static string LEncTradeIndexBad { get; set; } = "Ingame Trade invalid index?";
public static string LEncTradeMatch { get; set; } = "Valid ingame trade.";
public static string LEncTradeUnchanged { get; set; } = "Ingame Trade OT and Nickname have not been altered.";
public static string LEncTradeChangedNickname { get; set; } = "In-game Trade Nickname has been altered.";
public static string LEncTradeChangedOT { get; set; } = "In-game Trade OT has been altered.";
public static string LEncTradeIndexBad { get; set; } = "In-game Trade invalid index?";
public static string LEncTradeMatch { get; set; } = "Valid In-game trade.";
public static string LEncTradeUnchanged { get; set; } = "In-game Trade OT and Nickname have not been altered.";
public static string LEncStaticMatch { get; set; } = "Valid gift/static encounter.";
public static string LEncStaticPIDShiny { get; set; } = "Static Encounter shiny mismatch.";
@ -158,9 +158,9 @@ namespace PKHeX.Core
public static string LEncUnreleasedPtDarkrai { get; set; } = "Non Platinum Darkrai from Newmoon Island. Unreleased event.";
public static string LEncUnreleasedPtShaymin { get; set; } = "Non Platinum Shaymin from Flower Paradise. Unreleased event.";
public static string LEReaderAmerica { get; set; } = "American E-Reader Berry in Japanese savegame.";
public static string LEReaderAmerica { get; set; } = "American E-Reader Berry in Japanese save file.";
public static string LEReaderInvalid { get; set; } = "Invalid E-Reader Berry.";
public static string LEReaderJapan { get; set; } = "Japanese E-Reader Berry in international savegame.";
public static string LEReaderJapan { get; set; } = "Japanese E-Reader Berry in international save file.";
public static string LEffort2Remaining { get; set; } = "2 EVs remaining.";
public static string LEffortAbove252 { get; set; } = "EVs cannot go above 252.";
@ -177,10 +177,10 @@ namespace PKHeX.Core
public static string LEvoTradeReqOutsider { get; set; } = "Outsider {0} should have evolved into {1}.";
public static string LEvoTradeRequired { get; set; } = "Version Specific evolution requires a trade to opposite version. A Handling Trainer is required.";
public static string LFateful { get; set; } = "Special ingame Fateful Encounter.";
public static string LFateful { get; set; } = "Special In-game Fateful Encounter.";
public static string LFatefulGiftMissing { get; set; } = "Fateful Encounter with no matching Encounter. Has the Mystery Gift data been contributed?";
public static string LFatefulInvalid { get; set; } = "Fateful Encounter should not be checked.";
public static string LFatefulMissing { get; set; } = "Special ingame Fateful Encounter flag missing.";
public static string LFatefulMissing { get; set; } = "Special In-game Fateful Encounter flag missing.";
public static string LFatefulMystery { get; set; } = "Mystery Gift Fateful Encounter.";
public static string LFatefulMysteryMissing { get; set; } = "Mystery Gift Fateful Encounter flag missing.";
@ -237,7 +237,7 @@ namespace PKHeX.Core
public static string LG2InvalidTilePark { get; set; } = "National Park fishing encounter. Unreachable Water tiles.";
public static string LG2InvalidTileR14 { get; set; } = "Kanto Route 14 fishing encounter. Unreachable Water tiles.";
public static string LG2InvalidTileSafari { get; set; } = "Generation 2 Safari Zone fishing encounter. Unreachable zone.";
public static string LG2InvalidTileTreeID { get; set; } = "Found an unreacheable tree for Crystal headbutt encounter that matches OTID.";
public static string LG2InvalidTileTreeID { get; set; } = "Found an unreachable tree for Crystal headbutt encounter that matches OTID.";
public static string LG2InvalidTileTreeNotFound { get; set; } = "Could not find a tree for Crystal headbutt encounter that matches OTID.";
public static string LG2TreeID { get; set; } = "Found a tree for Crystal headbutt encounter that matches OTID.";
public static string LG2OTGender { get; set; } = "OT from Virtual Console games other than Crystal cannot be female.";
@ -250,8 +250,8 @@ namespace PKHeX.Core
public static string LG5OTGenderN { get; set; } = "N's Pokémon must have a male OT gender.";
public static string LG5PIDShinyGrotto { get; set; } = "Hidden Grotto captures cannot be shiny.";
public static string LG5PIDShinyN { get; set; } = "N's Pokémon cannot be shiny.";
public static string LG5SparkleInvalid { get; set; } = "Special ingame N's Sparkle flag should not be checked.";
public static string LG5SparkleRequired { get; set; } = "Special ingame N's Sparkle flag missing.";
public static string LG5SparkleInvalid { get; set; } = "Special In-game N's Sparkle flag should not be checked.";
public static string LG5SparkleRequired { get; set; } = "Special In-game N's Sparkle flag missing.";
public static string LGenderInvalidNone { get; set; } = "Genderless Pokémon should not have a gender.";
public static string LGeoBadOrder { get; set; } = "GeoLocation Memory: Gap/Blank present.";
@ -352,7 +352,7 @@ namespace PKHeX.Core
public static string LMoveRelearnDexNav { get; set; } = "Not an expected DexNav move.";
public static string LMoveRelearnEgg { get; set; } = "Base Egg move.";
public static string LMoveRelearnEggMissing { get; set; } = "Base Egg move missing.";
public static string LMoveRelearnFExpect_0 { get; set; } = "Expected the following Relearn Moves: {0}";
public static string LMoveRelearnFExpect_0 { get; set; } = "Expected the following Relearn Moves: {0} ({1}";
public static string LMoveRelearnFMiss_0 { get; set; } = "Relearn Moves missing: {0}";
public static string LMoveRelearnInvalid { get; set; } = "Not an expected Relearnable move.";
public static string LMoveRelearnNone { get; set; } = "Expected no Relearn Move in slot.";
@ -440,7 +440,7 @@ namespace PKHeX.Core
public static string LTransferMoveG4HM { get; set; } = "Defog and Whirlpool. One of the two moves should have been removed before transferred to Generation 5.";
public static string LTransferMoveHM { get; set; } = "Generation {0} HM. Should have been removed before transferred to Generation {1}.";
public static string LTransferNature { get; set; } = "Invalid Nature for transfer Experience.";
public static string LTransferOriginFInvalid0_1 { get; set; } = "{0} origin cannot exist in the currently loaded ({1}) savegame.";
public static string LTransferOriginFInvalid0_1 { get; set; } = "{0} origin cannot exist in the currently loaded ({1}) save file.";
public static string LTransferPIDECBitFlip { get; set; } = "PID should be equal to EC [with top bit flipped]!";
public static string LTransferPIDECEquals { get; set; } = "PID should be equal to EC!";
public static string LTransferPIDECXor { get; set; } = "Encryption Constant matches shinyxored PID.";

View file

@ -110,7 +110,7 @@ namespace PKHeX.Core
/// <remarks>Use <see cref="GetSuggestedRelearnMovesFromEncounter"/> instead of calling directly; this method just puts default values in without considering the final moveset.</remarks>
public static IReadOnlyList<int> GetSuggestedRelearn(this IEncounterable enc, PKM pkm)
{
if (ShouldNotHaveRelearnMoves(enc, pkm))
if (VerifyRelearnMoves.ShouldNotHaveRelearnMoves(enc, pkm))
return Empty;
return GetSuggestedRelearnInternal(enc, pkm);
@ -135,7 +135,7 @@ namespace PKHeX.Core
enc ??= info.EncounterOriginal;
var pkm = analysis.pkm;
if (ShouldNotHaveRelearnMoves(enc, pkm))
if (VerifyRelearnMoves.ShouldNotHaveRelearnMoves(enc, pkm))
return Empty;
if (enc is EncounterEgg or EncounterInvalid {EggEncounter: true})
@ -189,7 +189,5 @@ namespace PKHeX.Core
}
return MoveBreed.GetExpectedMoves(moves, enc);
}
private static bool ShouldNotHaveRelearnMoves(IGeneration enc, PKM pkm) => enc.Generation < 6 || pkm is IBattleVersion {BattleVersion: not 0};
}
}

View file

@ -100,11 +100,11 @@ LEncInvalid = Unable to match an encounter from origin game.
LEncStaticMatch = Valid gift/static encounter.
LEncStaticPIDShiny = Static Encounter shiny mismatch.
LEncStaticRelearn = Static encounter relearn move mismatch.
LEncTradeChangedNickname = Ingame Trade Nickname has been altered.
LEncTradeChangedOT = Ingame Trade OT has been altered.
LEncTradeIndexBad = Ingame Trade invalid index?
LEncTradeMatch = Valid ingame trade.
LEncTradeUnchanged = Ingame Trade OT and Nickname have not been altered.
LEncTradeChangedNickname = In-game Trade Nickname has been altered.
LEncTradeChangedOT = In-game Trade OT has been altered.
LEncTradeIndexBad = In-game Trade invalid index?
LEncTradeMatch = Valid in-game trade.
LEncTradeUnchanged = In-game Trade OT and Nickname have not been altered.
LEncTypeMatch = Encounter Type matches encounter.
LEncTypeMismatch = Encounter Type does not match encounter.
LEncUnreleased = Unreleased event.
@ -112,17 +112,17 @@ LEncUnreleasedEMewJP = Non japanese Mew from Faraway Island. Unreleased event.
LEncUnreleasedHoOArceus = Arceus from Hall of Origin. Unreleased event.
LEncUnreleasedPtDarkrai = Non Platinum Darkrai from Newmoon Island. Unreleased event.
LEncUnreleasedPtShaymin = Non Platinum Shaymin from Flower Paradise. Unreleased event.
LEReaderAmerica = American E-Reader Berry in Japanese savegame.
LEReaderAmerica = American E-Reader Berry in Japanese save file.
LEReaderInvalid = Invalid E-Reader Berry.
LEReaderJapan = Japanese E-Reader Berry in international savegame.
LEReaderJapan = Japanese E-Reader Berry in international save file.
LEvoInvalid = Evolution not valid (or level/trade evolution unsatisfied).
LEvoTradeReq = In-game trade {0} should have evolved into {1}.
LEvoTradeReqOutsider = Outsider {0} should have evolved into {1}.
LEvoTradeRequired = Version Specific evolution requires a trade to opposite version. A Handling Trainer is required.
LFateful = Special ingame Fateful Encounter.
LFateful = Special in-game Fateful Encounter.
LFatefulGiftMissing = Fateful Encounter with no matching Encounter. Has the Mystery Gift data been contributed?
LFatefulInvalid = Fateful Encounter should not be checked.
LFatefulMissing = Special ingame Fateful Encounter flag missing.
LFatefulMissing = Special in-game Fateful Encounter flag missing.
LFatefulMystery = Mystery Gift Fateful Encounter.
LFatefulMysteryMissing = Mystery Gift Fateful Encounter flag missing.
LFavoriteMarkingUnavailable = Favorite Marking is not available.
@ -176,7 +176,7 @@ LG1TypePorygonFail2 = Porygon with invalid Type B value.
LG2InvalidTilePark = National Park fishing encounter. Unreachable Water tiles.
LG2InvalidTileR14 = Kanto Route 14 fishing encounter. Unreachable Water tiles.
LG2InvalidTileSafari = Generation 2 Safari Zone fishing encounter. Unreachable zone.
LG2InvalidTileTreeID = Found an unreacheable tree for Crystal headbutt encounter that matches OTID.
LG2InvalidTileTreeID = Found an unreachable tree for Crystal headbutt encounter that matches OTID.
LG2InvalidTileTreeNotFound = Could not find a tree for Crystal headbutt encounter that matches OTID.
LG2OTGender = OT from Virtual Console games other than Crystal cannot be female.
LG2TreeID = Found a tree for Crystal headbutt encounter that matches OTID.
@ -188,8 +188,8 @@ LG5IVAll30 = All IVs of N's Pokémon should be 30.
LG5OTGenderN = N's Pokémon must have a male OT gender.
LG5PIDShinyGrotto = Hidden Grotto captures cannot be shiny.
LG5PIDShinyN = N's Pokémon cannot be shiny.
LG5SparkleInvalid = Special ingame N's Sparkle flag should not be checked.
LG5SparkleRequired = Special ingame N's Sparkle flag missing.
LG5SparkleInvalid = Special in-game N's Sparkle flag should not be checked.
LG5SparkleRequired = Special in-game N's Sparkle flag missing.
LGenderInvalidNone = Genderless Pokémon should not have a gender.
LGeoBadOrder = GeoLocation Memory: Gap/Blank present.
LGeoHardwareInvalid = Geolocation: Country is not in 3DS region.
@ -276,7 +276,7 @@ LMovePPTooHigh_0 = Move {0} PP is above the amount allowed.
LMoveRelearnDexNav = Not an expected DexNav move.
LMoveRelearnEgg = Base Egg move.
LMoveRelearnEggMissing = Base Egg move missing.
LMoveRelearnFExpect_0 = Expected the following Relearn Moves: {0}
LMoveRelearnFExpect_0 = Expected the following Relearn Moves: {0} ({1})
LMoveRelearnFMiss_0 = Relearn Moves missing: {0}
LMoveRelearnInvalid = Not an expected Relearnable move.
LMoveRelearnNone = Expected no Relearn Move in slot.
@ -357,7 +357,7 @@ LTransferMove = Incompatible transfer move.
LTransferMoveG4HM = Defog and Whirlpool. One of the two moves should have been removed before transferred to Generation 5.
LTransferMoveHM = Generation {0} HM. Should have been removed before transferred to Generation {1}.
LTransferNature = Invalid Nature for transfer Experience.
LTransferOriginFInvalid0_1 = {0} origin cannot exist in the currently loaded ({1}) savegame.
LTransferOriginFInvalid0_1 = {0} origin cannot exist in the currently loaded ({1}) save file.
LTransferPIDECBitFlip = PID should be equal to EC [with top bit flipped]!
LTransferPIDECEquals = PID should be equal to EC!
LTransferPIDECXor = Encryption Constant matches shinyxored PID.

View file

@ -100,11 +100,11 @@ LEncInvalid = Unable to match an encounter from origin game.
LEncStaticMatch = Valid gift/static encounter.
LEncStaticPIDShiny = Static Encounter shiny mismatch.
LEncStaticRelearn = Static encounter relearn move mismatch.
LEncTradeChangedNickname = Ingame Trade Nickname has been altered.
LEncTradeChangedOT = Ingame Trade OT has been altered.
LEncTradeIndexBad = Ingame Trade invalid index?
LEncTradeMatch = Valid ingame trade.
LEncTradeUnchanged = Ingame Trade OT and Nickname have not been altered.
LEncTradeChangedNickname = In-game Trade Nickname has been altered.
LEncTradeChangedOT = In-game Trade OT has been altered.
LEncTradeIndexBad = In-game Trade invalid index?
LEncTradeMatch = Valid in-game trade.
LEncTradeUnchanged = In-game Trade OT and Nickname have not been altered.
LEncTypeMatch = Encounter Type matches encounter.
LEncTypeMismatch = Encounter Type does not match encounter.
LEncUnreleased = Unreleased event.
@ -112,17 +112,17 @@ LEncUnreleasedEMewJP = Non japanese Mew from Faraway Island. Unreleased event.
LEncUnreleasedHoOArceus = Arceus from Hall of Origin. Unreleased event.
LEncUnreleasedPtDarkrai = Non Platinum Darkrai from Newmoon Island. Unreleased event.
LEncUnreleasedPtShaymin = Non Platinum Shaymin from Flower Paradise. Unreleased event.
LEReaderAmerica = American E-Reader Berry in Japanese savegame.
LEReaderAmerica = American E-Reader Berry in Japanese save file.
LEReaderInvalid = Invalid E-Reader Berry.
LEReaderJapan = Japanese E-Reader Berry in international savegame.
LEReaderJapan = Japanese E-Reader Berry in international save file.
LEvoInvalid = Evolution not valid (or level/trade evolution unsatisfied).
LEvoTradeReq = In-game trade {0} should have evolved into {1}.
LEvoTradeReqOutsider = Outsider {0} should have evolved into {1}.
LEvoTradeRequired = Version Specific evolution requires a trade to opposite version. A Handling Trainer is required.
LFateful = Special ingame Fateful Encounter.
LFateful = Special in-game Fateful Encounter.
LFatefulGiftMissing = Fateful Encounter with no matching Encounter. Has the Mystery Gift data been contributed?
LFatefulInvalid = Fateful Encounter should not be checked.
LFatefulMissing = Special ingame Fateful Encounter flag missing.
LFatefulMissing = Special in-game Fateful Encounter flag missing.
LFatefulMystery = Mystery Gift Fateful Encounter.
LFatefulMysteryMissing = Mystery Gift Fateful Encounter flag missing.
LFavoriteMarkingUnavailable = Favorite Marking is not available.
@ -176,7 +176,7 @@ LG1TypePorygonFail2 = Porygon with invalid Type B value.
LG2InvalidTilePark = National Park fishing encounter. Unreachable Water tiles.
LG2InvalidTileR14 = Kanto Route 14 fishing encounter. Unreachable Water tiles.
LG2InvalidTileSafari = Generation 2 Safari Zone fishing encounter. Unreachable zone.
LG2InvalidTileTreeID = Found an unreacheable tree for Crystal headbutt encounter that matches OTID.
LG2InvalidTileTreeID = Found an unreachable tree for Crystal headbutt encounter that matches OTID.
LG2InvalidTileTreeNotFound = Could not find a tree for Crystal headbutt encounter that matches OTID.
LG2OTGender = OT from Virtual Console games other than Crystal cannot be female.
LG2TreeID = Found a tree for Crystal headbutt encounter that matches OTID.
@ -188,8 +188,8 @@ LG5IVAll30 = All IVs of N's Pokémon should be 30.
LG5OTGenderN = N's Pokémon must have a male OT gender.
LG5PIDShinyGrotto = Hidden Grotto captures cannot be shiny.
LG5PIDShinyN = N's Pokémon cannot be shiny.
LG5SparkleInvalid = Special ingame N's Sparkle flag should not be checked.
LG5SparkleRequired = Special ingame N's Sparkle flag missing.
LG5SparkleInvalid = Special in-game N's Sparkle flag should not be checked.
LG5SparkleRequired = Special in-game N's Sparkle flag missing.
LGenderInvalidNone = Genderless Pokémon should not have a gender.
LGeoBadOrder = GeoLocation Memory: Gap/Blank present.
LGeoHardwareInvalid = Geolocation: Country is not in 3DS region.
@ -276,7 +276,7 @@ LMovePPTooHigh_0 = Move {0} PP is above the amount allowed.
LMoveRelearnDexNav = Not an expected DexNav move.
LMoveRelearnEgg = Base Egg move.
LMoveRelearnEggMissing = Base Egg move missing.
LMoveRelearnFExpect_0 = Expected the following Relearn Moves: {0}
LMoveRelearnFExpect_0 = Expected the following Relearn Moves: {0} ({1})
LMoveRelearnFMiss_0 = Relearn Moves missing: {0}
LMoveRelearnInvalid = Not an expected Relearnable move.
LMoveRelearnNone = Expected no Relearn Move in slot.
@ -357,7 +357,7 @@ LTransferMove = Incompatible transfer move.
LTransferMoveG4HM = Defog and Whirlpool. One of the two moves should have been removed before transferred to Generation 5.
LTransferMoveHM = Generation {0} HM. Should have been removed before transferred to Generation {1}.
LTransferNature = Invalid Nature for transfer Experience.
LTransferOriginFInvalid0_1 = {0} origin cannot exist in the currently loaded ({1}) savegame.
LTransferOriginFInvalid0_1 = {0} origin cannot exist in the currently loaded ({1}) save file.
LTransferPIDECBitFlip = PID should be equal to EC [with top bit flipped]!
LTransferPIDECEquals = PID should be equal to EC!
LTransferPIDECXor = Encryption Constant matches shinyxored PID.

View file

@ -276,7 +276,7 @@ LMovePPTooHigh_0 = Los PP del movimiento {0} están por encima de los permitidos
LMoveRelearnDexNav = No es un Movimiento de DexNav.
LMoveRelearnEgg = Movimiento Huevo base.
LMoveRelearnEggMissing = Faltan los Movimientos Huevo base.
LMoveRelearnFExpect_0 = Se esperaban los siguientes movimientos recordables: {0}
LMoveRelearnFExpect_0 = Se esperaban los siguientes movimientos recordables: {0} ({1})
LMoveRelearnFMiss_0 = Faltan movimientos recordables: {0}
LMoveRelearnInvalid = No es un Movimiento Recordable.
LMoveRelearnNone = No se esperaba un Movimiento Recordable en esta casilla.

View file

@ -102,7 +102,7 @@ LEncStaticPIDShiny = Pokémon shiny-locked défini comme étant chromatique.
LEncStaticRelearn = Static encounter relearn move mismatch.
LEncTradeChangedNickname = Le surnom du Pokémon reçu par échange in-game a été modifié.
LEncTradeChangedOT = Le DO du Pokémon reçu par échange in-game a été modifié.
LEncTradeIndexBad = Ingame Trade invalid index?
LEncTradeIndexBad = In-game Trade invalid index?
LEncTradeMatch = Échange in-game valide.
LEncTradeUnchanged = Le DO et le surnom d'un Pokémon lors d'un échange dans le jeu n'ont pas été modifiés.
LEncTypeMatch = Le type de rencontre correspond à la rencontre.
@ -112,9 +112,9 @@ LEncUnreleasedEMewJP = Non japanese Mew from Faraway Island. Unreleased event.
LEncUnreleasedHoOArceus = Arceus de Salle Originelle. Évènement non officialisé.
LEncUnreleasedPtDarkrai = Darkrai d'Île Nouvellelune hors Pokémon Platine. Évènement non officialisé.
LEncUnreleasedPtShaymin = Shaymin de Paradis Fleuri hors Pokémon Platine. Évènement non officialisé.
LEReaderAmerica = American E-Reader Berry in Japanese savegame.
LEReaderAmerica = American E-Reader Berry in Japanese save file.
LEReaderInvalid = Invalid E-Reader Berry.
LEReaderJapan = Japanese E-Reader Berry in international savegame.
LEReaderJapan = Japanese E-Reader Berry in international save file.
LEvoInvalid = Évolution invalide (conditions non satisfaites).
LEvoTradeReq = Le {0} échangé dans le jeu devrait évoluer vers {1}.
LEvoTradeReqOutsider = Le {0} étranger devrait évoluer en {1}.
@ -176,7 +176,7 @@ LG1TypePorygonFail2 = Porygon avec Type B invalide.
LG2InvalidTilePark = Rencontre par pêche dans le Parc National. Cases d'eau inatteignables.
LG2InvalidTileR14 = Rencontre par pêche à la Route 14 de Kanto. Cases d'eau inatteignables.
LG2InvalidTileSafari = Rencontre par pêche dans le Parc Safari de la 2ème génération. Zone inatteignable.
LG2InvalidTileTreeID = Found an unreacheable tree for Crystal headbutt encounter that matches OTID.
LG2InvalidTileTreeID = Found an unreachable tree for Crystal headbutt encounter that matches OTID.
LG2InvalidTileTreeNotFound = Could not find a tree for Crystal headbutt encounter that matches OTID.
LG2OTGender = OT from Virtual Console games other than Crystal cannot be female.
LG2TreeID = Found a tree for Crystal headbutt encounter that matches OTID.
@ -276,7 +276,7 @@ LMovePPTooHigh_0 = Move {0} PP is above the amount allowed.
LMoveRelearnDexNav = Not an expected DexNav move.
LMoveRelearnEgg = Base Egg move.
LMoveRelearnEggMissing = Base Egg move missing.
LMoveRelearnFExpect_0 = Capacités réapprises suivantes prévuess : {0}
LMoveRelearnFExpect_0 = Capacités réapprises suivantes prévuess : {0} ({1})
LMoveRelearnFMiss_0 = Capacités réapprises manquantess : {0}
LMoveRelearnInvalid = Not an expected Relearnable move.
LMoveRelearnNone = Pas de capacité réapprise prévue.

View file

@ -100,11 +100,11 @@ LEncInvalid = Unable to match an encounter from origin game.
LEncStaticMatch = Valid gift/static encounter.
LEncStaticPIDShiny = Static Encounter shiny mismatch.
LEncStaticRelearn = Static encounter relearn move mismatch.
LEncTradeChangedNickname = Ingame Trade Nickname has been altered.
LEncTradeChangedOT = Ingame Trade OT has been altered.
LEncTradeIndexBad = Ingame Trade invalid index?
LEncTradeMatch = Valid ingame trade.
LEncTradeUnchanged = Ingame Trade OT and Nickname have not been altered.
LEncTradeChangedNickname = In-game Trade Nickname has been altered.
LEncTradeChangedOT = In-game Trade OT has been altered.
LEncTradeIndexBad = In-game Trade invalid index?
LEncTradeMatch = Valid in-game trade.
LEncTradeUnchanged = In-game Trade OT and Nickname have not been altered.
LEncTypeMatch = Encounter Type matches encounter.
LEncTypeMismatch = Encounter Type does not match encounter.
LEncUnreleased = Unreleased event.
@ -112,17 +112,17 @@ LEncUnreleasedEMewJP = Non japanese Mew from Faraway Island. Unreleased event.
LEncUnreleasedHoOArceus = Arceus from Hall of Origin. Unreleased event.
LEncUnreleasedPtDarkrai = Non Platinum Darkrai from Newmoon Island. Unreleased event.
LEncUnreleasedPtShaymin = Non Platinum Shaymin from Flower Paradise. Unreleased event.
LEReaderAmerica = American E-Reader Berry in Japanese savegame.
LEReaderAmerica = American E-Reader Berry in Japanese save file.
LEReaderInvalid = Invalid E-Reader Berry.
LEReaderJapan = Japanese E-Reader Berry in international savegame.
LEReaderJapan = Japanese E-Reader Berry in international save file.
LEvoInvalid = Evolution not valid (or level/trade evolution unsatisfied).
LEvoTradeReq = In-game trade {0} should have evolved into {1}.
LEvoTradeReqOutsider = Outsider {0} should have evolved into {1}.
LEvoTradeRequired = Version Specific evolution requires a trade to opposite version. A Handling Trainer is required.
LFateful = Special ingame Fateful Encounter.
LFateful = Special in-game Fateful Encounter.
LFatefulGiftMissing = Fateful Encounter with no matching Encounter. Has the Mystery Gift data been contributed?
LFatefulInvalid = Fateful Encounter should not be checked.
LFatefulMissing = Special ingame Fateful Encounter flag missing.
LFatefulMissing = Special in-game Fateful Encounter flag missing.
LFatefulMystery = Mystery Gift Fateful Encounter.
LFatefulMysteryMissing = Mystery Gift Fateful Encounter flag missing.
LFavoriteMarkingUnavailable = Favorite Marking is not available.
@ -176,7 +176,7 @@ LG1TypePorygonFail2 = Porygon with invalid Type B value.
LG2InvalidTilePark = National Park fishing encounter. Unreachable Water tiles.
LG2InvalidTileR14 = Kanto Route 14 fishing encounter. Unreachable Water tiles.
LG2InvalidTileSafari = Generation 2 Safari Zone fishing encounter. Unreachable zone.
LG2InvalidTileTreeID = Found an unreacheable tree for Crystal headbutt encounter that matches OTID.
LG2InvalidTileTreeID = Found an unreachable tree for Crystal headbutt encounter that matches OTID.
LG2InvalidTileTreeNotFound = Could not find a tree for Crystal headbutt encounter that matches OTID.
LG2OTGender = OT from Virtual Console games other than Crystal cannot be female.
LG2TreeID = Found a tree for Crystal headbutt encounter that matches OTID.
@ -188,8 +188,8 @@ LG5IVAll30 = All IVs of N's Pokémon should be 30.
LG5OTGenderN = N's Pokémon must have a male OT gender.
LG5PIDShinyGrotto = Hidden Grotto captures cannot be shiny.
LG5PIDShinyN = N's Pokémon cannot be shiny.
LG5SparkleInvalid = Special ingame N's Sparkle flag should not be checked.
LG5SparkleRequired = Special ingame N's Sparkle flag missing.
LG5SparkleInvalid = Special in-game N's Sparkle flag should not be checked.
LG5SparkleRequired = Special in-game N's Sparkle flag missing.
LGenderInvalidNone = Genderless Pokémon should not have a gender.
LGeoBadOrder = GeoLocation Memory: Gap/Blank present.
LGeoHardwareInvalid = Geolocation: Country is not in 3DS region.
@ -276,7 +276,7 @@ LMovePPTooHigh_0 = Move {0} PP is above the amount allowed.
LMoveRelearnDexNav = Not an expected DexNav move.
LMoveRelearnEgg = Base Egg move.
LMoveRelearnEggMissing = Base Egg move missing.
LMoveRelearnFExpect_0 = Expected the following Relearn Moves: {0}
LMoveRelearnFExpect_0 = Expected the following Relearn Moves: {0} ({1})
LMoveRelearnFMiss_0 = Relearn Moves missing: {0}
LMoveRelearnInvalid = Not an expected Relearnable move.
LMoveRelearnNone = Expected no Relearn Move in slot.
@ -357,7 +357,7 @@ LTransferMove = Incompatible transfer move.
LTransferMoveG4HM = Defog and Whirlpool. One of the two moves should have been removed before transferred to Generation 5.
LTransferMoveHM = Generation {0} HM. Should have been removed before transferred to Generation {1}.
LTransferNature = Invalid Nature for transfer Experience.
LTransferOriginFInvalid0_1 = {0} origin cannot exist in the currently loaded ({1}) savegame.
LTransferOriginFInvalid0_1 = {0} origin cannot exist in the currently loaded ({1}) save file.
LTransferPIDECBitFlip = PID should be equal to EC [with top bit flipped]!
LTransferPIDECEquals = PID should be equal to EC!
LTransferPIDECXor = Encryption Constant matches shinyxored PID.

View file

@ -100,11 +100,11 @@ LEncInvalid = エンカウントエラー
LEncStaticMatch = Valid gift/static encounter.
LEncStaticPIDShiny = Static Encounter shiny mismatch.
LEncStaticRelearn = Static encounter relearn move mismatch.
LEncTradeChangedNickname = Ingame Trade Nickname has been altered.
LEncTradeChangedOT = Ingame Trade OT has been altered.
LEncTradeIndexBad = Ingame Trade invalid index?
LEncTradeMatch = Valid ingame trade.
LEncTradeUnchanged = Ingame Trade OT and Nickname have not been altered.
LEncTradeChangedNickname = In-game Trade Nickname has been altered.
LEncTradeChangedOT = In-game Trade OT has been altered.
LEncTradeIndexBad = In-game Trade invalid index?
LEncTradeMatch = Valid in-game trade.
LEncTradeUnchanged = In-game Trade OT and Nickname have not been altered.
LEncTypeMatch = Encounter Type matches encounter.
LEncTypeMismatch = Encounter Type does not match encounter.
LEncUnreleased = 未解禁イベント
@ -112,17 +112,17 @@ LEncUnreleasedEMewJP = Non japanese Mew from Faraway Island. Unreleased event.
LEncUnreleasedHoOArceus = 「はじまりのま」のアルセウスイベントは解禁されていません
LEncUnreleasedPtDarkrai = Non Platinum Darkrai from Newmoon Island. Unreleased event.
LEncUnreleasedPtShaymin = Non Platinum Shaymin from Flower Paradise. Unreleased event.
LEReaderAmerica = American E-Reader Berry in Japanese savegame.
LEReaderAmerica = American E-Reader Berry in Japanese save file.
LEReaderInvalid = Invalid E-Reader Berry.
LEReaderJapan = Japanese E-Reader Berry in international savegame.
LEReaderJapan = Japanese E-Reader Berry in international save file.
LEvoInvalid = Evolution not valid (or level/trade evolution unsatisfied).
LEvoTradeReq = In-game trade {0} should have evolved into {1}.
LEvoTradeReqOutsider = Outsider {0} should have evolved into {1}.
LEvoTradeRequired = Version Specific evolution requires a trade to opposite version. A Handling Trainer is required.
LFateful = Special ingame Fateful Encounter.
LFateful = Special in-game Fateful Encounter.
LFatefulGiftMissing = Fateful Encounter with no matching Encounter. Has the Mystery Gift data been contributed?
LFatefulInvalid = 「うんめいてきなであい」のチェックを外してください
LFatefulMissing = Special ingame Fateful Encounter flag missing.
LFatefulMissing = Special in-game Fateful Encounter flag missing.
LFatefulMystery = うんめいてきなであい
LFatefulMysteryMissing = 「うんめいてきなであい」にチェックを入れてください
LFavoriteMarkingUnavailable = Favorite Marking is not available.
@ -176,7 +176,7 @@ LG1TypePorygonFail2 = Porygon with invalid Type B value.
LG2InvalidTilePark = National Park fishing encounter. Unreachable Water tiles.
LG2InvalidTileR14 = Kanto Route 14 fishing encounter. Unreachable Water tiles.
LG2InvalidTileSafari = Generation 2 Safari Zone fishing encounter. Unreachable zone.
LG2InvalidTileTreeID = Found an unreacheable tree for Crystal headbutt encounter that matches OTID.
LG2InvalidTileTreeID = Found an unreachable tree for Crystal headbutt encounter that matches OTID.
LG2InvalidTileTreeNotFound = Could not find a tree for Crystal headbutt encounter that matches OTID.
LG2OTGender = OT from Virtual Console games other than Crystal cannot be female.
LG2TreeID = Found a tree for Crystal headbutt encounter that matches OTID.
@ -188,8 +188,8 @@ LG5IVAll30 = All IVs of N's Pokémon should be 30.
LG5OTGenderN = N's Pokémon must have a male OT gender.
LG5PIDShinyGrotto = Hidden Grotto captures cannot be shiny.
LG5PIDShinyN = Nのポケモンは色違いにはなりえません
LG5SparkleInvalid = Special ingame N's Sparkle flag should not be checked.
LG5SparkleRequired = Special ingame N's Sparkle flag missing.
LG5SparkleInvalid = Special in-game N's Sparkle flag should not be checked.
LG5SparkleRequired = Special in-game N's Sparkle flag missing.
LGenderInvalidNone = Genderless Pokémon should not have a gender.
LGeoBadOrder = GeoLocation Memory: Gap/Blank present.
LGeoHardwareInvalid = Geolocation: Country is not in 3DS region.
@ -276,9 +276,9 @@ LMovePPTooHigh_0 = Move {0} PP is above the amount allowed.
LMoveRelearnDexNav = Not an expected DexNav move.
LMoveRelearnEgg = 遺伝技
LMoveRelearnEggMissing = ベースの遺伝技を設定してください
LMoveRelearnFExpect_0 = 次の技のいずれかを遺伝技に設定してください: {0}
LMoveRelearnFExpect_0 = 次の技のいずれかを遺伝技に設定してください: {0} ({1})
LMoveRelearnFMiss_0 = 通常では覚えられません: {0}
LMoveRelearnInvalid = Not an expected Relearnable.
LMoveRelearnInvalid = Not an expected Relearnable Move.
LMoveRelearnNone = 遺伝技が設定されていません
LMoveSourceDefault = Default move.
LMoveSourceDuplicate = Duplicate Move.
@ -357,7 +357,7 @@ LTransferMove = Incompatible transfer move.
LTransferMoveG4HM = Defog and Whirlpool. One of the two moves should have been removed before transferred to Generation 5.
LTransferMoveHM = Generation {0} HM. Should have been removed before transferred to Generation {1}.
LTransferNature = Invalid Nature for transfer Experience.
LTransferOriginFInvalid0_1 = {0} origin cannot exist in the currently loaded ({1}) savegame.
LTransferOriginFInvalid0_1 = {0} origin cannot exist in the currently loaded ({1}) save file.
LTransferPIDECBitFlip = PID should be equal to EC [with top bit flipped]!
LTransferPIDECEquals = PID should be equal to EC!
LTransferPIDECXor = Encryption Constant matches shinyxored PID.

View file

@ -276,7 +276,7 @@ LMovePPTooHigh_0 = 기술 {0}의 PP가 허용된 값보다 많습니다.
LMoveRelearnDexNav = 도감 내비 기술이 예상과 다릅니다.
LMoveRelearnEgg = 베이스 자력기입니다.
LMoveRelearnEggMissing = 베이스 자력기가 없습니다.
LMoveRelearnFExpect_0 = 다음 떠올리기 기술이 예상됩니다: {0}
LMoveRelearnFExpect_0 = 다음 떠올리기 기술이 예상됩니다: {0} ({1})
LMoveRelearnFMiss_0 = 떠올리기 기술이 없습니다: {0}
LMoveRelearnInvalid = 떠올리기 기술이 예상과 다릅니다.
LMoveRelearnNone = 슬롯에 떠올리기 기술이 없어야 할 것으로 예상됩니다.

View file

@ -276,7 +276,7 @@ LMovePPTooHigh_0 = 技能 {0} PP高于允许值.
LMoveRelearnDexNav = 非正确忍足招式。
LMoveRelearnEgg = 基本遗传招式。
LMoveRelearnEggMissing = 缺失基本遗传招式。
LMoveRelearnFExpect_0 = 应为以下可回忆招式: {0}
LMoveRelearnFExpect_0 = 应为以下可回忆招式: {0} ({1})
LMoveRelearnFMiss_0 = 缺失可回忆招式: {0}
LMoveRelearnInvalid = 非正确回忆招式。
LMoveRelearnNone = 应该没有回忆招式。