mirror of
https://github.com/kwsch/PKHeX.git
synced 2026-10-01 20:36:57 -05:00
Split gen3/4 encounter generators from default
Add exclusion for gen3/4 balls since met location requires a less precise match; static encounters will never be in safari/sport balls. Fix wurmple species ref, isn't smeargle
This commit is contained in:
@@ -9,8 +9,7 @@ public static class EncounterGenerator
|
||||
{
|
||||
public static IEnumerable<IEncounterable> getEncounters(PKM pkm, LegalInfo info)
|
||||
{
|
||||
int Generation = pkm.GenNumber;
|
||||
switch (Generation)
|
||||
switch (info.Generation)
|
||||
{
|
||||
case 1:
|
||||
case 2:
|
||||
@@ -18,10 +17,13 @@ public static IEnumerable<IEncounterable> getEncounters(PKM pkm, LegalInfo info)
|
||||
yield return enc;
|
||||
yield break;
|
||||
case 3:
|
||||
// info.PIDIV = MethodFinder.Analyze(pkm);
|
||||
foreach (var enc in getEncounters3(pkm, info))
|
||||
yield return enc;
|
||||
yield break;
|
||||
case 4:
|
||||
// info.PIDIV = MethodFinder.Analyze(pkm);
|
||||
// todo: filter PIDIV
|
||||
foreach (var enc in getEncounters34(pkm))
|
||||
foreach (var enc in getEncounters4(pkm, info))
|
||||
yield return enc;
|
||||
yield break;
|
||||
default:
|
||||
@@ -46,6 +48,22 @@ private static IEnumerable<IEncounterable> getEncounters12(PKM pkm, LegalInfo in
|
||||
yield return z.Encounter;
|
||||
}
|
||||
}
|
||||
private static IEnumerable<IEncounterable> getEncounters3(PKM pkm, LegalInfo info)
|
||||
{
|
||||
foreach (var z in GenerateRawEncounters3(pkm))
|
||||
{
|
||||
// todo: pidiv filtering
|
||||
yield return z;
|
||||
}
|
||||
}
|
||||
private static IEnumerable<IEncounterable> getEncounters4(PKM pkm, LegalInfo info)
|
||||
{
|
||||
foreach (var z in GenerateRawEncounters4(pkm))
|
||||
{
|
||||
// todo: pidiv filtering
|
||||
yield return z;
|
||||
}
|
||||
}
|
||||
private static IEnumerable<GBEncounterData> GenerateRawEncounters12(PKM pkm, GameVersion game)
|
||||
{
|
||||
var gen = game == GameVersion.GSC ? 2 : 1;
|
||||
@@ -118,14 +136,6 @@ private static IEnumerable<GBEncounterData> GenerateFilteredEncounters(PKM pkm)
|
||||
foreach (var z in filter(GenerateRawEncounters12(pkm, GameVersion.GSC)))
|
||||
yield return z;
|
||||
}
|
||||
private static IEnumerable<IEncounterable> getEncounters34(PKM pkm)
|
||||
{
|
||||
return GenerateRawEncounters(pkm);
|
||||
}
|
||||
private static IEnumerable<IEncounterable> GenerateFilteredEncountersPIDIV(PKM pkm)
|
||||
{
|
||||
yield break;
|
||||
}
|
||||
private static IEnumerable<IEncounterable> GenerateRawEncounters(PKM pkm)
|
||||
{
|
||||
int ctr = 0;
|
||||
@@ -136,41 +146,95 @@ private static IEnumerable<IEncounterable> GenerateRawEncounters(PKM pkm)
|
||||
if (ctr != 0) yield break;
|
||||
}
|
||||
|
||||
int gen = pkm.GenNumber;
|
||||
bool wasEvent = pkm.WasEvent || pkm.WasEventEgg || gen == 3; // egg events?
|
||||
if (wasEvent)
|
||||
if (pkm.WasEvent || pkm.WasEventEgg)
|
||||
{
|
||||
foreach (var z in getValidGifts(pkm))
|
||||
{ yield return z; ++ctr; }
|
||||
if (ctr != 0) yield break;
|
||||
}
|
||||
|
||||
bool gen4egg = gen >= 4 && pkm.WasEgg;
|
||||
if (gen4egg)
|
||||
if (pkm.WasEgg)
|
||||
{
|
||||
foreach (var z in generateEggs(pkm))
|
||||
yield return z;
|
||||
yield break;
|
||||
}
|
||||
|
||||
bool gen3egg = gen <= 3;
|
||||
foreach (var z in getValidStaticEncounter(pkm))
|
||||
{ yield return z; ++ctr; }
|
||||
if (ctr != 0 && !gen3egg) yield break;
|
||||
if (ctr != 0) yield break;
|
||||
foreach (var z in getValidFriendSafari(pkm))
|
||||
{ yield return z; ++ctr; }
|
||||
if (ctr != 0 && !gen3egg) yield break;
|
||||
if (ctr != 0) yield break;
|
||||
foreach (var z in getValidWildEncounters(pkm))
|
||||
{ yield return z; ++ctr; }
|
||||
if (ctr != 0 && !gen3egg) yield break;
|
||||
if (ctr != 0) yield break;
|
||||
foreach (var z in getValidEncounterTrade(pkm))
|
||||
{ yield return z; ++ctr; }
|
||||
// if (ctr != 0) yield break;
|
||||
|
||||
if (gen3egg)
|
||||
}
|
||||
private static IEnumerable<IEncounterable> GenerateRawEncounters4(PKM pkm)
|
||||
{
|
||||
int ctr = 0;
|
||||
bool wasEvent = pkm.WasEvent || pkm.WasEventEgg; // egg events?
|
||||
if (wasEvent)
|
||||
{
|
||||
foreach (var z in getValidGifts(pkm))
|
||||
{ yield return z; ++ctr; }
|
||||
if (ctr != 0) yield break;
|
||||
}
|
||||
if (pkm.WasEgg)
|
||||
{
|
||||
foreach (var z in generateEggs(pkm))
|
||||
yield return z;
|
||||
{ yield return z; ++ctr; }
|
||||
if (ctr != 0) yield break;
|
||||
}
|
||||
|
||||
bool safariSport = pkm.Ball == 0x05 || pkm.Ball == 0x18; // never static encounters
|
||||
if (!safariSport)
|
||||
foreach (var z in getValidStaticEncounter(pkm))
|
||||
{ yield return z; ++ctr; }
|
||||
if (ctr != 0) yield break;
|
||||
foreach (var z in getValidFriendSafari(pkm))
|
||||
{ yield return z; ++ctr; }
|
||||
if (ctr != 0) yield break;
|
||||
foreach (var z in getValidWildEncounters(pkm))
|
||||
{ yield return z; ++ctr; }
|
||||
if (ctr != 0) yield break;
|
||||
foreach (var z in getValidEncounterTrade(pkm))
|
||||
{ yield return z; ++ctr; }
|
||||
if (ctr != 0) yield break;
|
||||
|
||||
// do static encounters if they were deferred to end, spit out any possible encounters for invalid pkm
|
||||
if (safariSport)
|
||||
foreach (var z in getValidStaticEncounter(pkm))
|
||||
yield return z;
|
||||
}
|
||||
private static IEnumerable<IEncounterable> GenerateRawEncounters3(PKM pkm)
|
||||
{
|
||||
int ctr = 0;
|
||||
foreach (var z in getValidGifts(pkm))
|
||||
{ yield return z; ++ctr; }
|
||||
if (ctr != 0) yield break;
|
||||
|
||||
bool safari = pkm.Ball == 0x05; // never static encounters
|
||||
if (!safari)
|
||||
foreach (var z in getValidStaticEncounter(pkm))
|
||||
yield return z;
|
||||
foreach (var z in getValidFriendSafari(pkm))
|
||||
yield return z;
|
||||
foreach (var z in getValidWildEncounters(pkm))
|
||||
yield return z;
|
||||
foreach (var z in getValidEncounterTrade(pkm))
|
||||
yield return z;
|
||||
|
||||
// do static encounters if they were deferred to end, spit out any possible encounters for invalid pkm
|
||||
if (safari)
|
||||
foreach (var z in getValidStaticEncounter(pkm))
|
||||
yield return z;
|
||||
|
||||
foreach (var z in generateEggs(pkm))
|
||||
yield return z;
|
||||
}
|
||||
|
||||
// EncounterStatic
|
||||
@@ -328,7 +392,7 @@ private static IEnumerable<EncounterSlot> getValidWildEncounters(PKM pkm, GameVe
|
||||
var deferred = new List<EncounterSlot>();
|
||||
foreach (EncounterSlot slot in s)
|
||||
{
|
||||
if (slot.Species == 235 && species != 235 && !getWurmpleEvoValid(pkm)) { } // bad wurmple evolution
|
||||
if (slot.Species == 265 && species != 265 && !getWurmpleEvoValid(pkm)) { } // bad wurmple evolution
|
||||
else if (IsHidden ^ IsHiddenAbilitySlot(slot)) { } // ability mismatch
|
||||
else if (IsSafariBall ^ IsSafariSlot(slot.Type)) { } // Safari Zone only ball
|
||||
else if (IsSportsBall ^ slot.Type == SlotType.BugContest) { } // BCC only ball
|
||||
|
||||
Reference in New Issue
Block a user