Merge type check with usage in if statements

if x is y with z property true, then :D
This commit is contained in:
Kurt 2020-12-21 22:33:48 -08:00
parent 4890e0e952
commit 514b60b447
29 changed files with 60 additions and 60 deletions

View file

@ -24,7 +24,7 @@
{ {
case EncounterTrade1 c: case EncounterTrade1 c:
return c.GetInitialCatchRate(); return c.GetInitialCatchRate();
case EncounterStatic s when s.Version == GameVersion.Stadium && s.Species == (int)Species.Psyduck: case EncounterStatic1E { Version: GameVersion.Stadium, Species: (int)Species.Psyduck}:
return pk1.Japanese ? 167 : 168; // Amnesia Psyduck has different catch rates depending on language return pk1.Japanese ? 167 : 168; // Amnesia Psyduck has different catch rates depending on language
default: default:
{ {

View file

@ -415,7 +415,7 @@ namespace PKHeX.Core
/// <param name="la">Precomputed optional</param> /// <param name="la">Precomputed optional</param>
public static void SetDefaultNickname(this PKM pk, LegalityAnalysis la) public static void SetDefaultNickname(this PKM pk, LegalityAnalysis la)
{ {
if (la.Parsed && la.EncounterOriginal is EncounterTrade t && t.HasNickname) if (la.Parsed && la.EncounterOriginal is EncounterTrade {HasNickname: true} t)
pk.SetNickname(t.GetNickname(pk.Language)); pk.SetNickname(t.GetNickname(pk.Language));
else else
pk.ClearNickname(); pk.ClearNickname();

View file

@ -28,7 +28,7 @@ namespace PKHeX.Core
new BoxManipSort(BoxManipType.SortLevelReverse, PKMSorting.OrderByDescendingLevel), new BoxManipSort(BoxManipType.SortLevelReverse, PKMSorting.OrderByDescendingLevel),
new BoxManipSort(BoxManipType.SortDate, PKMSorting.OrderByDateObtained, s => s.Generation >= 4), new BoxManipSort(BoxManipType.SortDate, PKMSorting.OrderByDateObtained, s => s.Generation >= 4),
new BoxManipSort(BoxManipType.SortName, list => list.OrderBySpeciesName(GameInfo.Strings.Species)), new BoxManipSort(BoxManipType.SortName, list => list.OrderBySpeciesName(GameInfo.Strings.Species)),
new BoxManipSort(BoxManipType.SortFavorite, list => list.OrderByCustom(pk => pk is PB7 pb7 && pb7.Favorite), s => s is SAV7b), new BoxManipSort(BoxManipType.SortFavorite, list => list.OrderByCustom(pk => pk is PB7 {Favorite: true}), s => s is SAV7b),
new BoxManipSortComplex(BoxManipType.SortParty, (list, sav) => list.OrderByCustom(pk => ((SAV7b)sav).Blocks.Storage.GetPartyIndex(pk.Box - 1, pk.Slot - 1)), s => s is SAV7b), new BoxManipSortComplex(BoxManipType.SortParty, (list, sav) => list.OrderByCustom(pk => ((SAV7b)sav).Blocks.Storage.GetPartyIndex(pk.Box - 1, pk.Slot - 1)), s => s is SAV7b),
new BoxManipSort(BoxManipType.SortShiny, list => list.OrderByCustom(pk => !pk.IsShiny)), new BoxManipSort(BoxManipType.SortShiny, list => list.OrderByCustom(pk => !pk.IsShiny)),
new BoxManipSort(BoxManipType.SortRandom, list => list.OrderByCustom(_ => Util.Rand32())), new BoxManipSort(BoxManipType.SortRandom, list => list.OrderByCustom(_ => Util.Rand32())),

View file

@ -174,7 +174,7 @@ namespace PKHeX.Core
new(dc.Data, 0, Daycare8.GetDaycareSlotOffset(1, 1)) {Type = StorageSlotType.Daycare}, new(dc.Data, 0, Daycare8.GetDaycareSlotOffset(1, 1)) {Type = StorageSlotType.Daycare},
}; };
if (sav is SAV8SWSH s8 && s8.SaveRevision >= 2) if (sav is SAV8SWSH {SaveRevision: >= 2} s8)
{ {
var block = s8.Blocks.GetBlockSafe(SaveBlockAccessor8SWSH.KFusedCalyrex); var block = s8.Blocks.GetBlockSafe(SaveBlockAccessor8SWSH.KFusedCalyrex);
var c = new SlotInfoMisc(block.Data, 3, 0, true) {Type = StorageSlotType.Fused}; var c = new SlotInfoMisc(block.Data, 3, 0, true) {Type = StorageSlotType.Fused};

View file

@ -115,9 +115,7 @@ namespace PKHeX.Core
{ {
var dupes = AllAnalysis.Where(z => var dupes = AllAnalysis.Where(z =>
z.Info.Generation >= 3 z.Info.Generation >= 3
&& z.EncounterOriginal is MysteryGift g && z.EncounterOriginal is MysteryGift {EggEncounter: true} && !z.pkm.WasTradedEgg)
&& g.EggEncounter
&& !z.pkm.WasTradedEgg)
.GroupBy(z => ((MysteryGift)z.EncounterOriginal).CardTitle); .GroupBy(z => ((MysteryGift)z.EncounterOriginal).CardTitle);
foreach (var dupe in dupes) foreach (var dupe in dupes)
@ -268,9 +266,9 @@ namespace PKHeX.Core
private bool VerifyIDReuse(PKM pp, LegalityAnalysis pa, PKM cp, LegalityAnalysis ca) private bool VerifyIDReuse(PKM pp, LegalityAnalysis pa, PKM cp, LegalityAnalysis ca)
{ {
if (pa.EncounterMatch is MysteryGift g1 && !g1.EggEncounter) if (pa.EncounterMatch is MysteryGift {EggEncounter: false})
return false; return false;
if (ca.EncounterMatch is MysteryGift g2 && !g2.EggEncounter) if (ca.EncounterMatch is MysteryGift {EggEncounter: false})
return false; return false;
const CheckIdentifier ident = CheckIdentifier.Trainer; const CheckIdentifier ident = CheckIdentifier.Trainer;

View file

@ -180,7 +180,7 @@ namespace PKHeX.Core
return e.Language == EncounterGBLanguage.Japanese ? 1 : 2; return e.Language == EncounterGBLanguage.Japanese ? 1 : 2;
// E-Reader was only available to Japanese games. // E-Reader was only available to Japanese games.
case EncounterStaticShadow s when s.EReader: case EncounterStaticShadow {EReader: true}:
// Old Sea Map was only distributed to Japanese games. // Old Sea Map was only distributed to Japanese games.
case EncounterStatic3 _ when Species == (int)Core.Species.Mew: case EncounterStatic3 _ when Species == (int)Core.Species.Mew:
pk.OT_Name = "ゲーフリ"; pk.OT_Name = "ゲーフリ";
@ -200,7 +200,7 @@ namespace PKHeX.Core
{ {
switch (Generation) switch (Generation)
{ {
case 3 when this is EncounterStatic3 s3 && s3.Roaming && Version != GameVersion.E: // Roamer IV glitch was fixed in Emerald case 3 when this is EncounterStatic3 {Roaming: true} && Version != GameVersion.E: // Roamer IV glitch was fixed in Emerald
return PIDType.Method_1_Roamer; return PIDType.Method_1_Roamer;
case 4 when Shiny == Shiny.Always: // Lake of Rage Gyarados case 4 when Shiny == Shiny.Always: // Lake of Rage Gyarados
return PIDType.ChainShiny; return PIDType.ChainShiny;

View file

@ -241,7 +241,7 @@ namespace PKHeX.Core
var gifts = MysteryGiftGenerator.GetPossible(pk, chain); var gifts = MysteryGiftGenerator.GetPossible(pk, chain);
foreach (var gift in gifts) foreach (var gift in gifts)
{ {
if (gift is WC3 wc3 && wc3.NotDistributed) if (gift is WC3 {NotDistributed: true})
continue; continue;
if (needs.Count == 0) if (needs.Count == 0)
{ {

View file

@ -117,7 +117,7 @@ namespace PKHeX.Core
private static bool IsHiddenAbilitySlot(this EncounterSlot slot) private static bool IsHiddenAbilitySlot(this EncounterSlot slot)
{ {
return (slot is EncounterSlot6AO ao && ao.CanDexNav) || slot.Area.Type == SlotType.FriendSafari || slot.Area.Type == SlotType.Horde || slot.Area.Type == SlotType.SOS; return slot is EncounterSlot6AO {CanDexNav: true} || slot.Area.Type == SlotType.FriendSafari || slot.Area.Type == SlotType.Horde || slot.Area.Type == SlotType.SOS;
} }
internal static EncounterSlot? GetCaptureLocation(PKM pkm) internal static EncounterSlot? GetCaptureLocation(PKM pkm)

View file

@ -263,7 +263,7 @@ namespace PKHeX.Core
switch (s.Generation) switch (s.Generation)
{ {
case 3: case 3:
if (s is EncounterStaticShadow w && w.EReader && pkm.Language != (int)LanguageID.Japanese) // Non-JP E-reader Pokemon if (s is EncounterStaticShadow {EReader: true} && pkm.Language != (int)LanguageID.Japanese) // Non-JP E-reader Pokemon
return new CheckResult(Severity.Invalid, LG3EReader, CheckIdentifier.Encounter); return new CheckResult(Severity.Invalid, LG3EReader, CheckIdentifier.Encounter);
if (pkm.Species == (int)Species.Mew && s.Location == 201 && pkm.Language != (int)LanguageID.Japanese) // Non-JP Mew (Old Sea Map) if (pkm.Species == (int)Species.Mew && s.Location == 201 && pkm.Language != (int)LanguageID.Japanese) // Non-JP Mew (Old Sea Map)
@ -282,7 +282,7 @@ namespace PKHeX.Core
case (int)Species.Arceus when s.Location == 086: // Azure Flute Arceus case (int)Species.Arceus when s.Location == 086: // Azure Flute Arceus
return new CheckResult(Severity.Invalid, LEncUnreleasedHoOArceus, CheckIdentifier.Encounter); return new CheckResult(Severity.Invalid, LEncUnreleasedHoOArceus, CheckIdentifier.Encounter);
} }
if (pkm.Met_Location == 193 && s is EncounterStaticTyped t && t.TypeEncounter == EncounterType.Surfing_Fishing) // Roaming pokemon surfing in Johto Route 45 if (pkm.Met_Location == 193 && s is EncounterStaticTyped {TypeEncounter: EncounterType.Surfing_Fishing}) // Roaming pokemon surfing in Johto Route 45
return new CheckResult(Severity.Invalid, LG4InvalidTileR45Surf, CheckIdentifier.Encounter); return new CheckResult(Severity.Invalid, LG4InvalidTileR45Surf, CheckIdentifier.Encounter);
break; break;
case 7: case 7:

View file

@ -166,11 +166,11 @@ namespace PKHeX.Core
{ {
// Gigantamax Pikachu, Meowth-0, and Eevee are prevented from evolving. // Gigantamax Pikachu, Meowth-0, and Eevee are prevented from evolving.
// Raichu cannot be evolved to the Alolan variant at this time. // Raichu cannot be evolved to the Alolan variant at this time.
BanEvo((int)Species.Raichu, 0, pkm => pkm is IGigantamax g && g.CanGigantamax); BanEvo((int)Species.Raichu, 0, pkm => pkm is IGigantamax {CanGigantamax: true});
BanEvo((int)Species.Raichu, 1, pkm => (pkm is IGigantamax g && g.CanGigantamax) || pkm.Version >= (int)GP || pkm.Version == (int)GO); BanEvo((int)Species.Raichu, 1, pkm => (pkm is IGigantamax {CanGigantamax: true}) || pkm.Version >= (int)GP || pkm.Version == (int)GO);
BanEvo((int)Species.Persian, 0, pkm => pkm is IGigantamax g && g.CanGigantamax); BanEvo((int)Species.Persian, 0, pkm => pkm is IGigantamax {CanGigantamax: true});
BanEvo((int)Species.Persian, 1, pkm => pkm is IGigantamax g && g.CanGigantamax); BanEvo((int)Species.Persian, 1, pkm => pkm is IGigantamax {CanGigantamax: true});
BanEvo((int)Species.Perrserker, 0, pkm => pkm is IGigantamax g && g.CanGigantamax); BanEvo((int)Species.Perrserker, 0, pkm => pkm is IGigantamax {CanGigantamax: true});
BanEvo((int)Species.Exeggutor, 1, pkm => pkm.Version >= (int)GP || pkm.Version == (int)GO); BanEvo((int)Species.Exeggutor, 1, pkm => pkm.Version >= (int)GP || pkm.Version == (int)GO);
BanEvo((int)Species.Marowak, 1, pkm => pkm.Version >= (int)GP || pkm.Version == (int)GO); BanEvo((int)Species.Marowak, 1, pkm => pkm.Version >= (int)GP || pkm.Version == (int)GO);
@ -178,7 +178,7 @@ namespace PKHeX.Core
BanEvo((int)Species.MrMime, 0, pkm => pkm.Version >= (int)SW); BanEvo((int)Species.MrMime, 0, pkm => pkm.Version >= (int)SW);
foreach (var s in GetEvolutions((int)Species.Eevee, 0)) // Eeveelutions foreach (var s in GetEvolutions((int)Species.Eevee, 0)) // Eeveelutions
BanEvo(s, 0, pkm => pkm is IGigantamax g && g.CanGigantamax); BanEvo(s, 0, pkm => pkm is IGigantamax {CanGigantamax: true});
} }
private void BanEvo(int species, int form, Func<PKM, bool> func) private void BanEvo(int species, int form, Func<PKM, bool> func)

View file

@ -221,7 +221,7 @@ namespace PKHeX.Core
if (pkm.Version == (int)GameVersion.CXD) if (pkm.Version == (int)GameVersion.CXD)
CXD.Verify(this); CXD.Verify(this);
if (Info.EncounterMatch is WC3 z && z.NotDistributed) if (Info.EncounterMatch is WC3 {NotDistributed: true})
AddLine(Severity.Invalid, LEncUnreleased, CheckIdentifier.Encounter); AddLine(Severity.Invalid, LEncUnreleased, CheckIdentifier.Encounter);
if (pkm.Format >= 8) if (pkm.Format >= 8)

View file

@ -68,7 +68,7 @@ namespace PKHeX.Core
} }
var enc = data.EncounterMatch; var enc = data.EncounterMatch;
if (enc is MysteryGift g && g.Generation >= 4) if (enc is MysteryGift {Generation: >= 4} g)
return VerifyAbilityMG(data, g, abilities); return VerifyAbilityMG(data, g, abilities);
if (format < 6) if (format < 6)
@ -298,7 +298,7 @@ namespace PKHeX.Core
// hidden abilities // hidden abilities
if (enc is EncounterSlot slot) if (enc is EncounterSlot slot)
{ {
bool valid = (slot is EncounterSlot6AO ao && ao.CanDexNav) || slot.Area.Type == SlotType.FriendSafari || slot.Area.Type == SlotType.Horde; bool valid = slot is EncounterSlot6AO {CanDexNav: true} || slot.Area.Type == SlotType.FriendSafari || slot.Area.Type == SlotType.Horde;
if (!valid) if (!valid)
return GetInvalid(LAbilityMismatchHordeSafari); return GetInvalid(LAbilityMismatchHordeSafari);
} }

View file

@ -32,7 +32,7 @@ namespace PKHeX.Core
return VerifyBallMysteryGift(data, g); return VerifyBallMysteryGift(data, g);
case EncounterTrade t: case EncounterTrade t:
return VerifyBallEquals(data, t.Ball); return VerifyBallEquals(data, t.Ball);
case EncounterStatic s when s.Gift: case EncounterStatic {Gift: true} s:
return VerifyBallEquals(data, s.Ball); return VerifyBallEquals(data, s.Ball);
case EncounterSlot8GO _: // Already a strict match case EncounterSlot8GO _: // Already a strict match
return GetResult(true); return GetResult(true);

View file

@ -26,7 +26,7 @@ namespace PKHeX.Core
if (data.pkm is IGeoTrack t) if (data.pkm is IGeoTrack t)
VerifyGeoLocationData(data, t, data.pkm); VerifyGeoLocationData(data, t, data.pkm);
if (pkm.VC && pkm is PK7 g && g.Geo1_Country == 0) // VC transfers set Geo1 Country if (pkm.VC && pkm is PK7 {Geo1_Country: 0}) // VC transfers set Geo1 Country
data.AddLine(GetInvalid(LegalityCheckStrings.LGeoMemoryMissing)); data.AddLine(GetInvalid(LegalityCheckStrings.LGeoMemoryMissing));
if (!pkm.IsUntraded) if (!pkm.IsUntraded)

View file

@ -23,7 +23,7 @@ namespace PKHeX.Core
break; break;
case WC7 wc7 when wc7.MetLevel == pkm.Met_Level: case WC7 wc7 when wc7.MetLevel == pkm.Met_Level:
break; break;
case PGT pgt when pgt.IsManaphyEgg && pkm.Met_Level == 0: case PGT {IsManaphyEgg: true} when pkm.Met_Level == 0:
break; break;
default: default:
data.AddLine(GetInvalid(LLevelMetGift)); data.AddLine(GetInvalid(LLevelMetGift));
@ -46,7 +46,7 @@ namespace PKHeX.Core
return; return;
} }
var reqEXP = EncounterMatch is EncounterStatic s && s.Version == GameVersion.C var reqEXP = EncounterMatch is EncounterStatic {Version: GameVersion.C}
? 125 // Gen2 Dizzy Punch gifts always have 125 EXP, even if it's more than the Lv5 exp required. ? 125 // Gen2 Dizzy Punch gifts always have 125 EXP, even if it's more than the Lv5 exp required.
: Experience.GetEXP(elvl, pkm.PersonalInfo.EXPGrowth); : Experience.GetEXP(elvl, pkm.PersonalInfo.EXPGrowth);
if (reqEXP != pkm.EXP) if (reqEXP != pkm.EXP)

View file

@ -143,13 +143,13 @@ namespace PKHeX.Core
switch (data.EncounterMatch) switch (data.EncounterMatch)
{ {
case WC6 g when !g.IsEgg && g.OTGender != 3: case WC6 {IsEgg: false} g when g.OTGender != 3:
VerifyOTMemoryIs(data, g.OT_Memory, g.OT_Intensity, g.OT_TextVar, g.OT_Feeling); VerifyOTMemoryIs(data, g.OT_Memory, g.OT_Intensity, g.OT_TextVar, g.OT_Feeling);
return; return;
case WC7 g when !g.IsEgg && g.OTGender != 3: case WC7 {IsEgg: false} g when g.OTGender != 3:
VerifyOTMemoryIs(data, g.OT_Memory, g.OT_Intensity, g.OT_TextVar, g.OT_Feeling); VerifyOTMemoryIs(data, g.OT_Memory, g.OT_Intensity, g.OT_TextVar, g.OT_Feeling);
return; return;
case WC8 g when !g.IsEgg && g.OTGender != 3: case WC8 {IsEgg: false} g when g.OTGender != 3:
VerifyOTMemoryIs(data, g.OT_Memory, g.OT_Intensity, g.OT_TextVar, g.OT_Feeling); VerifyOTMemoryIs(data, g.OT_Memory, g.OT_Intensity, g.OT_TextVar, g.OT_Feeling);
return; return;

View file

@ -49,7 +49,7 @@ namespace PKHeX.Core
switch (pkm) switch (pkm)
{ {
case PK7 pk7 when pk7.ResortEventStatus >= 20: case PK7 {ResortEventStatus: >= 20}:
data.AddLine(GetInvalid(LTransferBad)); data.AddLine(GetInvalid(LTransferBad));
break; break;
case PB7 pb7: case PB7 pb7:
@ -137,7 +137,7 @@ namespace PKHeX.Core
CheckResult GetWasNotTradeback() CheckResult GetWasNotTradeback()
{ {
if ((e is EncounterStatic1 s && s.Version == GameVersion.Stadium) || e is EncounterTrade1) if (e is EncounterStatic1E {Version: GameVersion.Stadium} || e is EncounterTrade1)
return GetValid(LG1CatchRateMatchPrevious); // Encounters detected by the catch rate, cant be invalid if match this encounters return GetValid(LG1CatchRateMatchPrevious); // Encounters detected by the catch rate, cant be invalid if match this encounters
int species = pk1.Species; int species = pk1.Species;
@ -164,7 +164,7 @@ namespace PKHeX.Core
var EncounterMatch = data.EncounterMatch; var EncounterMatch = data.EncounterMatch;
switch (EncounterMatch) switch (EncounterMatch)
{ {
case WC3 w when w.Fateful: case WC3 {Fateful: true} w:
if (w.IsEgg) if (w.IsEgg)
{ {
// Eggs hatched in RS clear the obedience flag! // Eggs hatched in RS clear the obedience flag!
@ -187,7 +187,7 @@ namespace PKHeX.Core
VerifyReceivability(data, g); VerifyReceivability(data, g);
VerifyFatefulMysteryGift(data, g); VerifyFatefulMysteryGift(data, g);
return; return;
case EncounterStatic s when s.Fateful: // ingame fateful case EncounterStatic {Fateful: true}: // ingame fateful
case EncounterSlot3PokeSpot _: // ingame pokespot case EncounterSlot3PokeSpot _: // ingame pokespot
case EncounterTrade4Ranch _: // ranch varied PID case EncounterTrade4Ranch _: // ranch varied PID
VerifyFatefulIngameActive(data); VerifyFatefulIngameActive(data);
@ -244,7 +244,7 @@ namespace PKHeX.Core
private static void VerifyFatefulMysteryGift(LegalityAnalysis data, MysteryGift g) private static void VerifyFatefulMysteryGift(LegalityAnalysis data, MysteryGift g)
{ {
var pkm = data.pkm; var pkm = data.pkm;
if (g is PGF p && p.IsShiny) if (g is PGF {IsShiny: true})
{ {
var Info = data.Info; var Info = data.Info;
Info.PIDIV = MethodFinder.Analyze(pkm); Info.PIDIV = MethodFinder.Analyze(pkm);
@ -397,7 +397,7 @@ namespace PKHeX.Core
} }
var enc = data.EncounterMatch; var enc = data.EncounterMatch;
bool originGMax = enc is IGigantamax g && g.CanGigantamax; bool originGMax = enc is IGigantamax {CanGigantamax: true};
if (originGMax != pk8.CanGigantamax) if (originGMax != pk8.CanGigantamax)
{ {
bool ok = !pk8.IsEgg && pk8.CanToggleGigantamax(pk8.Species, pk8.Form, enc.Species, enc.Form); bool ok = !pk8.IsEgg && pk8.CanToggleGigantamax(pk8.Species, pk8.Form, enc.Species, enc.Form);

View file

@ -33,7 +33,7 @@ namespace PKHeX.Core
{ {
if (pkm.VC) if (pkm.VC)
VerifyG1NicknameWithinBounds(data, pkm.Nickname); VerifyG1NicknameWithinBounds(data, pkm.Nickname);
else if (EncounterMatch is MysteryGift m && !m.IsEgg) else if (EncounterMatch is MysteryGift {IsEgg: false})
data.AddLine(Get(LEncGiftNicknamed, ParseSettings.NicknamedMysteryGift)); data.AddLine(Get(LEncGiftNicknamed, ParseSettings.NicknamedMysteryGift));
} }

View file

@ -37,7 +37,7 @@ namespace PKHeX.Core
if (!s.Shiny.IsValid(pkm)) if (!s.Shiny.IsValid(pkm))
data.AddLine(GetInvalid(LEncStaticPIDShiny, CheckIdentifier.Shiny)); data.AddLine(GetInvalid(LEncStaticPIDShiny, CheckIdentifier.Shiny));
if (s is EncounterStatic8U u && u.Shiny == Shiny.Random) if (s is EncounterStatic8U {Shiny: Shiny.Random})
{ {
// Underground Raids are originally anti-shiny on encounter. // Underground Raids are originally anti-shiny on encounter.
// When selecting a prize at the end, the game rolls and force-shiny is applied to be XOR=1. // When selecting a prize at the end, the game rolls and force-shiny is applied to be XOR=1.
@ -119,7 +119,7 @@ namespace PKHeX.Core
if (pkm.EncryptionConstant == 0) if (pkm.EncryptionConstant == 0)
{ {
if (Info.EncounterMatch is WC8 wc8 && wc8.PID == 0 && wc8.EncryptionConstant == 0) if (Info.EncounterMatch is WC8 {PID: 0, EncryptionConstant: 0})
return; // HOME Gifts return; // HOME Gifts
data.AddLine(Get(LPIDEncryptZero, Severity.Fishy, CheckIdentifier.EC)); data.AddLine(Get(LPIDEncryptZero, Severity.Fishy, CheckIdentifier.EC));
} }

View file

@ -367,7 +367,8 @@ namespace PKHeX.Core
{ {
const int memChampion = 27; const int memChampion = 27;
{ {
bool hasChampMemory = (pkm.Format == 8 && pkm is IMemoryHT h && h.HT_Memory == memChampion) || (pkm.Gen8 && pkm is IMemoryOT o && o.OT_Memory == memChampion); bool hasChampMemory = (pkm.Format == 8 && pkm is IMemoryHT {HT_Memory: memChampion}) ||
(pkm.Gen8 && pkm is IMemoryOT {OT_Memory: memChampion});
if (hasChampMemory && !s8.RibbonChampionGalar) if (hasChampMemory && !s8.RibbonChampionGalar)
yield return new RibbonResult(nameof(s8.RibbonChampionGalar)); yield return new RibbonResult(nameof(s8.RibbonChampionGalar));
} }
@ -387,9 +388,9 @@ namespace PKHeX.Core
// If the Tower Master ribbon is not present but a memory hint implies it should... // If the Tower Master ribbon is not present but a memory hint implies it should...
// This memory can also be applied in Gen6/7 via defeating the Chatelaines, where legends are disallowed. // This memory can also be applied in Gen6/7 via defeating the Chatelaines, where legends are disallowed.
const int strongest = 30; const int strongest = 30;
if ((pkm is IMemoryOT o && o.OT_Memory == strongest) || (pkm is IMemoryHT h && h.HT_Memory == strongest)) if (pkm is IMemoryOT {OT_Memory: strongest} || pkm is IMemoryHT {HT_Memory: strongest})
{ {
if (pkm.Gen8 || !IsAllowedBattleFrontier(pkm.Species) || (pkm is IRibbonSetCommon6 s6 && !s6.RibbonBattlerSkillful)) if (pkm.Gen8 || !IsAllowedBattleFrontier(pkm.Species) || pkm is IRibbonSetCommon6 {RibbonBattlerSkillful: false})
yield return new RibbonResult(nameof(s8.RibbonTowerMaster)); yield return new RibbonResult(nameof(s8.RibbonTowerMaster));
} }
} }
@ -398,7 +399,7 @@ namespace PKHeX.Core
private static bool CanParticipateInRankedSWSH(PKM pkm) private static bool CanParticipateInRankedSWSH(PKM pkm)
{ {
if (!pkm.SWSH && pkm is IBattleVersion v && v.BattleVersion == 0) if (!pkm.SWSH && pkm is IBattleVersion {BattleVersion: 0})
return false; return false;
// Clamp to permitted species // Clamp to permitted species
@ -446,7 +447,7 @@ namespace PKHeX.Core
var sb = set2.RibbonBits(); var sb = set2.RibbonBits();
var eb = enc is IRibbonSetEvent4 e4 ? e4.RibbonBits() : new bool[sb.Length]; var eb = enc is IRibbonSetEvent4 e4 ? e4.RibbonBits() : new bool[sb.Length];
if (enc is EncounterStatic7 s && s.Species == (int)Species.Magearna) if (enc is EncounterStatic7 {Species: (int)Species.Magearna})
eb[1] = true; // require Wishing Ribbon eb[1] = true; // require Wishing Ribbon
for (int i = 0; i < sb.Length; i++) for (int i = 0; i < sb.Length; i++)

View file

@ -22,7 +22,7 @@ namespace PKHeX.Core
switch (data.EncounterMatch) switch (data.EncounterMatch)
{ {
case EncounterTrade _: case EncounterTrade _:
case MysteryGift g when !g.IsEgg: case MysteryGift {IsEgg: false}:
case EncounterStatic5N _: case EncounterStatic5N _:
return; // already verified return; // already verified
} }
@ -107,7 +107,7 @@ namespace PKHeX.Core
if (tr.Length == 0) if (tr.Length == 0)
{ {
if (pkm is SK2 sk2 && sk2.TID == 0 && sk2.IsRental) if (pkm is SK2 {TID: 0, IsRental: true})
{ {
data.AddLine(Get(LOTShort, Severity.Fishy)); data.AddLine(Get(LOTShort, Severity.Fishy));
} }

View file

@ -130,7 +130,7 @@ namespace PKHeX.Core
} }
var enc = data.EncounterMatch; var enc = data.EncounterMatch;
if (enc.Version == GameVersion.GO || (enc is WC8 wc && wc.IsHOMEGift)) if (enc.Version == GameVersion.GO || enc is WC8 {IsHOMEGift: true})
{ {
VerifyHOMETracker(data, pkm); VerifyHOMETracker(data, pkm);
} }
@ -166,7 +166,7 @@ namespace PKHeX.Core
{ {
// Tracker value is set via Transfer across HOME. // Tracker value is set via Transfer across HOME.
// Can't validate the actual values (we aren't the server), so we can only check against zero. // Can't validate the actual values (we aren't the server), so we can only check against zero.
if (pkm is IHomeTrack home && home.Tracker == 0) if (pkm is IHomeTrack {Tracker: 0})
{ {
data.AddLine(Get(LTransferTrackerMissing, ParseSettings.Gen8TransferTrackerNotPresent)); data.AddLine(Get(LTransferTrackerMissing, ParseSettings.Gen8TransferTrackerNotPresent));
// To the reader: It seems like the best course of action for setting a tracker is: // To the reader: It seems like the best course of action for setting a tracker is:
@ -183,7 +183,7 @@ namespace PKHeX.Core
yield return GetInvalid(LEggLocationNone); yield return GetInvalid(LEggLocationNone);
// Flag Moves that cannot be transferred // Flag Moves that cannot be transferred
if (encounter is EncounterStatic s && s.Version == GameVersion.C && s.EggLocation == 256) // Dizzy Punch Gifts if (encounter is EncounterStatic2Odd {Version: GameVersion.C, EggLocation: 256}) // Dizzy Punch Gifts
FlagIncompatibleTransferMove(pkm, Moves, 146, 2); // can't have Dizzy Punch at all FlagIncompatibleTransferMove(pkm, Moves, 146, 2); // can't have Dizzy Punch at all
bool checkShiny = pkm.VC2 || (pkm.TradebackStatus == TradebackType.WasTradeback && pkm.VC1); bool checkShiny = pkm.VC2 || (pkm.TradebackStatus == TradebackType.WasTradeback && pkm.VC1);

View file

@ -131,7 +131,7 @@ namespace PKHeX.Core
var flags = ExportFlags.None; var flags = ExportFlags.None;
if (ext == ".dsv") if (ext == ".dsv")
flags |= ExportFlags.IncludeFooter; flags |= ExportFlags.IncludeFooter;
if (ext == ".gci" || (SAV is IGCSaveFile gc && !gc.IsMemoryCardSave)) if (ext == ".gci" || SAV is IGCSaveFile {IsMemoryCardSave: false})
flags |= ExportFlags.IncludeHeader; flags |= ExportFlags.IncludeHeader;
return flags; return flags;
} }

View file

@ -189,7 +189,7 @@ namespace PKHeX.Core
case PKM pk: case PKM pk:
yield return pk; yield return pk;
break; break;
case MysteryGift g when g.IsPokémon: case MysteryGift {IsPokémon: true} g:
yield return g.ConvertToPKM(sav); yield return g.ConvertToPKM(sav);
break; break;
case GP1 g when g.Species != 0: case GP1 g when g.Species != 0:

View file

@ -94,7 +94,7 @@ namespace PKHeX.Drawing
var formarg = pk is IFormArgument f ? f.FormArgument : 0; var formarg = pk is IFormArgument f ? f.FormArgument : 0;
bool alt = pk.Format >= 8 && (pk.ShinyXor == 0 || pk.FatefulEncounter || pk.Version == (int)GameVersion.GO); bool alt = pk.Format >= 8 && (pk.ShinyXor == 0 || pk.FatefulEncounter || pk.Version == (int)GameVersion.GO);
var img = GetSprite(pk.Species, pk.Form, pk.Gender, formarg, pk.SpriteItem, pk.IsEgg, pk.IsShiny, pk.Format, isBoxBGRed, alt); var img = GetSprite(pk.Species, pk.Form, pk.Gender, formarg, pk.SpriteItem, pk.IsEgg, pk.IsShiny, pk.Format, isBoxBGRed, alt);
if (pk is IShadowPKM s && s.IsShadow) if (pk is IShadowPKM {IsShadow: true})
{ {
const int Lugia = 249; const int Lugia = 249;
if (pk.Species == Lugia) // show XD shadow sprite if (pk.Species == Lugia) // show XD shadow sprite
@ -103,7 +103,7 @@ namespace PKHeX.Drawing
var glowImg = ImageUtil.GetBitmap(pixels, baseSprite.Width, baseSprite.Height, baseSprite.PixelFormat); var glowImg = ImageUtil.GetBitmap(pixels, baseSprite.Width, baseSprite.Height, baseSprite.PixelFormat);
return ImageUtil.LayerImage(glowImg, img, 0, 0); return ImageUtil.LayerImage(glowImg, img, 0, 0);
} }
if (pk is IGigantamax g && g.CanGigantamax) if (pk is IGigantamax {CanGigantamax: true})
{ {
var gm = Resources.dyna; var gm = Resources.dyna;
return ImageUtil.LayerImage(img, gm, (img.Width - gm.Width) / 2, 0); return ImageUtil.LayerImage(img, gm, (img.Width - gm.Width) / 2, 0);

View file

@ -494,7 +494,7 @@ namespace PKHeX.WinForms.Controls
PB_MarkShiny.Image = GetMarkSprite(PB_MarkShiny, !BTN_Shinytize.Enabled); PB_MarkShiny.Image = GetMarkSprite(PB_MarkShiny, !BTN_Shinytize.Enabled);
PB_MarkCured.Image = GetMarkSprite(PB_MarkCured, CHK_Cured.Checked); PB_MarkCured.Image = GetMarkSprite(PB_MarkCured, CHK_Cured.Checked);
PB_Favorite.Image = GetMarkSprite(PB_Favorite, Entity is IFavorite f && f.Favorite); PB_Favorite.Image = GetMarkSprite(PB_Favorite, Entity is IFavorite {Favorite: true});
PB_Origin.Image = GetOriginSprite(Entity); PB_Origin.Image = GetOriginSprite(Entity);
// Colored Markings // Colored Markings

View file

@ -1081,13 +1081,13 @@ namespace PKHeX.WinForms.Controls
B_Roamer.Enabled = sav is SAV3; B_Roamer.Enabled = sav is SAV3;
B_OpenHoneyTreeEditor.Enabled = B_OpenUGSEditor.Enabled = sav is SAV4Sinnoh; B_OpenHoneyTreeEditor.Enabled = B_OpenUGSEditor.Enabled = sav is SAV4Sinnoh;
B_OpenApricorn.Enabled = sav is SAV4 s4 && s4.HGSS; B_OpenApricorn.Enabled = sav is SAV4HGSS;
B_OpenRTCEditor.Enabled = sav.Generation == 2 || (sav is SAV3 s3 && (s3.RS || s3.E)); B_OpenRTCEditor.Enabled = sav.Generation == 2 || (sav is SAV3 s3 && (s3.RS || s3.E));
B_MailBox.Enabled = sav is SAV2 || sav is SAV3 || sav is SAV4 || sav is SAV5; B_MailBox.Enabled = sav is SAV2 || sav is SAV3 || sav is SAV4 || sav is SAV5;
B_Raids.Enabled = sav is SAV8SWSH; B_Raids.Enabled = sav is SAV8SWSH;
B_RaidArmor.Enabled = sav is SAV8SWSH ss1 && ss1.SaveRevision >= 1; B_RaidArmor.Enabled = sav is SAV8SWSH {SaveRevision: >= 1};
B_RaidCrown.Enabled = sav is SAV8SWSH ss2 && ss2.SaveRevision >= 2; B_RaidCrown.Enabled = sav is SAV8SWSH {SaveRevision: >= 2};
B_Blocks.Enabled = true; B_Blocks.Enabled = true;
SL_Extra.SAV = sav; SL_Extra.SAV = sav;

View file

@ -589,7 +589,8 @@ namespace PKHeX.WinForms
{ {
if (editing) if (editing)
return; return;
if (sender is RadioButton radioButton && !radioButton.Checked) return; if (sender is RadioButton {Checked: false})
return;
StatAddrControl(SetValToSav: -2, SetSavToVal: true); StatAddrControl(SetValToSav: -2, SetSavToVal: true);
if (GB_Hall.Visible) if (GB_Hall.Visible)
{ {

View file

@ -175,7 +175,7 @@ namespace PKHeX.Tests.Simulator
var set = new ShowdownSet(text); var set = new ShowdownSet(text);
var pk7 = new PK7 { Species = set.Species, Form = set.Form, Moves = set.Moves, CurrentLevel = set.Level }; var pk7 = new PK7 { Species = set.Species, Form = set.Form, Moves = set.Moves, CurrentLevel = set.Level };
var encs = EncounterMovesetGenerator.GenerateEncounters(pk7, set.Moves); var encs = EncounterMovesetGenerator.GenerateEncounters(pk7, set.Moves);
var tr3 = encs.First(z => z is EncounterTrade t && t.Generation == 3); var tr3 = encs.First(z => z is EncounterTrade3);
var pk3 = tr3.ConvertToPKM(new SAV3()); var pk3 = tr3.ConvertToPKM(new SAV3());
var la = new LegalityAnalysis(pk3); var la = new LegalityAnalysis(pk3);