mirror of
https://github.com/kwsch/PKHeX.git
synced 2026-05-09 12:35:20 -05:00
Permit TR flags for "Can Relearn", split branching for TR checks
This commit is contained in:
parent
53e0046a48
commit
d288a32ef5
|
|
@ -168,12 +168,13 @@ internal static int GetMaxLanguageID(int generation)
|
|||
|
||||
internal static bool GetCanLearnMachineMove(PKM pkm, int move, int generation, GameVersion version = GameVersion.Any)
|
||||
{
|
||||
return MoveList.GetValidMoves(pkm, version, EvolutionChain.GetValidPreEvolutions(pkm), generation, types: MoveSourceType.Machine).Contains(move);
|
||||
var evos = EvolutionChain.GetValidPreEvolutions(pkm);
|
||||
return MoveList.GetValidMoves(pkm, version, evos, generation, types: MoveSourceType.AllMachines).Contains(move);
|
||||
}
|
||||
|
||||
internal static bool GetCanRelearnMove(PKM pkm, int move, int generation, IReadOnlyList<EvoCriteria> evos, GameVersion version = GameVersion.Any)
|
||||
{
|
||||
return MoveList.GetValidMoves(pkm, version, evos, generation, types: MoveSourceType.Relearnable).Contains(move);
|
||||
return MoveList.GetValidMoves(pkm, version, evos, generation, types: MoveSourceType.Reminder).Contains(move);
|
||||
}
|
||||
|
||||
internal static bool GetCanKnowMove(PKM pkm, int move, int generation, IReadOnlyList<EvoCriteria> evos, GameVersion version = GameVersion.Any)
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ public ValidEncounterMoves(PKM pkm, LevelUpRestriction restrict, IEncounterable
|
|||
AddEdgeCaseMoves(x, encounter, pkm);
|
||||
|
||||
LevelUpMoves = level;
|
||||
TMHMMoves = MoveList.GetValidMovesAllGens(pkm, restrict.EvolutionChains, types: MoveSourceType.Machine);
|
||||
TMHMMoves = MoveList.GetValidMovesAllGens(pkm, restrict.EvolutionChains, types: MoveSourceType.AllMachines);
|
||||
TutorMoves = MoveList.GetValidMovesAllGens(pkm, restrict.EvolutionChains, types: MoveSourceType.AllTutors);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -322,6 +322,8 @@ private static IEnumerable<int> GetMoves(PKM pkm, int species, int minlvlG1, int
|
|||
r.AddRange(MoveLevelUp.GetMovesLevelUp(pkm, species, minlvlG1, minlvlG2, lvl, form, Version, types.HasFlagFast(MoveSourceType.Reminder), generation));
|
||||
if (types.HasFlagFast(MoveSourceType.Machine))
|
||||
r.AddRange(MoveTechnicalMachine.GetTMHM(pkm, species, form, generation, Version, RemoveTransferHM));
|
||||
if (types.HasFlagFast(MoveSourceType.TechnicalRecord))
|
||||
r.AddRange(MoveTechnicalMachine.GetRecords(pkm, species, form, generation));
|
||||
if (types.HasFlagFast(MoveSourceType.AllTutors))
|
||||
r.AddRange(MoveTutor.GetTutorMoves(pkm, species, form, types.HasFlagFast(MoveSourceType.SpecialTutor), generation));
|
||||
return r.Distinct();
|
||||
|
|
@ -339,13 +341,14 @@ public enum MoveSourceType
|
|||
SpecialTutor = 1 << 4,
|
||||
EnhancedTutor = 1 << 5,
|
||||
SharedEggMove = 1 << 6,
|
||||
TechnicalRecord = 1 << 7,
|
||||
|
||||
Reminder = 1 << 7,
|
||||
AllTutors = TypeTutor | SpecialTutor | EnhancedTutor,
|
||||
AllMachines = Machine | TechnicalRecord,
|
||||
|
||||
Relearnable = LevelUp | RelearnMoves,
|
||||
Reminder = LevelUp | RelearnMoves | TechnicalRecord,
|
||||
Encounter = LevelUp | RelearnMoves,
|
||||
ExternalSources = LevelUp | Machine | Reminder | AllTutors,
|
||||
ExternalSources = Reminder | AllMachines | AllTutors,
|
||||
All = ExternalSources | SharedEggMove | RelearnMoves,
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ namespace PKHeX.Core
|
|||
{
|
||||
public static class MoveTechnicalMachine
|
||||
{
|
||||
public static GameVersion GetIsMachineMove(PKM pkm, int species, int form, int generation, int move, GameVersion ver = GameVersion.Any, bool RemoveTransfer = false, bool allowBit = false)
|
||||
public static GameVersion GetIsMachineMove(PKM pkm, int species, int form, int generation, int move, GameVersion ver = GameVersion.Any, bool RemoveTransfer = false)
|
||||
{
|
||||
if (pkm.IsMovesetRestricted(generation))
|
||||
ver = (GameVersion) pkm.Version;
|
||||
|
|
@ -21,7 +21,19 @@ public static GameVersion GetIsMachineMove(PKM pkm, int species, int form, int g
|
|||
case 5: return GetIsMachine5(species, move, form);
|
||||
case 6: return GetIsMachine6(species, move, form, ver);
|
||||
case 7: return GetIsMachine7(species, move, form, ver);
|
||||
case 8: return GetIsMachine8(pkm, species, move, form, ver, allowBit);
|
||||
case 8: return GetIsMachine8(species, move, form, ver);
|
||||
default:
|
||||
return Legal.NONE;
|
||||
}
|
||||
}
|
||||
|
||||
public static GameVersion GetIsRecordMove(PKM pkm, int species, int form, int generation, int move, GameVersion ver = GameVersion.Any, bool allowBit = false)
|
||||
{
|
||||
if (pkm.IsMovesetRestricted(generation))
|
||||
ver = (GameVersion)pkm.Version;
|
||||
switch (generation)
|
||||
{
|
||||
case 8: return GetIsRecord8(pkm, species, move, form, ver, allowBit);
|
||||
default:
|
||||
return Legal.NONE;
|
||||
}
|
||||
|
|
@ -219,7 +231,7 @@ private static GameVersion GetIsMachine7(int species, int move, int form, GameVe
|
|||
return Legal.NONE;
|
||||
}
|
||||
|
||||
private static GameVersion GetIsMachine8(PKM pkm, int species, int move, int form, GameVersion ver, bool allowBit)
|
||||
private static GameVersion GetIsMachine8(int species, int move, int form, GameVersion ver)
|
||||
{
|
||||
if (GameVersion.SWSH.Contains(ver))
|
||||
{
|
||||
|
|
@ -231,6 +243,15 @@ private static GameVersion GetIsMachine8(PKM pkm, int species, int move, int for
|
|||
return GameVersion.SWSH;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return Legal.NONE;
|
||||
}
|
||||
|
||||
private static GameVersion GetIsRecord8(PKM pkm, int species, int move, int form, GameVersion ver, bool allowBit)
|
||||
{
|
||||
if (GameVersion.SWSH.Contains(ver))
|
||||
{
|
||||
for (int i = 0; i < 100; i++)
|
||||
{
|
||||
if (Legal.TMHM_SWSH[i + 100] != move)
|
||||
|
|
@ -239,7 +260,7 @@ private static GameVersion GetIsMachine8(PKM pkm, int species, int move, int for
|
|||
break;
|
||||
if (allowBit)
|
||||
return GameVersion.SWSH;
|
||||
if (((PK8) pkm).GetMoveRecordFlag(i))
|
||||
if (((PK8)pkm).GetMoveRecordFlag(i))
|
||||
return GameVersion.SWSH;
|
||||
if (i == 12 && species == (int)Species.Calyrex && form == 0) // TR12
|
||||
return GameVersion.SWSH; // Agility Calyrex without TR glitch.
|
||||
|
|
@ -268,7 +289,17 @@ public static IEnumerable<int> GetTMHM(PKM pkm, int species, int form, int gener
|
|||
case 5: AddMachine5(r, species, form); break;
|
||||
case 6: AddMachine6(r, species, form, ver); break;
|
||||
case 7: AddMachine7(r, species, form, ver); break;
|
||||
case 8: AddMachine8(r, species, form, pkm, ver); break;
|
||||
case 8: AddMachine8(r, species, form, ver); break;
|
||||
}
|
||||
return r.Distinct();
|
||||
}
|
||||
|
||||
public static IEnumerable<int> GetRecords(PKM pkm, int species, int form, int generation)
|
||||
{
|
||||
var r = new List<int>();
|
||||
switch (generation)
|
||||
{
|
||||
case 8: AddRecordSWSH(r, species, form, pkm); break;
|
||||
}
|
||||
return r.Distinct();
|
||||
}
|
||||
|
|
@ -382,7 +413,7 @@ private static void AddMachine7(List<int> r, int species, int form, GameVersion
|
|||
}
|
||||
}
|
||||
|
||||
private static void AddMachine8(List<int> r, int species, int form, PKM pkm, GameVersion ver = GameVersion.Any)
|
||||
private static void AddMachine8(List<int> r, int species, int form, GameVersion ver = GameVersion.Any)
|
||||
{
|
||||
switch (ver)
|
||||
{
|
||||
|
|
@ -390,7 +421,7 @@ private static void AddMachine8(List<int> r, int species, int form, PKM pkm, Gam
|
|||
case GameVersion.SW:
|
||||
case GameVersion.SH:
|
||||
case GameVersion.SWSH:
|
||||
AddMachineSWSH(r, species, form, pkm);
|
||||
AddMachineSWSH(r, species, form);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
@ -429,7 +460,7 @@ private static void AddMachineGG(List<int> r, int species, int form)
|
|||
r.AddRange(Legal.TMHM_GG.Where((_, m) => pi.TMHM[m]));
|
||||
}
|
||||
|
||||
private static void AddMachineSWSH(List<int> r, int species, int form, PKM pkm)
|
||||
private static void AddMachineSWSH(List<int> r, int species, int form)
|
||||
{
|
||||
if (species > Legal.MaxSpeciesID_8)
|
||||
return;
|
||||
|
|
@ -441,7 +472,12 @@ private static void AddMachineSWSH(List<int> r, int species, int form, PKM pkm)
|
|||
continue;
|
||||
r.Add(Legal.TMHM_SWSH[i]);
|
||||
}
|
||||
}
|
||||
|
||||
public static void AddRecordSWSH(List<int> r, int species, int form, PKM pkm)
|
||||
{
|
||||
var pi = PersonalTable.SWSH.GetFormEntry(species, form);
|
||||
var tmhm = pi.TMHM;
|
||||
var pk8 = (PK8)pkm;
|
||||
for (int i = 0; i < 100; i++)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user