Update learn handling for side-game wiped movesets

This commit is contained in:
Kurt 2022-09-10 11:29:04 -07:00
parent 0a88cdc32e
commit 27eb68335b
2 changed files with 47 additions and 5 deletions

View file

@ -78,12 +78,45 @@ public static class EncounterLearn
if (Array.Exists(moves, z => z == 0))
return Array.Empty<IEncounterable>();
var blank = EntityBlank.GetIdealBlank(species, form);
blank.Species = species;
blank.Form = form;
var vers = GameUtil.GameVersions;
return EncounterMovesetGenerator.GenerateEncounters(blank, moves, vers);
return GetLearnInternal(species, form, moves, vers);
}
private static IEnumerable<IEncounterable> GetLearnInternal(ushort species, byte form, ushort[] moves, GameVersion[] vers)
{
bool iterated = false;
if (PersonalTable.LA.IsPresentInGame(species, form))
{
var blank = new PA8 { Species = species, Form = form };
var encs = EncounterMovesetGenerator.GenerateEncounters(blank, moves, GameVersion.PLA);
foreach (var enc in encs)
yield return enc;
iterated = true;
}
if (PersonalTable.BDSP.IsPresentInGame(species, form))
{
var blank = new PB8 { Species = species, Form = form };
var encs = EncounterMovesetGenerator.GenerateEncounters(blank, moves, GameVersion.BD, GameVersion.SP);
foreach (var enc in encs)
yield return enc;
iterated = true;
}
if (PersonalTable.SWSH.IsPresentInGame(species, form))
{
var blank = new PK8 { Species = species, Form = form };
var v = vers.Where(z => z <= GameVersion.SH).ToArray();
var encs = EncounterMovesetGenerator.GenerateEncounters(blank, moves, v);
foreach (var enc in encs)
yield return enc;
iterated = true;
}
if (!iterated && PersonalTable.USUM.IsPresentInGame(species, form))
{
var blank = new PK7 { Species = species, Form = form };
var encs = EncounterMovesetGenerator.GenerateEncounters(blank, moves, vers);
foreach (var enc in encs)
yield return enc;
}
}
/// <summary>

View file

@ -50,4 +50,13 @@ public static class LearnabilityTests
var encs = EncounterLearn.GetLearn(species, moves);
encs.Any().Should().BeTrue($"{species} should be able to learn all moves: {string.Join(", ", moves)}");
}
[Theory]
[InlineData(nameof(Species.Unown), "Hidden Power")]
[InlineData(nameof(Species.Pikachu), "Hidden Power")]
public static void VerifyCanLearnTM(string species, params string[] moves)
{
var can = EncounterLearn.CanLearn(species, moves);
can.Should().BeTrue($"{species} should be able to learn all moves: {string.Join(", ", moves)}");
}
}