More explicit type checks for Encounter class

A little more explicit on what it is actually checking for
This commit is contained in:
Kurt
2022-03-26 14:53:15 -07:00
parent 55083ee02c
commit 6deaf3cb74
5 changed files with 12 additions and 12 deletions

View File

@@ -12,8 +12,8 @@ public sealed class CXDVerifier : Verifier
public override void Verify(LegalityAnalysis data)
{
var pkm = data.pkm;
if (data.EncounterMatch is EncounterStatic)
VerifyCXDStarterCorrelation(data);
if (data.EncounterMatch is EncounterStatic3 s3)
VerifyCXDStarterCorrelation(data, s3);
else if (pkm.Egg_Location != 0) // can't obtain eggs in CXD
data.AddLine(GetInvalid(LEncInvalid, CheckIdentifier.Encounter)); // invalid encounter
@@ -21,17 +21,17 @@ public override void Verify(LegalityAnalysis data)
data.AddLine(GetInvalid(LG3OTGender, CheckIdentifier.Trainer));
}
private static void VerifyCXDStarterCorrelation(LegalityAnalysis data)
private static void VerifyCXDStarterCorrelation(LegalityAnalysis data, EncounterStatic3 enc)
{
var pidiv = data.Info.PIDIV;
if (pidiv.Type is not (PIDType.CXD or PIDType.CXDAnti))
var (type, seed) = data.Info.PIDIV;
if (type is not (PIDType.CXD or PIDType.CXDAnti or PIDType.CXD_ColoStarter))
return; // already flagged as invalid
var pkm = data.pkm;
bool valid = data.EncounterMatch.Species switch
bool valid = enc.Species switch
{
(int)Species.Eevee => LockFinder.IsXDStarterValid(pidiv.OriginSeed, pkm.TID, pkm.SID),
(int)Species.Espeon or (int)Species.Umbreon => pidiv.Type == PIDType.CXD_ColoStarter,
(int)Species.Eevee => LockFinder.IsXDStarterValid(seed, pkm.TID, pkm.SID),
(int)Species.Espeon or (int)Species.Umbreon => type == PIDType.CXD_ColoStarter,
_ => true,
};
if (!valid)

View File

@@ -45,7 +45,7 @@ private CheckResult VerifyForm(LegalityAnalysis data)
switch ((Species)species)
{
case Pikachu when Info.Generation == 6: // Cosplay
bool isStatic = enc is EncounterStatic;
bool isStatic = enc is EncounterStatic6;
bool validCosplay = form == (isStatic ? enc.Form : 0);
if (!validCosplay)
return GetInvalid(isStatic ? LFormPikachuCosplayInvalid : LFormPikachuCosplay);

View File

@@ -47,7 +47,7 @@ public override void Verify(LegalityAnalysis data)
return;
}
var reqEXP = enc is EncounterStatic {Version: GameVersion.C}
var reqEXP = enc is EncounterStatic2Odd
? 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);
if (reqEXP != pkm.EXP)

View File

@@ -350,7 +350,7 @@ private static void VerifyTrade4(LegalityAnalysis data, EncounterTrade t)
break;
default:
if (pkm.Version is (int)GameVersion.D or (int)GameVersion.P && t is EncounterTrade4PID) // mainline DP
if (t is EncounterTrade4PID && pkm.Version is ((int)GameVersion.D or (int)GameVersion.P)) // mainline DP
{
// DP English origin are Japanese lang. Can't have LanguageID 2
if (lang == 2)

View File

@@ -223,7 +223,7 @@ public IEnumerable<CheckResult> VerifyVCEncounter(PKM pkm, IEncounterTemplate en
yield return GetInvalid(LEggLocationNone);
// Flag Moves that cannot be transferred
if (encounter is EncounterStatic2Odd {Version: GameVersion.C, EggLocation: 256}) // Dizzy Punch Gifts
if (encounter is EncounterStatic2Odd) // Dizzy Punch Gifts
FlagIncompatibleTransferMove(pkm, Moves, 146, 2); // can't have Dizzy Punch at all
bool checkShiny = pkm.VC2 || (pkm.VC1 && GBRestrictions.IsTimeCapsuleTransferred(pkm, Moves, encounter).WasTimeCapsuleTransferred());