mirror of
https://github.com/kwsch/PKHeX
synced 2024-11-23 12:33:06 +00:00
Extract some reused logic
Put the methods in Tables4; kinda breaks the 'only arrays here' rule but they only reference values in this file(partial class).
This commit is contained in:
parent
1b221e052c
commit
941b1b5c47
3 changed files with 46 additions and 31 deletions
|
@ -170,11 +170,7 @@ namespace PKHeX.Core
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (pkm.Format >= 5) // Transporter
|
if (pkm.Format >= 5) // Transporter
|
||||||
{
|
return Legal.GetTransfer45MetLocation(pkm);
|
||||||
return pkm.Gen4 && pkm.FatefulEncounter && Legal.CrownBeasts.Contains(pkm.Species)
|
|
||||||
? (pkm.Species == 251 ? Legal.Transfer4_CelebiUnused : Legal.Transfer4_CrownUnused) // Celebi : Beast
|
|
||||||
: Legal.Transfer4; // Pokétransfer (not Crown)
|
|
||||||
}
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -153,7 +153,7 @@ namespace PKHeX.Core
|
||||||
|
|
||||||
internal static readonly HashSet<int> HM_HGSS = new HashSet<int>
|
internal static readonly HashSet<int> HM_HGSS = new HashSet<int>
|
||||||
{
|
{
|
||||||
015, 019, 057, 070, 250, 249, 127, 431 // Whirlpool(HGSS)
|
015, 019, 057, 070, 250, 249, 127, 431 // Whirlpool(HGSS)
|
||||||
};
|
};
|
||||||
|
|
||||||
internal static readonly HashSet<int> HM_DPPt = new HashSet<int>
|
internal static readonly HashSet<int> HM_DPPt = new HashSet<int>
|
||||||
|
@ -161,7 +161,6 @@ namespace PKHeX.Core
|
||||||
015, 019, 057, 070, 432, 249, 127, 431 // Defog(DPPt)
|
015, 019, 057, 070, 432, 249, 127, 431 // Defog(DPPt)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
internal static readonly HashSet<int> HM_4_RemovePokeTransfer = new HashSet<int>
|
internal static readonly HashSet<int> HM_4_RemovePokeTransfer = new HashSet<int>
|
||||||
{
|
{
|
||||||
015, 019, 057, 070, 249, 127, 431 // Defog(DPPt) & Whirlpool(HGSS) excluded
|
015, 019, 057, 070, 249, 127, 431 // Defog(DPPt) & Whirlpool(HGSS) excluded
|
||||||
|
@ -211,7 +210,6 @@ namespace PKHeX.Core
|
||||||
};
|
};
|
||||||
|
|
||||||
internal static readonly bool[] ReleasedHeldItems_4 = Enumerable.Range(0, MaxItemID_4_HGSS+1).Select(i => HeldItems_HGSS.Contains((ushort)i) && !UnreleasedItems_4.Contains(i)).ToArray();
|
internal static readonly bool[] ReleasedHeldItems_4 = Enumerable.Range(0, MaxItemID_4_HGSS+1).Select(i => HeldItems_HGSS.Contains((ushort)i) && !UnreleasedItems_4.Contains(i)).ToArray();
|
||||||
internal static readonly HashSet<int> CrownBeasts = new HashSet<int> { 251, 243, 244, 245 };
|
|
||||||
|
|
||||||
internal static readonly int[] Tutors_4 =
|
internal static readonly int[] Tutors_4 =
|
||||||
{
|
{
|
||||||
|
@ -282,5 +280,42 @@ namespace PKHeX.Core
|
||||||
{
|
{
|
||||||
2000, 2002, 2009, 2010, 2011, 2013, 2014
|
2000, 2002, 2009, 2010, 2011, 2013, 2014
|
||||||
};
|
};
|
||||||
|
|
||||||
|
internal static int GetTransfer45MetLocation(PKM pk5)
|
||||||
|
{
|
||||||
|
if (pk5.Gen4 && pk5.FatefulEncounter)
|
||||||
|
{
|
||||||
|
var spec = pk5.Species;
|
||||||
|
if (spec == 251) // Celebi
|
||||||
|
return Transfer4_CelebiUnused;
|
||||||
|
if (243 <= spec && spec <= 245) // Beast
|
||||||
|
return Transfer4_CrownUnused;
|
||||||
|
}
|
||||||
|
return Transfer4; // Pokétransfer (not Crown);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static int[] RemoveMovesHM45(int[] moves)
|
||||||
|
{
|
||||||
|
var banned = GetFavorableHMBanlist(moves);
|
||||||
|
|
||||||
|
for (int i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
if (banned.Contains(moves[i]))
|
||||||
|
moves[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return moves;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Transfer via advantageous game
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="moves">Current moves</param>
|
||||||
|
/// <returns>Preferred move ban list</returns>
|
||||||
|
private static HashSet<int> GetFavorableHMBanlist(int[] moves)
|
||||||
|
{
|
||||||
|
// if has defog, return ban list with whirlpool
|
||||||
|
return moves.Contains(432) ? HM_HGSS : HM_DPPt;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -381,16 +381,13 @@ namespace PKHeX.Core
|
||||||
pk5.AltForm = 0;
|
pk5.AltForm = 0;
|
||||||
pk5.HeldItem = 0;
|
pk5.HeldItem = 0;
|
||||||
}
|
}
|
||||||
else
|
else if(!Legal.HeldItems_BW.Contains((ushort)HeldItem))
|
||||||
{
|
{
|
||||||
pk5.HeldItem = Legal.HeldItems_BW.Contains((ushort) HeldItem) ? HeldItem : 0;
|
pk5.HeldItem = 0; // if valid, it's already copied
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fix PP
|
// Fix PP
|
||||||
pk5.Move1_PP = pk5.GetMovePP(pk5.Move1, pk5.Move1_PPUps);
|
pk5.HealPP();
|
||||||
pk5.Move2_PP = pk5.GetMovePP(pk5.Move2, pk5.Move2_PPUps);
|
|
||||||
pk5.Move3_PP = pk5.GetMovePP(pk5.Move3, pk5.Move3_PPUps);
|
|
||||||
pk5.Move4_PP = pk5.GetMovePP(pk5.Move4, pk5.Move4_PPUps);
|
|
||||||
|
|
||||||
// Disassociate Nature and PID, pk4 getter does PID%25
|
// Disassociate Nature and PID, pk4 getter does PID%25
|
||||||
pk5.Nature = Nature;
|
pk5.Nature = Nature;
|
||||||
|
@ -399,9 +396,7 @@ namespace PKHeX.Core
|
||||||
BitConverter.GetBytes((uint)0).CopyTo(pk5.Data, 0x44);
|
BitConverter.GetBytes((uint)0).CopyTo(pk5.Data, 0x44);
|
||||||
|
|
||||||
// Met / Crown Data Detection
|
// Met / Crown Data Detection
|
||||||
pk5.Met_Location = pk5.Gen4 && pk5.FatefulEncounter && Legal.CrownBeasts.Contains(pk5.Species)
|
pk5.Met_Location = Legal.GetTransfer45MetLocation(pk5);
|
||||||
? (pk5.Species == 251 ? Legal.Transfer4_CelebiUnused : Legal.Transfer4_CrownUnused) // Celebi : Beast
|
|
||||||
: Legal.Transfer4; // Pokétransfer (not Crown)
|
|
||||||
|
|
||||||
// Egg Location is not modified; when clearing Pt/HGSS egg data, the location will revert to Faraway Place
|
// Egg Location is not modified; when clearing Pt/HGSS egg data, the location will revert to Faraway Place
|
||||||
// pk5.Egg_Location = Egg_Location;
|
// pk5.Egg_Location = Egg_Location;
|
||||||
|
@ -410,26 +405,15 @@ namespace PKHeX.Core
|
||||||
BitConverter.GetBytes((ushort)0).CopyTo(pk5.Data, 0x86);
|
BitConverter.GetBytes((ushort)0).CopyTo(pk5.Data, 0x86);
|
||||||
pk5.Ball = Ball;
|
pk5.Ball = Ball;
|
||||||
|
|
||||||
// Transfer Nickname and OT Name
|
// Transfer Nickname and OT Name, update encoding
|
||||||
pk5.Nickname = Nickname;
|
pk5.Nickname = Nickname;
|
||||||
pk5.OT_Name = OT_Name;
|
pk5.OT_Name = OT_Name;
|
||||||
|
|
||||||
// Fix Level
|
// Fix Level
|
||||||
pk5.Met_Level = Experience.GetLevel(pk5.EXP, pk5.Species, 0);
|
pk5.Met_Level = pk5.CurrentLevel;
|
||||||
|
|
||||||
// Remove HM moves; Defog should be kept if both are learned.
|
// Remove HM moves; Defog should be kept if both are learned.
|
||||||
int[] banned = Moves.Contains(250) && Moves.Contains(432) // Whirlpool & Defog
|
pk5.Moves = Legal.RemoveMovesHM45(pk5.Moves);
|
||||||
? new[] {15, 19, 57, 70, 250, 249, 127, 431} // No Whirlpool
|
|
||||||
: new[] {15, 19, 57, 70, 249, 127, 431};// Transfer via advantageous game
|
|
||||||
|
|
||||||
int[] newMoves = pk5.Moves;
|
|
||||||
for (int i = 0; i < 4; i++)
|
|
||||||
{
|
|
||||||
if (banned.Contains(newMoves[i]))
|
|
||||||
newMoves[i] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
pk5.Moves = newMoves;
|
|
||||||
pk5.FixMoves();
|
pk5.FixMoves();
|
||||||
|
|
||||||
pk5.RefreshChecksum();
|
pk5.RefreshChecksum();
|
||||||
|
|
Loading…
Reference in a new issue