private static EncounterSlot8GO ReadSlot(byte[] data, int offset, EncounterArea8g area, int species, int form, GameVersion group) { int start = BitConverter.ToInt32(data, offset); int end = BitConverter.ToInt32(data, offset + 4); var shiny = (Shiny)data[offset + 8]; var type = (PogoType)data[offset + 9]; return(new EncounterSlot8GO(area, species, form, start, end, shiny, type, group)); }
internal static EncounterArea8g[] GetArea(int maxSpecies, HashSet <int> banlist, IEnumerable <int> extras) { var area = new EncounterArea8g { Location = Locations.GO8, Type = SlotType.GoPark }; var all = GetSlots(area, maxSpecies, banlist, extras); area.Slots = all.ToArray(); return(new[] { area }); }
internal static EncounterArea8g[] GetArea(byte[][] data) { var areas = new EncounterArea8g[data.Length]; for (int i = 0; i < areas.Length; i++) { areas[i] = GetArea(data[i]); } return(areas); }
private static EncounterArea8g GetArea(byte[] data) { var sf = BitConverter.ToInt16(data, 0); int species = sf & 0x7FF; int form = sf >> 11; var group = GetGroup(species, form); var result = new EncounterSlot8GO[(data.Length - 2) / entrySize]; var area = new EncounterArea8g(species, form) { Slots = result }; for (int i = 0; i < result.Length; i++) { var offset = (i * entrySize) + 2; result[i] = ReadSlot(data, offset, area, species, form, group); } return(area); }
private static IEnumerable <EncounterSlot> GetSlots(EncounterArea8g area, int maxSpecies, HashSet <int> banlist, IEnumerable <int> extras) { // Gen7: GO transfers to LGPE cannot send Mew. // Gen8: GO transfers to HOME can send Mew. Iterate from here. // However, Mew transfers with LGPE base moves. Because everything <= 151 uses LGPE level-up table. Handle manually! yield return(GetSlot(area, (int)Species.Mew, 0, GameVersion.GG)); const int start = 1; var speciesList = Enumerable.Range(start, maxSpecies - start + 1).Concat(extras); var pt7 = PersonalTable.USUM; var pt8 = PersonalTable.SWSH; var ptGG = PersonalTable.GG; foreach (var specform in speciesList) { var species = specform & 0x7FF; if (banlist.Contains(species)) { continue; } var pi8 = (PersonalInfoSWSH)pt8[species]; if (pi8.IsPresentInGame) { for (int f = 0; f < pi8.FormeCount; f++) { var sf = species | (f << 11); if (banlist.Contains(sf)) { continue; } if (IsDisallowedDuplicateForm(species, f)) { continue; } bool lgpe = (species <= 151 || species == 808 || species == 809) && ptGG[species].HasForme(f); var game = lgpe ? GameVersion.GG : GameVersion.SWSH; yield return(GetSlot(area, species, f, game)); } } else if (species <= Legal.MaxSpeciesID_7_USUM) { var pi7 = pt7[species]; for (int f = 0; f < pi7.FormeCount; f++) { var sf = species | (f << 11); if (banlist.Contains(sf)) { continue; } if (IsDisallowedDuplicateForm(species, f)) { continue; } bool lgpe = species <= 151 && ptGG[species].HasForme(f); var game = lgpe ? GameVersion.GG : GameVersion.USUM; yield return(GetSlot(area, species, f, game)); } } } }
private static EncounterSlot8GO GetSlot(EncounterArea8g area, int species, int form, GameVersion baseOrigin) { var min = EncountersGO.GetMinLevel(species, form); return(new EncounterSlot8GO(area, species, form, baseOrigin, min, 40)); }