From 6f9daaed0492c4d3910a0aa0e15ed8ffaee3527f Mon Sep 17 00:00:00 2001 From: Kurt Date: Fri, 20 Feb 2026 01:36:46 -0600 Subject: [PATCH] Small tweaks to HGSS ball check small lol would need fully implemented pal park trash byte checks, big sad leave stuff stubbed for now, can clamp down later. restrict some method sigs for IEncounterTemplate (rather than more-derived IEncounterable) for consistency --- .../ByGeneration/EncounterGenerator4.cs | 4 +- .../Localization/LegalityCheckLocalization.cs | 2 + .../LegalityCheckResultCodeExtensions.cs | 2 + .../Structures/LegalityCheckResultCode.cs | 2 + .../Legality/Verifiers/Ball/BallVerifier.cs | 2 +- .../Verifiers/FormArgumentVerifier.cs | 2 +- .../Misc/MiscEncounterDetailsVerifier.cs | 6 +- .../Legality/Verifiers/Misc/MiscVerifierG4.cs | 103 ++++++++++++++++-- .../Verifiers/Misc/MiscVerifierPK5.cs | 4 +- .../Verifiers/Misc/MiscVerifierPK8.cs | 2 +- .../Verifiers/Misc/MiscVerifierPK9.cs | 4 +- .../Legality/Verifiers/NicknameVerifier.cs | 2 +- .../Legality/Verifiers/TrainerNameVerifier.cs | 2 +- .../Legality/Verifiers/TransferVerifier.cs | 2 +- PKHeX.Core/MysteryGifts/PGT.cs | 2 +- PKHeX.Core/PKM/PK3.cs | 10 +- PKHeX.Core/PKM/RK4.cs | 6 - PKHeX.Core/PKM/Shared/G4PKM.cs | 68 +++++++++--- .../localize/legality/legality_de.json | 4 +- .../localize/legality/legality_en.json | 4 +- .../localize/legality/legality_es-419.json | 4 +- .../localize/legality/legality_es.json | 4 +- .../localize/legality/legality_fr.json | 4 +- .../localize/legality/legality_it.json | 4 +- .../localize/legality/legality_ja.json | 4 +- .../localize/legality/legality_ko.json | 4 +- .../localize/legality/legality_zh-hans.json | 4 +- .../localize/legality/legality_zh-hant.json | 4 +- PKHeX.WinForms/Resources/text/lang_de.txt | 20 ++++ PKHeX.WinForms/Resources/text/lang_en.txt | 20 ++++ PKHeX.WinForms/Resources/text/lang_es-419.txt | 20 ++++ PKHeX.WinForms/Resources/text/lang_es.txt | 20 ++++ PKHeX.WinForms/Resources/text/lang_fr.txt | 20 ++++ PKHeX.WinForms/Resources/text/lang_it.txt | 20 ++++ PKHeX.WinForms/Resources/text/lang_ja.txt | 20 ++++ PKHeX.WinForms/Resources/text/lang_ko.txt | 20 ++++ .../Resources/text/lang_zh-Hans.txt | 20 ++++ .../Resources/text/lang_zh-Hant.txt | 20 ++++ PKHeX.WinForms/Util/WinFormsTranslator.cs | 2 +- 39 files changed, 410 insertions(+), 57 deletions(-) diff --git a/PKHeX.Core/Legality/Encounters/Generator/ByGeneration/EncounterGenerator4.cs b/PKHeX.Core/Legality/Encounters/Generator/ByGeneration/EncounterGenerator4.cs index 32c886b3e..564c33f21 100644 --- a/PKHeX.Core/Legality/Encounters/Generator/ByGeneration/EncounterGenerator4.cs +++ b/PKHeX.Core/Legality/Encounters/Generator/ByGeneration/EncounterGenerator4.cs @@ -127,8 +127,8 @@ public IEnumerable GetEncounters(PKM pk, EvoCriteria[] chain, Le private static bool IsBallCompatible(IFixedBall e, PKM pk) => e.FixedBall switch { - Ball.Safari when pk.Ball is (byte)Ball.Safari => true, - Ball.Sport when pk.Ball is (byte)Ball.Sport => true, + Ball.Safari => pk.Ball is (byte)Ball.Safari, + Ball.Sport => pk.Ball is (byte)Ball.Sport && pk is not BK4 || pk is BK4 { BallDPPt: (byte)Ball.Poke }, // side transfer forgetting ball _ => pk.Ball is not ((byte)Ball.Safari or (byte)Ball.Sport), }; diff --git a/PKHeX.Core/Legality/Localization/LegalityCheckLocalization.cs b/PKHeX.Core/Legality/Localization/LegalityCheckLocalization.cs index dcd2c5b24..477215b8e 100644 --- a/PKHeX.Core/Legality/Localization/LegalityCheckLocalization.cs +++ b/PKHeX.Core/Legality/Localization/LegalityCheckLocalization.cs @@ -69,6 +69,8 @@ public sealed class LegalityCheckLocalization public string BallSpecies { get; set; } = "Can't obtain species in Ball."; public string BallSpeciesPass { get; set; } = "Ball possible for species."; public string BallUnavailable { get; set; } = "Ball unobtainable in origin Generation."; + public string BallG4Sinnoh { get; set; } = "Ball value for D/P/Pt (0x83) is not within range."; + public string BallG4Johto { get; set; } = "Extended Ball value for HG/SS (0x86) is not within range."; public string ContestZero { get; set; } = "Contest Stats should be 0."; public string ContestZeroSheen { get; set; } = "Contest Stat Sheen should be 0."; diff --git a/PKHeX.Core/Legality/Localization/LegalityCheckResultCodeExtensions.cs b/PKHeX.Core/Legality/Localization/LegalityCheckResultCodeExtensions.cs index 3b9669c15..ee2ac018a 100644 --- a/PKHeX.Core/Legality/Localization/LegalityCheckResultCodeExtensions.cs +++ b/PKHeX.Core/Legality/Localization/LegalityCheckResultCodeExtensions.cs @@ -55,6 +55,8 @@ public static class LegalityCheckResultCodeExtensions BallSpecies => localization.BallSpecies, BallSpeciesPass => localization.BallSpeciesPass, BallUnavailable => localization.BallUnavailable, + BallG4Sinnoh => localization.BallG4Sinnoh, + BallG4Johto => localization.BallG4Johto, // Contest ContestZero => localization.ContestZero, diff --git a/PKHeX.Core/Legality/Structures/LegalityCheckResultCode.cs b/PKHeX.Core/Legality/Structures/LegalityCheckResultCode.cs index 2277b14b9..0fd62b7fe 100644 --- a/PKHeX.Core/Legality/Structures/LegalityCheckResultCode.cs +++ b/PKHeX.Core/Legality/Structures/LegalityCheckResultCode.cs @@ -45,6 +45,8 @@ public enum LegalityCheckResultCode : ushort BallSpecies, BallSpeciesPass, BallUnavailable, + BallG4Sinnoh, + BallG4Johto, // Contest ContestZero, diff --git a/PKHeX.Core/Legality/Verifiers/Ball/BallVerifier.cs b/PKHeX.Core/Legality/Verifiers/Ball/BallVerifier.cs index 835a942c3..07ad723e2 100644 --- a/PKHeX.Core/Legality/Verifiers/Ball/BallVerifier.cs +++ b/PKHeX.Core/Legality/Verifiers/Ball/BallVerifier.cs @@ -45,7 +45,7 @@ public static BallVerificationResult VerifyBall(LegalityAnalysis data) return VerifyBall(enc, current, pk); } - private static BallVerificationResult VerifyEvolvedShedinja(IEncounterable enc, Ball current, PKM pk, LegalInfo info) + private static BallVerificationResult VerifyEvolvedShedinja(IEncounterTemplate enc, Ball current, PKM pk, LegalInfo info) { // Nincada evolving into Shedinja normally reverts to Poké Ball. diff --git a/PKHeX.Core/Legality/Verifiers/FormArgumentVerifier.cs b/PKHeX.Core/Legality/Verifiers/FormArgumentVerifier.cs index e6decda84..d93684aab 100644 --- a/PKHeX.Core/Legality/Verifiers/FormArgumentVerifier.cs +++ b/PKHeX.Core/Legality/Verifiers/FormArgumentVerifier.cs @@ -119,7 +119,7 @@ private CheckResult VerifyFormArgument(LegalityAnalysis data, IFormArgument f) }; } - private CheckResult CheckPrimeape(LegalityAnalysis data, PKM pk, uint arg, IEncounterable enc) + private CheckResult CheckPrimeape(LegalityAnalysis data, PKM pk, uint arg, IEncounterTemplate enc) { if (arg == 0) return GetValid(FormArgumentValid); diff --git a/PKHeX.Core/Legality/Verifiers/Misc/MiscEncounterDetailsVerifier.cs b/PKHeX.Core/Legality/Verifiers/Misc/MiscEncounterDetailsVerifier.cs index 16acff1ad..8e303929a 100644 --- a/PKHeX.Core/Legality/Verifiers/Misc/MiscEncounterDetailsVerifier.cs +++ b/PKHeX.Core/Legality/Verifiers/Misc/MiscEncounterDetailsVerifier.cs @@ -15,7 +15,7 @@ public override void Verify(LegalityAnalysis data) Verify(data, pk, enc); } - internal void Verify(LegalityAnalysis data, PKM pk, IEncounterable enc) + internal void Verify(LegalityAnalysis data, PKM pk, IEncounterTemplate enc) { if (enc is IEncounterServerDate { IsDateRestricted: true } encounterDate) VerifyServerDate2000(data, pk, enc, encounterDate); @@ -23,7 +23,7 @@ internal void Verify(LegalityAnalysis data, PKM pk, IEncounterable enc) VerifyRandomCorrelationSwitch(data, pk, enc); } - private void VerifyRandomCorrelationSwitch(LegalityAnalysis data, PKM pk, IEncounterable enc) + private void VerifyRandomCorrelationSwitch(LegalityAnalysis data, PKM pk, IEncounterTemplate enc) { if (enc is IOverworldCorrelation8 z) { @@ -85,7 +85,7 @@ private void VerifyCorrelation8(LegalityAnalysis data, IOverworldCorrelation8 z, data.AddLine(GetInvalid(PIDTypeMismatch)); } - private void VerifyServerDate2000(LegalityAnalysis data, PKM pk, IEncounterable enc, IEncounterServerDate date) + private void VerifyServerDate2000(LegalityAnalysis data, PKM pk, IEncounterTemplate enc, IEncounterServerDate date) { const int epoch = 2000; var actualDay = new DateOnly(pk.MetYear + epoch, pk.MetMonth, pk.MetDay); diff --git a/PKHeX.Core/Legality/Verifiers/Misc/MiscVerifierG4.cs b/PKHeX.Core/Legality/Verifiers/Misc/MiscVerifierG4.cs index f6d2edff3..c625266b8 100644 --- a/PKHeX.Core/Legality/Verifiers/Misc/MiscVerifierG4.cs +++ b/PKHeX.Core/Legality/Verifiers/Misc/MiscVerifierG4.cs @@ -1,3 +1,4 @@ +using System; using static PKHeX.Core.LegalityCheckResultCode; using static PKHeX.Core.CheckIdentifier; @@ -16,9 +17,44 @@ public override void Verify(LegalityAnalysis data) internal void Verify(LegalityAnalysis data, G4PKM pk) { // Verify misc values that were introduced in HG/SS - VerifySplitBall(data, pk); VerifyWalkingMood(data, pk); VerifyShinyLeaf(data, pk); + + var palPark = PalParkTransferOrigin.None; + var enc = data.EncounterOriginal; + if (enc.Generation == 3) + { + palPark = CheckPalParkTransfer(pk); + if (palPark == PalParkTransferOrigin.Invalid) + return; + VerifyMetLocation3(data, pk, palPark); + } + VerifySplitBall(data, pk, palPark); + } + + private void VerifyMetLocation3(LegalityAnalysis data, G4PKM pk, PalParkTransferOrigin palPark) + { + var extended = pk.MetLocationExtended; + if (extended == 0 && palPark.HasFlag(PalParkTransferOrigin.DP)) + return; // OK + if (extended == pk.MetLocationDP && palPark.HasFlag(PalParkTransferOrigin.PtHGSS)) + return; // OK + + data.AddLine(GetInvalid(TransferMetLocation, Locations.Transfer3)); + } + + private static PalParkTransferOrigin CheckPalParkTransfer(G4PKM pk) + { + // The Pt/HG/SS location value is unset; others will not be true. + if (pk.MetLocationExtended == 0) + return pk.PossiblyPalParkDP ? PalParkTransferOrigin.DP : PalParkTransferOrigin.Invalid; + + var result = PalParkTransferOrigin.None; + if (pk.PossiblyPalParkPt) + result |= PalParkTransferOrigin.Pt; + if (pk.PossiblyPalParkHGSS) + result |= PalParkTransferOrigin.HGSS; + return result; } private void VerifyShinyLeaf(LegalityAnalysis data, G4PKM pk) @@ -30,15 +66,50 @@ private void VerifyShinyLeaf(LegalityAnalysis data, G4PKM pk) data.AddLine(GetInvalid(G4ShinyLeafBitsInvalid)); } - private static void VerifySplitBall(LegalityAnalysis data, G4PKM pk) + private static void VerifySplitBall(LegalityAnalysis data, G4PKM pk, PalParkTransferOrigin palPark) { - // Version is a true match. If not from HG/SS, should not have HG/SS ball value set. - if (pk.BallHGSS == 0 && pk.BallDPPt == pk.Ball) - return; + // Sanity check the D/P/Pt value. + if (!IsValidBallDP(pk.BallDPPt)) + data.AddLine(GetInvalid(CheckIdentifier.Ball, BallG4Sinnoh)); + if (!IsValidBallHGSS(data, pk, palPark)) + data.AddLine(GetInvalid(CheckIdentifier.Ball, BallG4Johto)); + } + private static bool IsValidBallHGSS(LegalityAnalysis data, G4PKM pk, PalParkTransferOrigin palPark) + { + var ball = pk.BallHGSS; + var enc = data.EncounterOriginal; + // If not from HG/SS, should not have HG/SS ball value set. + // Battle Revolution does not copy this byte. + if (!IsCreatedInHGSS(pk, enc, palPark) || pk is BK4) + return ball == 0; + + // If it could have been D/P/Pt transfer, then allow the not-HG/SS state. + if ((palPark & (PalParkTransferOrigin.DPPt)) != 0) + { + if (ball == 0) + return true; + } + + var dp = pk.BallDPPt; + // Assume D/P/Pt ball is valid (flagged separately). + // Ball being equal is OK. + // Ball being HG/SS exclusive is OK if D/P/Pt is default (4). + return ball == dp || (dp is (byte)Ball.Poke && !IsValidBallDP(ball)); + } + + // Any other ball value (HG/SS ball) isn't available/displayed correctly. + private static bool IsValidBallDP(byte ball) => ball <= (int)Ball.Cherish; + + private static bool IsCreatedInHGSS(G4PKM pk, IEncounterTemplate enc, PalParkTransferOrigin palPark) + { // Only set the HG/SS value if it originated in HG/SS and was not an event (pre-filled data only; not Manaphy egg!). - if (!pk.HGSS || data.Info.EncounterOriginal is PCD) // PCD: not Manaphy via PGT - data.AddLine(GetInvalid(CheckIdentifier.Ball, BallEncMismatch)); + // Pal Park transfers into HG/SS set this value as well. + if (pk.HGSS) + return enc is not PCD; // PCD: not Manaphy via PGT + if (palPark.HasFlag(PalParkTransferOrigin.HGSS)) + return true; + return false; } private static void VerifyWalkingMood(LegalityAnalysis data, G4PKM pk) @@ -55,9 +126,23 @@ private static void VerifyWalkingMood(LegalityAnalysis data, G4PKM pk) if (pk.WalkingMood == 0) return; + const Severity severity = Severity.Fishy; if (pk.IsEgg) - data.AddLine(GetInvalid(Egg, G4PartnerMoodEgg)); + data.AddLine(Get(Egg, severity, G4PartnerMoodEgg)); else if (!data.IsStoredSlot(StorageSlotType.Party) && ParseSettings.ActiveTrainer is SAV4HGSS) - data.AddLine(GetInvalid(Egg, G4PartnerMoodZero)); + data.AddLine(Get(Misc, severity, G4PartnerMoodZero)); } } + +[Flags] +public enum PalParkTransferOrigin +{ + None, + DP = 1 << 0, + Pt = 1 << 1, + HGSS = 1 << 2, + Invalid = 1 << 3, + + DPPt = DP | Pt, + PtHGSS = Pt | HGSS, +} diff --git a/PKHeX.Core/Legality/Verifiers/Misc/MiscVerifierPK5.cs b/PKHeX.Core/Legality/Verifiers/Misc/MiscVerifierPK5.cs index a0ac5ae2d..83655887a 100644 --- a/PKHeX.Core/Legality/Verifiers/Misc/MiscVerifierPK5.cs +++ b/PKHeX.Core/Legality/Verifiers/Misc/MiscVerifierPK5.cs @@ -20,7 +20,7 @@ internal void Verify(LegalityAnalysis data, PK5 pk) VerifyNSparkle(data, pk, enc); } - private static void VerifyFame(LegalityAnalysis data, PK5 pk, IEncounterable enc) + private static void VerifyFame(LegalityAnalysis data, PK5 pk, IEncounterTemplate enc) { var fame = pk.PokeStarFame; if (fame == 0) @@ -35,7 +35,7 @@ private static void VerifyFame(LegalityAnalysis data, PK5 pk, IEncounterable enc data.AddLine(GetInvalid(Misc, G5PokeStarImpossibleValue)); } - private static void VerifyNSparkle(LegalityAnalysis data, PK5 pk, IEncounterable enc) + private static void VerifyNSparkle(LegalityAnalysis data, PK5 pk, IEncounterTemplate enc) { // Ensure NSparkle is only present on N's encounters. if (enc is EncounterStatic5N) diff --git a/PKHeX.Core/Legality/Verifiers/Misc/MiscVerifierPK8.cs b/PKHeX.Core/Legality/Verifiers/Misc/MiscVerifierPK8.cs index 76dd0c031..ee1d53f25 100644 --- a/PKHeX.Core/Legality/Verifiers/Misc/MiscVerifierPK8.cs +++ b/PKHeX.Core/Legality/Verifiers/Misc/MiscVerifierPK8.cs @@ -43,7 +43,7 @@ private static void VerifySociability(LegalityAnalysis data, PK8 pk) } } - private void VerifyGigantamax(LegalityAnalysis data, PK8 pk, IEncounterable enc) + private void VerifyGigantamax(LegalityAnalysis data, PK8 pk, IEncounterTemplate enc) { bool originGMax = enc is IGigantamaxReadOnly { CanGigantamax: true }; if (originGMax != pk.CanGigantamax) diff --git a/PKHeX.Core/Legality/Verifiers/Misc/MiscVerifierPK9.cs b/PKHeX.Core/Legality/Verifiers/Misc/MiscVerifierPK9.cs index 05b13c160..f21ae1fc3 100644 --- a/PKHeX.Core/Legality/Verifiers/Misc/MiscVerifierPK9.cs +++ b/PKHeX.Core/Legality/Verifiers/Misc/MiscVerifierPK9.cs @@ -34,7 +34,7 @@ internal void Verify(LegalityAnalysis data, PK9 pk) VerifyPreDLC(data, pk, enc); } - private void VerifyPreDLC(LegalityAnalysis data, PK9 pk, IEncounterable enc) + private void VerifyPreDLC(LegalityAnalysis data, PK9 pk, IEncounterTemplate enc) { if (enc is { Species: (int)Species.Larvesta, Form: 0 } and not EncounterEgg9) DisallowLevelUpMove(24, (ushort)Move.BugBite, pk, data); @@ -49,7 +49,7 @@ private void VerifyPreDLC(LegalityAnalysis data, PK9 pk, IEncounterable enc) data.AddLine(GetInvalid(BallUnavailable)); } - private void VerifyEncounter(LegalityAnalysis data, PK9 pk, IEncounterable enc) + private void VerifyEncounter(LegalityAnalysis data, PK9 pk, IEncounterTemplate enc) { if (enc is EncounterEgg9 g) { diff --git a/PKHeX.Core/Legality/Verifiers/NicknameVerifier.cs b/PKHeX.Core/Legality/Verifiers/NicknameVerifier.cs index b8a11424e..0ed82f6da 100644 --- a/PKHeX.Core/Legality/Verifiers/NicknameVerifier.cs +++ b/PKHeX.Core/Legality/Verifiers/NicknameVerifier.cs @@ -75,7 +75,7 @@ public override void Verify(LegalityAnalysis data) } } - private static bool IsMysteryGiftNoNickname(IEncounterable enc) + private static bool IsMysteryGiftNoNickname(IEncounterTemplate enc) { if (enc is not MysteryGift { IsEgg: false }) return false; diff --git a/PKHeX.Core/Legality/Verifiers/TrainerNameVerifier.cs b/PKHeX.Core/Legality/Verifiers/TrainerNameVerifier.cs index ad447ebb5..ab584c10b 100644 --- a/PKHeX.Core/Legality/Verifiers/TrainerNameVerifier.cs +++ b/PKHeX.Core/Legality/Verifiers/TrainerNameVerifier.cs @@ -69,7 +69,7 @@ public override void Verify(LegalityAnalysis data) /// /// Checks if any player (human) was the original OT. /// - internal static bool IsPlayerOriginalTrainer(IEncounterable enc) => enc switch + internal static bool IsPlayerOriginalTrainer(IEncounterTemplate enc) => enc switch { IFixedTrainer { IsFixedTrainer: true } => false, MysteryGift { IsEgg: false } => false, diff --git a/PKHeX.Core/Legality/Verifiers/TransferVerifier.cs b/PKHeX.Core/Legality/Verifiers/TransferVerifier.cs index 884c49572..493acaade 100644 --- a/PKHeX.Core/Legality/Verifiers/TransferVerifier.cs +++ b/PKHeX.Core/Legality/Verifiers/TransferVerifier.cs @@ -192,7 +192,7 @@ private void VerifyHOMETracker(LegalityAnalysis data, PKM pk) public void VerifyVCEncounter(PKM pk, IEncounterTemplate original, EncounterTransfer7 transfer, LegalityAnalysis data) { if (pk.MetLocation != transfer.Location) - data.AddLine(GetInvalid(TransferMetLocation)); + data.AddLine(GetInvalid(TransferMetLocation, transfer.Location)); var expectEgg = pk is PB8 ? Locations.Default8bNone : transfer.EggLocation; if (pk.EggLocation != expectEgg) diff --git a/PKHeX.Core/MysteryGifts/PGT.cs b/PKHeX.Core/MysteryGifts/PGT.cs index 8646eafb7..08903e1a2 100644 --- a/PKHeX.Core/MysteryGifts/PGT.cs +++ b/PKHeX.Core/MysteryGifts/PGT.cs @@ -298,7 +298,6 @@ private static void SetDefaultManaphyEggDetails(PK4 pk4, ITrainerInfo trainer) pk4.Move3 = 346; pk4.Move3_PP = 15; pk4.Ability = (int)Core.Ability.Hydration; pk4.FatefulEncounter = true; - pk4.Ball = (int)Core.Ball.Poke; // Manaphy is the only PGT gift egg! (and the only gift that needs a version to be set) var version = trainer.Version; @@ -315,6 +314,7 @@ private static void SetDefaultManaphyEggDetails(PK4 pk4, ITrainerInfo trainer) pk4.Nickname = SpeciesName.GetEggName(lang, 4); pk4.EggLocation = Locations.Ranger4; pk4.EggMetDate = pk4.MetDate = EncounterDate.GetDateNDS(); + pk4.Ball = (int)Core.Ball.Poke; } public bool HasPID => PK.PID > 1; // 0=Random, 1=Random (Anti-Shiny). 0 was never used in any Gen4 gift (all non-shiny). diff --git a/PKHeX.Core/PKM/PK3.cs b/PKHeX.Core/PKM/PK3.cs index 80b7276f8..578ab6793 100644 --- a/PKHeX.Core/PKM/PK3.cs +++ b/PKHeX.Core/PKM/PK3.cs @@ -302,6 +302,7 @@ public PK4 ConvertToPK4() FatefulEncounter = FatefulEncounter, }; + // Transfer into D/P. // Yay for reusing string buffers! The game allocates a buffer and reuses it when creating strings. // Trash from the {unknown source} is currently in buffer. Set it to the Nickname region. var trash = StringConverter345.GetTrashBytes(pk4.Language); @@ -309,10 +310,15 @@ public PK4 ConvertToPK4() trash.CopyTo(nickTrash[4..]); // min of 1 char and terminator, ignore first 2. if (IsEgg) + { + // Force hatch. pk4.Nickname = SpeciesName.GetSpeciesNameGeneration(pk4.Species, pk4.Language, 4); + } else + { + pk4.IsNicknamed = IsNicknamed; StringConverter345.TransferGlyphs34(NicknameTrash, Language, Japanese ? 5 : 10, nickTrash); - pk4.IsNicknamed = !IsEgg && IsNicknamed; + } // Trash from the current string (Nickname) is in our string buffer. Slap the OT name over-top. var destOT = pk4.OriginalTrainerTrash; @@ -328,7 +334,7 @@ public PK4 ConvertToPK4() } // Remove HM moves - ReadOnlySpan banned = PersonalInfo3.MachineMovesHidden; + var banned = PersonalInfo3.MachineMovesHidden; if (banned.Contains(Move1)) pk4.Move1 = 0; if (banned.Contains(Move2)) pk4.Move2 = 0; if (banned.Contains(Move3)) pk4.Move3 = 0; diff --git a/PKHeX.Core/PKM/RK4.cs b/PKHeX.Core/PKM/RK4.cs index 4b0543e82..95f9cee49 100644 --- a/PKHeX.Core/PKM/RK4.cs +++ b/PKHeX.Core/PKM/RK4.cs @@ -327,12 +327,6 @@ public override string HandlingTrainerName #endregion // Methods - public void SetSaveRevision(int ranchSaveRevision) - { - if (ranchSaveRevision == 0) - StripPtHGSSContent(this); - } - protected override byte[] Encrypt() { RefreshChecksum(); diff --git a/PKHeX.Core/PKM/Shared/G4PKM.cs b/PKHeX.Core/PKM/Shared/G4PKM.cs index 4cc828e37..e3d9e15e1 100644 --- a/PKHeX.Core/PKM/Shared/G4PKM.cs +++ b/PKHeX.Core/PKM/Shared/G4PKM.cs @@ -198,9 +198,9 @@ public sealed override ushort EggLocation { get { - ushort hgssloc = EggLocationExtended; - if (hgssloc != 0) - return hgssloc; + ushort pthgss = EggLocationExtended; + if (pthgss != 0) + return pthgss; return EggLocationDP; } set @@ -217,9 +217,9 @@ public sealed override ushort EggLocation } else { - int pthgss = PtHGSS ? value : 0; // only set to PtHGSS loc if encountered in game + var pthgss = PtHGSS ? value : default; // only set to PtHGSS loc if encountered in game EggLocationDP = value; - EggLocationExtended = (ushort)pthgss; + EggLocationExtended = pthgss; } } } @@ -247,13 +247,29 @@ public sealed override ushort MetLocation } else { - int pthgss = PtHGSS ? value : 0; // only set to PtHGSS loc if encountered in game + var shouldSet = ShouldSetMetLocationExtended(); + var pthgss = shouldSet ? value : default; // only set to PtHGSS loc if encountered in game MetLocationDP = value; - MetLocationExtended = (ushort)pthgss; + MetLocationExtended = pthgss; } } } + private bool ShouldSetMetLocationExtended() + { + if (!Gen3) + return PtHGSS; + + // If transferred from Gen3 into Pt or HG/SS via Pal Park, they set these values. + var hasValue = MetLocationExtended != 0 || BallHGSS != 0; + var wasDP = PossiblyPalParkDP; + if (wasDP && !hasValue) + return false; // Keep D/P. + if (PossiblyPalParkPt || PossiblyPalParkHGSS) + return hasValue || !wasDP; + return false; // Assume D/P. + } + public sealed override byte Ball { // HG/SS added new ball IDs mid-generation, and the previous Gen4 games couldn't handle invalid ball values. @@ -261,6 +277,7 @@ public sealed override byte Ball // However, this info is not set in event gift data! // Event gift data contains a pre-formatted PK4 template, which is slightly mutated. // No HG/SS ball values were used in these event gifts, and no HG/SS ball values are set (0). + // Pal Park transfers into HG/SS set this value as well. // To get the display ball (assume HG/SS +), return the higher of the two values. get => Math.Max(BallHGSS, BallDPPt); @@ -272,13 +289,32 @@ public sealed override byte Ball BallDPPt = Clamp(value, Core.Ball.Cherish); // Only set the HG/SS value if it originated in HG/SS and was not an event. - if (!HGSS || FatefulEncounter) - BallHGSS = 0; - else + if (WasCreatedInHGSS) BallHGSS = Clamp(value, Core.Ball.Sport); + else + BallHGSS = 0; } } + private bool WasCreatedInHGSS + { + get + { + if (HGSS) + return !FatefulEncounter || EggLocation != 0; // Ranger Manaphy was the only egg ever distributed. + return Gen3 && PossiblyPalParkHGSS; + } + } + + // Must only be used for Gen3 origin Pokémon that could have been transferred via Pal Park. + public bool PossiblyPalParkDP => MetLocationExtended == 0 && IsTrashPalParkDP(); + public bool PossiblyPalParkPt => MetLocationExtended != 0 && IsTrashPalParkPt(); + public bool PossiblyPalParkHGSS => MetLocationExtended != 0 && IsTrashPalParkHGSS(); + + private bool IsTrashPalParkDP() => true; // todo + private bool IsTrashPalParkPt() => true; // todo + private bool IsTrashPalParkHGSS() => true; // todo + // Synthetic Trading Logic public bool BelongsTo(ITrainerInfo tr) { @@ -309,12 +345,16 @@ public void UpdateHandler(ITrainerInfo tr) } // Enforce D/P content only (no Pt or HG/SS) - protected void StripPtHGSSContent(PKM pk) + protected void StripPtHGSSContent(T pk) where T : G4PKM { if (Form != 0 && !PersonalTable.DP[Species].HasForms && Species != 201) pk.Form = 0; if (HeldItem > Legal.MaxItemID_4_DP) pk.HeldItem = 0; + + // pk.MetLocationExtended = 0; + // pk.EggLocationExtended = 0; + pk.BallHGSS = 0; } protected T ConvertTo() where T : G4PKM, new() @@ -380,12 +420,14 @@ protected T ConvertTo() where T : G4PKM, new() FatefulEncounter = FatefulEncounter, MetLevel = MetLevel, - MetLocation = MetLocation, + MetLocationDP = MetLocationDP, + MetLocationExtended = MetLocationExtended, MetYear = MetYear, MetMonth = MetMonth, MetDay = MetDay, - EggLocation = EggLocation, + EggLocationDP = EggLocationDP, + EggLocationExtended = EggLocationExtended, EggYear = EggYear, EggMonth = EggMonth, EggDay = EggDay, diff --git a/PKHeX.Core/Resources/localize/legality/legality_de.json b/PKHeX.Core/Resources/localize/legality/legality_de.json index 868d9d85e..a8f8a053b 100644 --- a/PKHeX.Core/Resources/localize/legality/legality_de.json +++ b/PKHeX.Core/Resources/localize/legality/legality_de.json @@ -31,6 +31,8 @@ "BallSpecies": "Can't obtain species in Ball.", "BallSpeciesPass": "Ball possible for species.", "BallUnavailable": "Ball unobtainable in origin Generation.", + "BallG4Sinnoh": "Ball value for D/P/Pt (0x83) is not within range.", + "BallG4Johto": "Extended Ball value for HG/SS (0x86) is not within range.", "ContestZero": "Contest Stats should be 0.", "ContestZeroSheen": "Contest Stat Sheen should be 0.", "ContestSheenGEQ_0": "Contest Stat Sheen should be >= {0}.", @@ -372,4 +374,4 @@ "BulkHeldItemInventoryNotAcquired_0": "{0} has not been acquired in player inventory.", "BulkHeldItemInventoryUnassigned_0": "{0} is not marked as assigned in player inventory.", "BulkFusionSourceInvalid": "The subsumed Species-Form stored in the save file does not match the expected Species-Form of the fused slot." -} +} \ No newline at end of file diff --git a/PKHeX.Core/Resources/localize/legality/legality_en.json b/PKHeX.Core/Resources/localize/legality/legality_en.json index 969b5e0eb..a6c1d324c 100644 --- a/PKHeX.Core/Resources/localize/legality/legality_en.json +++ b/PKHeX.Core/Resources/localize/legality/legality_en.json @@ -31,6 +31,8 @@ "BallSpecies": "Can't obtain species in Ball.", "BallSpeciesPass": "Ball possible for species.", "BallUnavailable": "Ball unobtainable in origin Generation.", + "BallG4Sinnoh": "Ball value for D/P/Pt (0x83) is not within range.", + "BallG4Johto": "Extended Ball value for HG/SS (0x86) is not within range.", "ContestZero": "Contest Stats should be 0.", "ContestZeroSheen": "Contest Stat Sheen should be 0.", "ContestSheenGEQ_0": "Contest Stat Sheen should be >= {0}.", @@ -372,4 +374,4 @@ "BulkHeldItemInventoryNotAcquired_0": "{0} has not been acquired in player inventory.", "BulkHeldItemInventoryUnassigned_0": "{0} is not marked as assigned in player inventory.", "BulkFusionSourceInvalid": "The subsumed Species-Form stored in the save file does not match the expected Species-Form of the fused slot." -} +} \ No newline at end of file diff --git a/PKHeX.Core/Resources/localize/legality/legality_es-419.json b/PKHeX.Core/Resources/localize/legality/legality_es-419.json index 3d3984b6b..2ffc1f4a6 100644 --- a/PKHeX.Core/Resources/localize/legality/legality_es-419.json +++ b/PKHeX.Core/Resources/localize/legality/legality_es-419.json @@ -31,6 +31,8 @@ "BallSpecies": "La especie no se puede obtener en esta Bola.", "BallSpeciesPass": "Bola posible para esta especie.", "BallUnavailable": "Bola imposible en la generación de origen.", + "BallG4Sinnoh": "Ball value for D/P/Pt (0x83) is not within range.", + "BallG4Johto": "Extended Ball value for HG/SS (0x86) is not within range.", "ContestZero": "Las estadísticas de concurso deberían ser 0.", "ContestZeroSheen": " La estadística de concurso Brillo debería ser 0.", "ContestSheenGEQ_0": "La estadística de concurso Brillo debería ser >= {0}.", @@ -372,4 +374,4 @@ "BulkHeldItemInventoryNotAcquired_0": "{0} has not been acquired in player inventory.", "BulkHeldItemInventoryUnassigned_0": "{0} is not marked as assigned in player inventory.", "BulkFusionSourceInvalid": "The subsumed Species-Form stored in the save file does not match the expected Species-Form of the fused slot." -} +} \ No newline at end of file diff --git a/PKHeX.Core/Resources/localize/legality/legality_es.json b/PKHeX.Core/Resources/localize/legality/legality_es.json index 59bee0cd8..3ecd5f131 100644 --- a/PKHeX.Core/Resources/localize/legality/legality_es.json +++ b/PKHeX.Core/Resources/localize/legality/legality_es.json @@ -31,6 +31,8 @@ "BallSpecies": "La especie no se puede obtener en esta Ball.", "BallSpeciesPass": "Ball posible para esta especie.", "BallUnavailable": "Ball imposible en la generación de origen.", + "BallG4Sinnoh": "Ball value for D/P/Pt (0x83) is not within range.", + "BallG4Johto": "Extended Ball value for HG/SS (0x86) is not within range.", "ContestZero": "Las estadísticas de concurso deberían ser 0.", "ContestZeroSheen": " La estadística de concurso Brillo debería ser 0.", "ContestSheenGEQ_0": "La estadística de concurso Brillo debería ser >= {0}.", @@ -372,4 +374,4 @@ "BulkHeldItemInventoryNotAcquired_0": "{0} has not been acquired in player inventory.", "BulkHeldItemInventoryUnassigned_0": "{0} is not marked as assigned in player inventory.", "BulkFusionSourceInvalid": "The subsumed Species-Form stored in the save file does not match the expected Species-Form of the fused slot." -} +} \ No newline at end of file diff --git a/PKHeX.Core/Resources/localize/legality/legality_fr.json b/PKHeX.Core/Resources/localize/legality/legality_fr.json index 40cc0b203..9a014089b 100644 --- a/PKHeX.Core/Resources/localize/legality/legality_fr.json +++ b/PKHeX.Core/Resources/localize/legality/legality_fr.json @@ -31,6 +31,8 @@ "BallSpecies": "L'espèce ne peut pas être capturée avec cette Ball.", "BallSpeciesPass": "Ball possible pour l'espèce.", "BallUnavailable": "Ball impossible à obtenir dans la génération du jeu.", + "BallG4Sinnoh": "Ball value for D/P/Pt (0x83) is not within range.", + "BallG4Johto": "Extended Ball value for HG/SS (0x86) is not within range.", "ContestZero": "Les Stats de Concours doivent être 0.", "ContestZeroSheen": "La Stat de Concours Lustre doit être à 0.", "ContestSheenGEQ_0": "La Stat de Concours Lustre doit être >= {0}.", @@ -372,4 +374,4 @@ "BulkHeldItemInventoryNotAcquired_0": "{0} has not been acquired in player inventory.", "BulkHeldItemInventoryUnassigned_0": "{0} is not marked as assigned in player inventory.", "BulkFusionSourceInvalid": "The subsumed Species-Form stored in the save file does not match the expected Species-Form of the fused slot." -} +} \ No newline at end of file diff --git a/PKHeX.Core/Resources/localize/legality/legality_it.json b/PKHeX.Core/Resources/localize/legality/legality_it.json index 3616eb1d1..d2152a95d 100644 --- a/PKHeX.Core/Resources/localize/legality/legality_it.json +++ b/PKHeX.Core/Resources/localize/legality/legality_it.json @@ -31,6 +31,8 @@ "BallSpecies": "Impossibile ottenere questa specie in questa Ball.", "BallSpeciesPass": "Ball possibile per la specie.", "BallUnavailable": "Ball inottenibile nella generazione di origine.", + "BallG4Sinnoh": "Ball value for D/P/Pt (0x83) is not within range.", + "BallG4Johto": "Extended Ball value for HG/SS (0x86) is not within range.", "ContestZero": "Le statistiche delle Gare dovrebbero essere 0.", "ContestZeroSheen": "Il Lustro dovrebbe essere 0.", "ContestSheenGEQ_0": "Il Lustro dovrebbe essere >= {0}.", @@ -372,4 +374,4 @@ "BulkHeldItemInventoryNotAcquired_0": "{0} has not been acquired in player inventory.", "BulkHeldItemInventoryUnassigned_0": "{0} is not marked as assigned in player inventory.", "BulkFusionSourceInvalid": "The subsumed Species-Form stored in the save file does not match the expected Species-Form of the fused slot." -} +} \ No newline at end of file diff --git a/PKHeX.Core/Resources/localize/legality/legality_ja.json b/PKHeX.Core/Resources/localize/legality/legality_ja.json index debbaaa4a..6a7a85ced 100644 --- a/PKHeX.Core/Resources/localize/legality/legality_ja.json +++ b/PKHeX.Core/Resources/localize/legality/legality_ja.json @@ -31,6 +31,8 @@ "BallSpecies": "このボールでは捕獲できません。", "BallSpeciesPass": "ポケモンによっては捕獲可能なボール。", "BallUnavailable": "元の世代では入手できないボール。", + "BallG4Sinnoh": "Ball value for D/P/Pt (0x83) is not within range.", + "BallG4Johto": "Extended Ball value for HG/SS (0x86) is not within range.", "ContestZero": "コンディションは0でなければなりません。", "ContestZeroSheen": "けづやは0でなければなりません。", "ContestSheenGEQ_0": "けづやは >= {0} でなければなりません。", @@ -372,4 +374,4 @@ "BulkHeldItemInventoryNotAcquired_0": "{0} has not been acquired in player inventory.", "BulkHeldItemInventoryUnassigned_0": "{0} is not marked as assigned in player inventory.", "BulkFusionSourceInvalid": "The subsumed Species-Form stored in the save file does not match the expected Species-Form of the fused slot." -} +} \ No newline at end of file diff --git a/PKHeX.Core/Resources/localize/legality/legality_ko.json b/PKHeX.Core/Resources/localize/legality/legality_ko.json index 83b76dc56..279f624ac 100644 --- a/PKHeX.Core/Resources/localize/legality/legality_ko.json +++ b/PKHeX.Core/Resources/localize/legality/legality_ko.json @@ -31,6 +31,8 @@ "BallSpecies": "이 포켓몬 종류를 잡을 수 없는 볼입니다.", "BallSpeciesPass": "이 포켓몬 종류를 잡을 수 있는 볼입니다.", "BallUnavailable": "만난 게임에서 얻을 수 없는 볼입니다.", + "BallG4Sinnoh": "Ball value for D/P/Pt (0x83) is not within range.", + "BallG4Johto": "Extended Ball value for HG/SS (0x86) is not within range.", "ContestZero": "컨디션은 0이어야 합니다.", "ContestZeroSheen": "Contest Stat Sheen should be 0.", "ContestSheenGEQ_0": "Contest Stat Sheen should be >= {0}.", @@ -372,4 +374,4 @@ "BulkHeldItemInventoryNotAcquired_0": "{0} has not been acquired in player inventory.", "BulkHeldItemInventoryUnassigned_0": "{0} is not marked as assigned in player inventory.", "BulkFusionSourceInvalid": "The subsumed Species-Form stored in the save file does not match the expected Species-Form of the fused slot." -} +} \ No newline at end of file diff --git a/PKHeX.Core/Resources/localize/legality/legality_zh-hans.json b/PKHeX.Core/Resources/localize/legality/legality_zh-hans.json index f9a0fbc60..a5e61d4b5 100644 --- a/PKHeX.Core/Resources/localize/legality/legality_zh-hans.json +++ b/PKHeX.Core/Resources/localize/legality/legality_zh-hans.json @@ -31,6 +31,8 @@ "BallSpecies": "不能以该球捕获宝可梦。", "BallSpeciesPass": "球对该种类合法。", "BallUnavailable": "在原来世代该球不可获得。", + "BallG4Sinnoh": "Ball value for D/P/Pt (0x83) is not within range.", + "BallG4Johto": "Extended Ball value for HG/SS (0x86) is not within range.", "ContestZero": "华丽大赛状态值应为0。", "ContestZeroSheen": "华丽大赛光泽度应为0。", "ContestSheenGEQ_0": "华丽大赛光泽度应 >= {0}。", @@ -372,4 +374,4 @@ "BulkHeldItemInventoryNotAcquired_0": "{0} has not been acquired in player inventory.", "BulkHeldItemInventoryUnassigned_0": "{0} is not marked as assigned in player inventory.", "BulkFusionSourceInvalid": "存档中记录的被消耗“种族-形态”与该融合槽位应有的“种族-形态”不一致。" -} +} \ No newline at end of file diff --git a/PKHeX.Core/Resources/localize/legality/legality_zh-hant.json b/PKHeX.Core/Resources/localize/legality/legality_zh-hant.json index 24268821b..67097ca59 100644 --- a/PKHeX.Core/Resources/localize/legality/legality_zh-hant.json +++ b/PKHeX.Core/Resources/localize/legality/legality_zh-hant.json @@ -31,6 +31,8 @@ "BallSpecies": "無法使用此球種捕獲該寶可夢。", "BallSpeciesPass": "可使用此球種捕獲該種類寶可夢。", "BallUnavailable": "於此寶可夢出身游戲世代中,該球種不可獲得。", + "BallG4Sinnoh": "Ball value for D/P/Pt (0x83) is not within range.", + "BallG4Johto": "Extended Ball value for HG/SS (0x86) is not within range.", "ContestZero": "華麗大賽狀態值應置「0」。", "ContestZeroSheen": "華麗大賽光澤度應置「0」。", "ContestSheenGEQ_0": "華麗大賽光澤度應大於或等於「 {0} 」。", @@ -372,4 +374,4 @@ "BulkHeldItemInventoryNotAcquired_0": "{0} has not been acquired in player inventory.", "BulkHeldItemInventoryUnassigned_0": "{0} is not marked as assigned in player inventory.", "BulkFusionSourceInvalid": "The subsumed Species-Form stored in the save file does not match the expected Species-Form of the fused slot." -} +} \ No newline at end of file diff --git a/PKHeX.WinForms/Resources/text/lang_de.txt b/PKHeX.WinForms/Resources/text/lang_de.txt index 5eb0406fd..711291c26 100644 --- a/PKHeX.WinForms/Resources/text/lang_de.txt +++ b/PKHeX.WinForms/Resources/text/lang_de.txt @@ -90,6 +90,23 @@ TrashEditor=Sonderzeichen About.L_Thanks=Danke an alle Mitwirkenden! About.Tab_Changelog=Änderungen About.Tab_Shortcuts=Shortcuts +BatchEdit.mnu_-=- +BatchEdit.mnu_!=! +BatchEdit.mnu_«=« +BatchEdit.mnu_»=» +BatchEdit.mnu_*=* +BatchEdit.mnu_/=/ +BatchEdit.mnu_&&=&& +BatchEdit.mnu_%=% +BatchEdit.mnu_^=^ +BatchEdit.mnu_+=+ +BatchEdit.mnu_<=< +BatchEdit.mnu_=== +BatchEdit.mnu_>=> +BatchEdit.mnu_|=| +BatchEdit.mnu_≤=≤ +BatchEdit.mnu_≥=≥ +BatchEdit.mnu_Set=Set BatchEditor.B_Add=Hinzufügen BatchEditor.B_Go=Ausführen BatchEditor.RB_Boxes=Boxen @@ -219,6 +236,8 @@ LocalizedDescription.ExportLegalityAlwaysVerbose=Always displays the verbose leg LocalizedDescription.ExportLegalityNeverClipboard=Always skips the prompt option asking if you would like to export a legality report to clipboard. LocalizedDescription.ExportLegalityVerboseProperties=Display all properties of the encounter (auto-generated) when exporting a verbose report. LocalizedDescription.ExtraProperties=Extra entity properties to try and show in addition to the default properties displayed. +LocalizedDescription.FilterMismatchGrayscale=Grayscale amount to apply to an entity that does not match a filter (0.0 = no grayscale, 1.0 = fully grayscale). +LocalizedDescription.FilterMismatchOpacity=Opacity of an entity that does not match a filter. LocalizedDescription.FilterUnavailableSpecies=Versteckt nicht erhältliche Pokémon, wenn diese nicht in den Spielstand importiert werden können. LocalizedDescription.FlagIllegal=Illegale Pokémon in den Boxen markieren LocalizedDescription.FocusBorderDeflate=Focus border indentation for custom drawn image controls. @@ -1022,6 +1041,7 @@ SAV_Database.Label_CurLevel=Level: SAV_Database.Label_HeldItem=Getragenes Item: SAV_Database.Label_HiddenPowerPrefix=Kraftreserve: SAV_Database.Label_Nature=Wesen: +SAV_Database.Label_Nickname=Nickname: SAV_Database.Label_Species=Spezies: SAV_Database.Menu_Close=Datei SAV_Database.Menu_DeleteClones=Lösche Klone diff --git a/PKHeX.WinForms/Resources/text/lang_en.txt b/PKHeX.WinForms/Resources/text/lang_en.txt index 025862bcb..3df778c8d 100644 --- a/PKHeX.WinForms/Resources/text/lang_en.txt +++ b/PKHeX.WinForms/Resources/text/lang_en.txt @@ -90,6 +90,23 @@ TrashEditor=Special Characters About.L_Thanks=Thanks to all the researchers! About.Tab_Changelog=Changelog About.Tab_Shortcuts=Shortcuts +BatchEdit.mnu_-=- +BatchEdit.mnu_!=! +BatchEdit.mnu_«=« +BatchEdit.mnu_»=» +BatchEdit.mnu_*=* +BatchEdit.mnu_/=/ +BatchEdit.mnu_&&=&& +BatchEdit.mnu_%=% +BatchEdit.mnu_^=^ +BatchEdit.mnu_+=+ +BatchEdit.mnu_<=< +BatchEdit.mnu_=== +BatchEdit.mnu_>=> +BatchEdit.mnu_|=| +BatchEdit.mnu_≤=≤ +BatchEdit.mnu_≥=≥ +BatchEdit.mnu_Set=Set BatchEditor.B_Add=Add BatchEditor.B_Go=Run BatchEditor.RB_Boxes=Boxes @@ -219,6 +236,8 @@ LocalizedDescription.ExportLegalityAlwaysVerbose=Always displays the verbose leg LocalizedDescription.ExportLegalityNeverClipboard=Always skips the prompt option asking if you would like to export a legality report to clipboard. LocalizedDescription.ExportLegalityVerboseProperties=Display all properties of the encounter (auto-generated) when exporting a verbose report. LocalizedDescription.ExtraProperties=Extra entity properties to try and show in addition to the default properties displayed. +LocalizedDescription.FilterMismatchGrayscale=Grayscale amount to apply to an entity that does not match a filter (0.0 = no grayscale, 1.0 = fully grayscale). +LocalizedDescription.FilterMismatchOpacity=Opacity of an entity that does not match a filter. LocalizedDescription.FilterUnavailableSpecies=Hides unavailable Species if the currently loaded save file cannot import them. LocalizedDescription.FlagIllegal=Flag Illegal Slots in Save File LocalizedDescription.FocusBorderDeflate=Focus border indentation for custom drawn image controls. @@ -1022,6 +1041,7 @@ SAV_Database.Label_CurLevel=Level: SAV_Database.Label_HeldItem=Held Item: SAV_Database.Label_HiddenPowerPrefix=Hidden Power: SAV_Database.Label_Nature=Nature: +SAV_Database.Label_Nickname=Nickname: SAV_Database.Label_Species=Species: SAV_Database.Menu_Close=File SAV_Database.Menu_DeleteClones=Delete Clones diff --git a/PKHeX.WinForms/Resources/text/lang_es-419.txt b/PKHeX.WinForms/Resources/text/lang_es-419.txt index 2bb3aefaa..2fb9aaefe 100644 --- a/PKHeX.WinForms/Resources/text/lang_es-419.txt +++ b/PKHeX.WinForms/Resources/text/lang_es-419.txt @@ -90,6 +90,23 @@ TrashEditor=Caracteres especiales About.L_Thanks=¡Gracias a todos los investigadores! About.Tab_Changelog=Registro de cambios About.Tab_Shortcuts=Accesos directos +BatchEdit.mnu_-=- +BatchEdit.mnu_!=! +BatchEdit.mnu_«=« +BatchEdit.mnu_»=» +BatchEdit.mnu_*=* +BatchEdit.mnu_/=/ +BatchEdit.mnu_&&=&& +BatchEdit.mnu_%=% +BatchEdit.mnu_^=^ +BatchEdit.mnu_+=+ +BatchEdit.mnu_<=< +BatchEdit.mnu_=== +BatchEdit.mnu_>=> +BatchEdit.mnu_|=| +BatchEdit.mnu_≤=≤ +BatchEdit.mnu_≥=≥ +BatchEdit.mnu_Set=Set BatchEditor.B_Add=Añadir BatchEditor.B_Go=Ejecutar BatchEditor.RB_Boxes=Cajas @@ -219,6 +236,8 @@ LocalizedDescription.ExportLegalityAlwaysVerbose=Always displays the verbose leg LocalizedDescription.ExportLegalityNeverClipboard=Always skips the prompt option asking if you would like to export a legality report to clipboard. LocalizedDescription.ExportLegalityVerboseProperties=Display all properties of the encounter (auto-generated) when exporting a verbose report. LocalizedDescription.ExtraProperties=Propiedades adicionales para mostrar junto a las propiedades por defecto. +LocalizedDescription.FilterMismatchGrayscale=Grayscale amount to apply to an entity that does not match a filter (0.0 = no grayscale, 1.0 = fully grayscale). +LocalizedDescription.FilterMismatchOpacity=Opacity of an entity that does not match a filter. LocalizedDescription.FilterUnavailableSpecies=Ocultar Especie no disponible si la partida cargada no puede importarla. LocalizedDescription.FlagIllegal=Detectar ilegal LocalizedDescription.FocusBorderDeflate=Focus border indentation for custom drawn image controls. @@ -1022,6 +1041,7 @@ SAV_Database.Label_CurLevel=Nivel: SAV_Database.Label_HeldItem=Objeto Equipado: SAV_Database.Label_HiddenPowerPrefix=Poder Oculto: SAV_Database.Label_Nature=Naturaleza: +SAV_Database.Label_Nickname=Nickname: SAV_Database.Label_Species=Especie: SAV_Database.Menu_Close=Archivo SAV_Database.Menu_DeleteClones=Eliminar clones diff --git a/PKHeX.WinForms/Resources/text/lang_es.txt b/PKHeX.WinForms/Resources/text/lang_es.txt index 8ee99ede3..d4b3191d9 100644 --- a/PKHeX.WinForms/Resources/text/lang_es.txt +++ b/PKHeX.WinForms/Resources/text/lang_es.txt @@ -90,6 +90,23 @@ TrashEditor=Caracteres especiales About.L_Thanks=¡Gracias a todos los investigadores! About.Tab_Changelog=Registro de cambios About.Tab_Shortcuts=Accesos directos +BatchEdit.mnu_-=- +BatchEdit.mnu_!=! +BatchEdit.mnu_«=« +BatchEdit.mnu_»=» +BatchEdit.mnu_*=* +BatchEdit.mnu_/=/ +BatchEdit.mnu_&&=&& +BatchEdit.mnu_%=% +BatchEdit.mnu_^=^ +BatchEdit.mnu_+=+ +BatchEdit.mnu_<=< +BatchEdit.mnu_=== +BatchEdit.mnu_>=> +BatchEdit.mnu_|=| +BatchEdit.mnu_≤=≤ +BatchEdit.mnu_≥=≥ +BatchEdit.mnu_Set=Set BatchEditor.B_Add=Añadir BatchEditor.B_Go=Ejecutar BatchEditor.RB_Boxes=Cajas @@ -219,6 +236,8 @@ LocalizedDescription.ExportLegalityAlwaysVerbose=Siempre muestra el informe de l LocalizedDescription.ExportLegalityNeverClipboard=Siempre omite la opción que pregunta si desea exportar un informe de legalidad al portapapeles. LocalizedDescription.ExportLegalityVerboseProperties=Mostrar todas las propiedades del encuentro (generadas automáticamente) al exportar un informe detallado. LocalizedDescription.ExtraProperties=Propiedades adicionales para mostrar junto a las propiedades por defecto. +LocalizedDescription.FilterMismatchGrayscale=Grayscale amount to apply to an entity that does not match a filter (0.0 = no grayscale, 1.0 = fully grayscale). +LocalizedDescription.FilterMismatchOpacity=Opacity of an entity that does not match a filter. LocalizedDescription.FilterUnavailableSpecies=Ocultar Especie no disponible si la partida cargada no puede importarla. LocalizedDescription.FlagIllegal=Detectar ilegal LocalizedDescription.FocusBorderDeflate=Sangría de borde de enfoque para controles de imágenes dibujadas personalizadas. @@ -1022,6 +1041,7 @@ SAV_Database.Label_CurLevel=Nivel: SAV_Database.Label_HeldItem=Objeto Equipado: SAV_Database.Label_HiddenPowerPrefix=Poder Oculto: SAV_Database.Label_Nature=Naturaleza: +SAV_Database.Label_Nickname=Nickname: SAV_Database.Label_Species=Especie: SAV_Database.Menu_Close=Archivo SAV_Database.Menu_DeleteClones=Eliminar clones diff --git a/PKHeX.WinForms/Resources/text/lang_fr.txt b/PKHeX.WinForms/Resources/text/lang_fr.txt index 9052c2c23..60397662d 100644 --- a/PKHeX.WinForms/Resources/text/lang_fr.txt +++ b/PKHeX.WinForms/Resources/text/lang_fr.txt @@ -90,6 +90,23 @@ TrashEditor=personnages spéciaux About.L_Thanks=Merci à tous les chercheurs ! About.Tab_Changelog=Suivi de changements About.Tab_Shortcuts=Raccourcis +BatchEdit.mnu_-=- +BatchEdit.mnu_!=! +BatchEdit.mnu_«=« +BatchEdit.mnu_»=» +BatchEdit.mnu_*=* +BatchEdit.mnu_/=/ +BatchEdit.mnu_&&=&& +BatchEdit.mnu_%=% +BatchEdit.mnu_^=^ +BatchEdit.mnu_+=+ +BatchEdit.mnu_<=< +BatchEdit.mnu_=== +BatchEdit.mnu_>=> +BatchEdit.mnu_|=| +BatchEdit.mnu_≤=≤ +BatchEdit.mnu_≥=≥ +BatchEdit.mnu_Set=Set BatchEditor.B_Add=Ajouter BatchEditor.B_Go=Exécuter BatchEditor.RB_Boxes=Boîtes @@ -219,6 +236,8 @@ LocalizedDescription.ExportLegalityAlwaysVerbose=Always displays the verbose leg LocalizedDescription.ExportLegalityNeverClipboard=Always skips the prompt option asking if you would like to export a legality report to clipboard. LocalizedDescription.ExportLegalityVerboseProperties=Display all properties of the encounter (auto-generated) when exporting a verbose report. LocalizedDescription.ExtraProperties=Extra entity properties to try and show in addition to the default properties displayed. +LocalizedDescription.FilterMismatchGrayscale=Grayscale amount to apply to an entity that does not match a filter (0.0 = no grayscale, 1.0 = fully grayscale). +LocalizedDescription.FilterMismatchOpacity=Opacity of an entity that does not match a filter. LocalizedDescription.FilterUnavailableSpecies=Hides unavailable Species if the currently loaded save file cannot import them. LocalizedDescription.FlagIllegal=Marquer les Pokémon illégaux dans la sauvegarde LocalizedDescription.FocusBorderDeflate=Focus border indentation for custom drawn image controls. @@ -1022,6 +1041,7 @@ SAV_Database.Label_CurLevel=Niveau : SAV_Database.Label_HeldItem=Objet : SAV_Database.Label_HiddenPowerPrefix=Puiss. Cachée : SAV_Database.Label_Nature=Nature : +SAV_Database.Label_Nickname=Nickname: SAV_Database.Label_Species=Espèce : SAV_Database.Menu_Close=Fichier SAV_Database.Menu_DeleteClones=Supprimer les clones diff --git a/PKHeX.WinForms/Resources/text/lang_it.txt b/PKHeX.WinForms/Resources/text/lang_it.txt index 090a0b7fa..e666a176f 100644 --- a/PKHeX.WinForms/Resources/text/lang_it.txt +++ b/PKHeX.WinForms/Resources/text/lang_it.txt @@ -90,6 +90,23 @@ TrashEditor=Caratteri Speciali About.L_Thanks=Grazie a tutti i ricercatori! About.Tab_Changelog=Log modifiche About.Tab_Shortcuts=Scorciatoie +BatchEdit.mnu_-=- +BatchEdit.mnu_!=! +BatchEdit.mnu_«=« +BatchEdit.mnu_»=» +BatchEdit.mnu_*=* +BatchEdit.mnu_/=/ +BatchEdit.mnu_&&=&& +BatchEdit.mnu_%=% +BatchEdit.mnu_^=^ +BatchEdit.mnu_+=+ +BatchEdit.mnu_<=< +BatchEdit.mnu_=== +BatchEdit.mnu_>=> +BatchEdit.mnu_|=| +BatchEdit.mnu_≤=≤ +BatchEdit.mnu_≥=≥ +BatchEdit.mnu_Set=Set BatchEditor.B_Add=Aggiungi BatchEditor.B_Go=Avvia BatchEditor.RB_Boxes=Box @@ -219,6 +236,8 @@ LocalizedDescription.ExportLegalityAlwaysVerbose=Always displays the verbose leg LocalizedDescription.ExportLegalityNeverClipboard=Always skips the prompt option asking if you would like to export a legality report to clipboard. LocalizedDescription.ExportLegalityVerboseProperties=Display all properties of the encounter (auto-generated) when exporting a verbose report. LocalizedDescription.ExtraProperties=Extra entity properties to try and show in addition to the default properties displayed. +LocalizedDescription.FilterMismatchGrayscale=Grayscale amount to apply to an entity that does not match a filter (0.0 = no grayscale, 1.0 = fully grayscale). +LocalizedDescription.FilterMismatchOpacity=Opacity of an entity that does not match a filter. LocalizedDescription.FilterUnavailableSpecies=Nascondi specie non disponibili se il salvatggio caricato non è in grado di importarli. LocalizedDescription.FlagIllegal=Segnala Slot Illegali nel Salvataggio LocalizedDescription.FocusBorderDeflate=Focus border indentation for custom drawn image controls. @@ -1022,6 +1041,7 @@ SAV_Database.Label_CurLevel=Livello: SAV_Database.Label_HeldItem=Strumento Tenuto: SAV_Database.Label_HiddenPowerPrefix=Introforza: SAV_Database.Label_Nature=Natura: +SAV_Database.Label_Nickname=Nickname: SAV_Database.Label_Species=Specie: SAV_Database.Menu_Close=File SAV_Database.Menu_DeleteClones=Elimina Cloni diff --git a/PKHeX.WinForms/Resources/text/lang_ja.txt b/PKHeX.WinForms/Resources/text/lang_ja.txt index e31e150c7..c7fcacc13 100644 --- a/PKHeX.WinForms/Resources/text/lang_ja.txt +++ b/PKHeX.WinForms/Resources/text/lang_ja.txt @@ -90,6 +90,23 @@ TrashEditor=Special Characters About.L_Thanks=Thanks to all the researchers! About.Tab_Changelog=変更履歴 About.Tab_Shortcuts=ショートカット +BatchEdit.mnu_-=- +BatchEdit.mnu_!=! +BatchEdit.mnu_«=« +BatchEdit.mnu_»=» +BatchEdit.mnu_*=* +BatchEdit.mnu_/=/ +BatchEdit.mnu_&&=&& +BatchEdit.mnu_%=% +BatchEdit.mnu_^=^ +BatchEdit.mnu_+=+ +BatchEdit.mnu_<=< +BatchEdit.mnu_=== +BatchEdit.mnu_>=> +BatchEdit.mnu_|=| +BatchEdit.mnu_≤=≤ +BatchEdit.mnu_≥=≥ +BatchEdit.mnu_Set=Set BatchEditor.B_Add=追加 BatchEditor.B_Go=実行 BatchEditor.RB_Boxes=ボックス @@ -219,6 +236,8 @@ LocalizedDescription.ExportLegalityAlwaysVerbose=Always displays the verbose leg LocalizedDescription.ExportLegalityNeverClipboard=Always skips the prompt option asking if you would like to export a legality report to clipboard. LocalizedDescription.ExportLegalityVerboseProperties=Display all properties of the encounter (auto-generated) when exporting a verbose report. LocalizedDescription.ExtraProperties=Extra entity properties to try and show in addition to the default properties displayed. +LocalizedDescription.FilterMismatchGrayscale=Grayscale amount to apply to an entity that does not match a filter (0.0 = no grayscale, 1.0 = fully grayscale). +LocalizedDescription.FilterMismatchOpacity=Opacity of an entity that does not match a filter. LocalizedDescription.FilterUnavailableSpecies=読み込まれているセーブファイルにインポートできないポケモンがいた場合、非表示にします。 LocalizedDescription.FlagIllegal=不正ポケモンのアイコンを表示。 LocalizedDescription.FocusBorderDeflate=Focus border indentation for custom drawn image controls. @@ -1022,6 +1041,7 @@ SAV_Database.Label_CurLevel=Lv SAV_Database.Label_HeldItem=持ち物 SAV_Database.Label_HiddenPowerPrefix=めざめるパワー SAV_Database.Label_Nature=性格 +SAV_Database.Label_Nickname=Nickname: SAV_Database.Label_Species=ポケモン SAV_Database.Menu_Close=ファイル SAV_Database.Menu_DeleteClones=複製を削除 diff --git a/PKHeX.WinForms/Resources/text/lang_ko.txt b/PKHeX.WinForms/Resources/text/lang_ko.txt index 517520eaa..1aeeeaad7 100644 --- a/PKHeX.WinForms/Resources/text/lang_ko.txt +++ b/PKHeX.WinForms/Resources/text/lang_ko.txt @@ -90,6 +90,23 @@ TrashEditor=특수 문자 About.L_Thanks=모든 기여자분들께 감사드립니다! About.Tab_Changelog=변경 사항 About.Tab_Shortcuts=간편 사용법 +BatchEdit.mnu_-=- +BatchEdit.mnu_!=! +BatchEdit.mnu_«=« +BatchEdit.mnu_»=» +BatchEdit.mnu_*=* +BatchEdit.mnu_/=/ +BatchEdit.mnu_&&=&& +BatchEdit.mnu_%=% +BatchEdit.mnu_^=^ +BatchEdit.mnu_+=+ +BatchEdit.mnu_<=< +BatchEdit.mnu_=== +BatchEdit.mnu_>=> +BatchEdit.mnu_|=| +BatchEdit.mnu_≤=≤ +BatchEdit.mnu_≥=≥ +BatchEdit.mnu_Set=Set BatchEditor.B_Add=추가 BatchEditor.B_Go=실행 BatchEditor.RB_Boxes=박스 @@ -219,6 +236,8 @@ LocalizedDescription.ExportLegalityAlwaysVerbose=Always displays the verbose leg LocalizedDescription.ExportLegalityNeverClipboard=Always skips the prompt option asking if you would like to export a legality report to clipboard. LocalizedDescription.ExportLegalityVerboseProperties=Display all properties of the encounter (auto-generated) when exporting a verbose report. LocalizedDescription.ExtraProperties=Extra entity properties to try and show in addition to the default properties displayed. +LocalizedDescription.FilterMismatchGrayscale=Grayscale amount to apply to an entity that does not match a filter (0.0 = no grayscale, 1.0 = fully grayscale). +LocalizedDescription.FilterMismatchOpacity=Opacity of an entity that does not match a filter. LocalizedDescription.FilterUnavailableSpecies=Hides unavailable Species if the currently loaded save file cannot import them. LocalizedDescription.FlagIllegal=세이브 파일에서 적법하지 않은 포켓몬 표시 LocalizedDescription.FocusBorderDeflate=Focus border indentation for custom drawn image controls. @@ -1022,6 +1041,7 @@ SAV_Database.Label_CurLevel=레벨: SAV_Database.Label_HeldItem=지닌 물건: SAV_Database.Label_HiddenPowerPrefix=잠재파워: SAV_Database.Label_Nature=성격: +SAV_Database.Label_Nickname=Nickname: SAV_Database.Label_Species=종류: SAV_Database.Menu_Close=파일 SAV_Database.Menu_DeleteClones=복제된 포켓몬 삭제 diff --git a/PKHeX.WinForms/Resources/text/lang_zh-Hans.txt b/PKHeX.WinForms/Resources/text/lang_zh-Hans.txt index 0a9a38bf0..ac7b7305f 100644 --- a/PKHeX.WinForms/Resources/text/lang_zh-Hans.txt +++ b/PKHeX.WinForms/Resources/text/lang_zh-Hans.txt @@ -90,6 +90,23 @@ TrashEditor=特殊字符 About.L_Thanks=感谢所有研究人员! About.Tab_Changelog=更新日志 About.Tab_Shortcuts=快捷键 +BatchEdit.mnu_-=- +BatchEdit.mnu_!=! +BatchEdit.mnu_«=« +BatchEdit.mnu_»=» +BatchEdit.mnu_*=* +BatchEdit.mnu_/=/ +BatchEdit.mnu_&&=&& +BatchEdit.mnu_%=% +BatchEdit.mnu_^=^ +BatchEdit.mnu_+=+ +BatchEdit.mnu_<=< +BatchEdit.mnu_=== +BatchEdit.mnu_>=> +BatchEdit.mnu_|=| +BatchEdit.mnu_≤=≤ +BatchEdit.mnu_≥=≥ +BatchEdit.mnu_Set=Set BatchEditor.B_Add=增加 BatchEditor.B_Go=运行 BatchEditor.RB_Boxes=盒子 @@ -219,6 +236,8 @@ LocalizedDescription.ExportLegalityAlwaysVerbose=始终显示详细的合法性 LocalizedDescription.ExportLegalityNeverClipboard=始终跳过询问是否将合法性报告导出至剪贴板的提示选项。 LocalizedDescription.ExportLegalityVerboseProperties=导出详细报告时显示遭遇的所有信息(自动生成)。 LocalizedDescription.ExtraProperties=除了显示的默认信息之外,还尝试显示额外的信息。 +LocalizedDescription.FilterMismatchGrayscale=Grayscale amount to apply to an entity that does not match a filter (0.0 = no grayscale, 1.0 = fully grayscale). +LocalizedDescription.FilterMismatchOpacity=Opacity of an entity that does not match a filter. LocalizedDescription.FilterUnavailableSpecies=隐藏当前存档无法导入的宝可梦种类。 LocalizedDescription.FlagIllegal=标记非法。 LocalizedDescription.FocusBorderDeflate=自定义调整图标模块与的边框距离。 @@ -1022,6 +1041,7 @@ SAV_Database.Label_CurLevel=等级: SAV_Database.Label_HeldItem=持有物: SAV_Database.Label_HiddenPowerPrefix=觉醒力量: SAV_Database.Label_Nature=性格: +SAV_Database.Label_Nickname=Nickname: SAV_Database.Label_Species=种类: SAV_Database.Menu_Close=文件 SAV_Database.Menu_DeleteClones=删除重复 diff --git a/PKHeX.WinForms/Resources/text/lang_zh-Hant.txt b/PKHeX.WinForms/Resources/text/lang_zh-Hant.txt index fb0853e23..92f48f4c1 100644 --- a/PKHeX.WinForms/Resources/text/lang_zh-Hant.txt +++ b/PKHeX.WinForms/Resources/text/lang_zh-Hant.txt @@ -90,6 +90,23 @@ TrashEditor=特殊字元 About.L_Thanks=向各界研究人員致謝! About.Tab_Changelog=更新日誌 About.Tab_Shortcuts=快捷鍵 +BatchEdit.mnu_-=- +BatchEdit.mnu_!=! +BatchEdit.mnu_«=« +BatchEdit.mnu_»=» +BatchEdit.mnu_*=* +BatchEdit.mnu_/=/ +BatchEdit.mnu_&&=&& +BatchEdit.mnu_%=% +BatchEdit.mnu_^=^ +BatchEdit.mnu_+=+ +BatchEdit.mnu_<=< +BatchEdit.mnu_=== +BatchEdit.mnu_>=> +BatchEdit.mnu_|=| +BatchEdit.mnu_≤=≤ +BatchEdit.mnu_≥=≥ +BatchEdit.mnu_Set=Set BatchEditor.B_Add=增加 BatchEditor.B_Go=運行 BatchEditor.RB_Boxes=盒子 @@ -219,6 +236,8 @@ LocalizedDescription.ExportLegalityAlwaysVerbose=Always displays the verbose leg LocalizedDescription.ExportLegalityNeverClipboard=Always skips the prompt option asking if you would like to export a legality report to clipboard. LocalizedDescription.ExportLegalityVerboseProperties=Display all properties of the encounter (auto-generated) when exporting a verbose report. LocalizedDescription.ExtraProperties=Extra entity properties to try and show in addition to the default properties displayed. +LocalizedDescription.FilterMismatchGrayscale=Grayscale amount to apply to an entity that does not match a filter (0.0 = no grayscale, 1.0 = fully grayscale). +LocalizedDescription.FilterMismatchOpacity=Opacity of an entity that does not match a filter. LocalizedDescription.FilterUnavailableSpecies=隱藏無法匯入當前儲存資料之寶可夢種類 LocalizedDescription.FlagIllegal=標記不合法 LocalizedDescription.FocusBorderDeflate=Focus border indentation for custom drawn image controls. @@ -1022,6 +1041,7 @@ SAV_Database.Label_CurLevel=等級: SAV_Database.Label_HeldItem=携帶物品: SAV_Database.Label_HiddenPowerPrefix=覺醒力量: SAV_Database.Label_Nature=性格: +SAV_Database.Label_Nickname=Nickname: SAV_Database.Label_Species=種類: SAV_Database.Menu_Close=檔案 SAV_Database.Menu_DeleteClones=刪除重複 diff --git a/PKHeX.WinForms/Util/WinFormsTranslator.cs b/PKHeX.WinForms/Util/WinFormsTranslator.cs index abe9ee0f5..94a929487 100644 --- a/PKHeX.WinForms/Util/WinFormsTranslator.cs +++ b/PKHeX.WinForms/Util/WinFormsTranslator.cs @@ -223,7 +223,7 @@ public static void ReformatDark(Control z) else if (z is ButtonBase b) { b.FlatStyle = FlatStyle.Popup; - if (b.Image is Bitmap bmp) + if (b is Button { Image: Bitmap bmp }) b.Image = WinFormsUtil.BlackToWhite(bmp); } }