Precompute gg banned moves

Fake Out isn't flagged with F18, so F18 isn't valid with respect to
identifying allowed moves.
This commit is contained in:
Kurt 2018-11-24 09:55:07 -08:00
parent 6ea0885de8
commit 49a656a901
2 changed files with 33 additions and 8 deletions

View File

@ -145,7 +145,7 @@ private void DetermineSpecies(IPokeData pk)
{
pk.Species = RandSpec.GetRandomSpeciesType(pk.Species, Type);
pk.HeldItem = PossibleHeldItems[Util.Random.Next(PossibleHeldItems.Length)];
pk.Form = Legal.GetRandomForme(pk.Species, Settings.AllowRandomMegaForms, true, Personal.Table);
pk.Form = Legal.GetRandomForme(pk.Species, Settings.AllowRandomMegaForms, true, Personal);
}
pk.Gender = 0; // random
@ -157,7 +157,7 @@ private void DetermineSpecies(IPokeData pk)
int randFinalEvo() => Util.Random.Next(FinalEvo.Count);
if (FinalEvo.Count != 0)
pk.Species = FinalEvo[randFinalEvo()];
pk.Form = Legal.GetRandomForme(pk.Species, Settings.AllowRandomMegaForms, true, Personal.Table);
pk.Form = Legal.GetRandomForme(pk.Species, Settings.AllowRandomMegaForms, true, Personal);
}
}

View File

@ -6,7 +6,7 @@ namespace pkNX.Structures
{
public static partial class Legal
{
public static int GetRandomForme(int species, bool mega, bool alola, PersonalInfo[] stats = null)
public static int GetRandomForme(int species, bool mega, bool alola, PersonalTable stats)
{
if (stats == null)
return 0;
@ -22,6 +22,8 @@ public static int GetRandomForme(int species, bool mega, bool alola, PersonalInf
if (alola && EvolveToAlolanForms.Contains(species))
return Util.Rand.Next(2);
if (stats.TableLength == 980 && species == 25) // gg tableB
return Util.Rand.Next(2) == 1 ? 8 : 0; // Pikachu
if (!BattleExclusiveForms.Contains(species) || mega)
return Util.Rand.Next(stats[species].FormeCount); // Slot-Random
return 0;
@ -171,11 +173,34 @@ public static int[] GetBannedMoves(GameVersion infoGame, IEnumerable<Move> moves
if (!GameVersion.GG.Contains(infoGame))
return Array.Empty<int>();
var banned = moves
.Select((z, i) => new { Index = i, Move = (Move7)z })
.Where(z => (z.Move.Flags & MoveFlag7.F18) == 0) // no "allowed" flag
.Select(z => z.Index).ToArray();
return banned;
return Enumerable.Range(0, moves.Count()).Except(AllowedMovesGG).ToArray();
}
private static readonly int[] AllowedMovesGG =
{
000, 001, 002, 003, 004, 005, 006, 007, 008, 009,
010, 011, 012, 013, 014, 015, 016, 017, 018, 019,
020, 021, 022, 023, 024, 025, 026, 027, 028, 029,
030, 031, 032, 033, 034, 035, 036, 037, 038, 039,
040, 041, 042, 043, 044, 045, 046, 047, 048, 049,
050, 051, 052, 053, 054, 055, 056, 057, 058, 059,
060, 061, 062, 063, 064, 065, 066, 067, 068, 069,
070, 071, 072, 073, 074, 075, 076, 077, 078, 079,
080, 081, 082, 083, 084, 085, 086, 087, 088, 089,
090, 091, 092, 093, 094, 095, 096, 097, 098, 099,
100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
160, 161, 162, 163, 164,
182, 188, 200, 224, 227, 231, 242, 243, 247, 252,
257, 261, 263, 269, 270, 276, 280, 281, 339, 347,
355, 364, 369, 389, 394, 398, 399, 403, 404, 405,
406, 417, 420, 430, 438, 446, 453, 483, 492, 499,
503, 504, 525, 529, 583, 585, 605, 742
};
}
}