public void PIDIVEncounterSlotTest() { // Modest Method 1 var pk = new PK3 { PID = 0x6937DA48, IVs = new[] { 31, 31, 31, 31, 31, 31 } }; var pidiv = MethodFinder.Analyze(pk); Assert.AreEqual(PIDType.Method_1, pidiv?.Type, "Unable to match PID to Method 1 spread"); // Test for Method J { // Pearl pk.Version = (int)GameVersion.P; var results = FrameFinder.GetFrames(pidiv, pk); const int failSyncCount = 1; const int noSyncCount = 2; const int SyncCount = 37; var r2 = results.ToArray(); var failSync = r2.Where(z => z.Lead == LeadRequired.SynchronizeFail); var noSync = r2.Where(z => z.Lead == LeadRequired.None); var sync = r2.Where(z => z.Lead == LeadRequired.Synchronize); Assert.AreEqual(failSync.Count(), failSyncCount, "Failed Sync count mismatch."); Assert.AreEqual(sync.Count(), SyncCount, "Sync count mismatch."); Assert.AreEqual(noSync.Count(), noSyncCount, "Non-Sync count mismatch."); var type = SlotType.Grass; var slots = new[] { 0, 1, 2, 3, 4, 5, 6, 7, 9 }; Assert.IsTrue(slots.All(s => r2.Any(z => z.GetSlot(type) == s)), "Required slots not present."); var slotsForType = r2.Where(z => !z.LevelSlotModified).Select(z => z.GetSlot(type)).Distinct().OrderBy(z => z); Assert.IsTrue(slotsForType.SequenceEqual(slots), "Unexpected slots present."); } // Test for Method H and K { // Sapphire // pk.Version = (int)GameVersion.S; // var results = FrameFinder.GetFrames(pidiv, pk); } }
public void PIDIVEncounterSlotTest() { // Modest Method 1 var pk = new PK3 { PID = 0x6937DA48, IVs = new[] { 31, 31, 31, 31, 31, 31 } }; var pidiv = MethodFinder.Analyze(pk); Assert.Equal(PIDType.Method_1, pidiv?.Type); // Test for Method J { // Pearl pk.Version = (int)GameVersion.P; var results = FrameFinder.GetFrames(pidiv, pk).ToArray(); var failSync = results.Where(z => z.Lead == LeadRequired.SynchronizeFail); var noSync = results.Where(z => z.Lead == LeadRequired.None); var sync = results.Where(z => z.Lead == LeadRequired.Synchronize); failSync.Should().HaveCount(1); sync.Should().HaveCount(37); noSync.Should().HaveCount(2); const SlotType type = SlotType.Grass; var slots = new[] { 0, 1, 2, 3, 4, 5, 6, 7, 9 }; Assert.True(slots.All(s => results.Any(z => z.GetSlot(type) == s)), "Required slots not present."); var slotsForType = results.Where(z => !z.LevelSlotModified).Select(z => z.GetSlot(type)).Distinct().OrderBy(z => z); Assert.True(slotsForType.SequenceEqual(slots), "Unexpected slots present."); } // Test for Method H and K { // Sapphire // pk.Version = (int)GameVersion.S; // var results = FrameFinder.GetFrames(pidiv, pk); } }
private static bool CheckIsOverlap(ScanSide side, LogUtil logUtil, Bitmap bitmap) { logUtil.Log("Starting detect overlap"); if (side == ScanSide.Right) { logUtil.Log("Starting right"); var chartInfo = FrameFinder.CheckIfInChat(bitmap); logUtil.Log("Detect chat mode end"); if (chartInfo == FrameFinder.ChatInfo.Partial || chartInfo == FrameFinder.ChatInfo.Full) { logUtil.Log("Overlap detected"); return(true); } var hasFrame = FrameFinder.CheckIfInRightFrame(bitmap); logUtil.Log("Detect right frame end"); if (hasFrame) { logUtil.Log("Overlap detected"); return(true); } } else { logUtil.Log("Starting left"); var hasFrame = FrameFinder.CheckIfInLeftFrame(bitmap); logUtil.Log("Detect left frame end"); if (hasFrame) { logUtil.Log("Overlap detected"); return(true); } } return(false); }
private static IEnumerable <IEncounterable> GenerateRawEncounters3(PKM pk, LegalInfo info) { var chain = EncounterOrigin.GetOriginChain(pk); var game = (GameVersion)pk.Version; // Mystery Gifts foreach (var z in GetValidGifts(pk, chain, game)) { // Don't bother deferring matches. var match = z.GetMatchRating(pk); if (match != PartialMatch) { yield return(z); } } // Trades foreach (var z in GetValidEncounterTrades(pk, chain, game)) { // Don't bother deferring matches. var match = z.GetMatchRating(pk); if (match != PartialMatch) { yield return(z); } } IEncounterable?deferred = null; IEncounterable?partial = null; // Static Encounter // Defer everything if Safari Ball bool safari = pk.Ball == 0x05; // never static encounters if (!safari) { foreach (var z in GetValidStaticEncounter(pk, chain, game)) { var match = z.GetMatchRating(pk); if (match == PartialMatch) { partial ??= z; } else { yield return(z); } } } // Encounter Slots var slots = FrameFinder.GetFrames(info.PIDIV, pk).ToList(); foreach (var z in GetValidWildEncounters(pk, chain, game)) { var match = z.GetMatchRating(pk); if (match == PartialMatch) { partial ??= z; continue; } var frame = slots.Find(s => s.IsSlotCompatibile((EncounterSlot3)z, pk)); if (frame == null) { deferred ??= z; continue; } yield return(z); } info.FrameMatches = false; if (deferred is EncounterSlot3 x) { yield return(x); } if (pk.Version != (int)GameVersion.CXD) // no eggs in C/XD { foreach (var z in GenerateEggs(pk, 3)) { yield return(z); } } if (partial is EncounterSlot3 y) { var frame = slots.Find(s => s.IsSlotCompatibile(y, pk)); info.FrameMatches = frame != null; yield return(y); } // do static encounters if they were deferred to end, spit out any possible encounters for invalid pk if (!safari) { yield break; } partial = null; foreach (var z in GetValidStaticEncounter(pk, chain, game)) { var match = z.GetMatchRating(pk); if (match == PartialMatch) { partial ??= z; } else { yield return(z); } } if (partial is not null) { yield return(partial); } }