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); } }