private static List <EncounterArea2> GetAreas2Fishing(byte[] data, ref int ofs) { var areas = new List <EncounterArea2>(); while (ofs != 0x18C) { var old = GetSlots2Fishing(data, ref ofs, SlotType.Old_Rod); var good = GetSlots2Fishing(data, ref ofs, SlotType.Good_Rod); var super = GetSlots2Fishing(data, ref ofs, SlotType.Super_Rod); areas.Add(new EncounterArea2 { Slots = ArrayUtil.ConcatAll(old, good, super), }); } // Read TimeFishGroups var dl = new List <SlotTemplate>(); while (ofs < data.Length) { dl.Add(new SlotTemplate(data[ofs++], data[ofs++])); } // Add TimeSlots foreach (var area in areas) { var slots = area.Slots; for (int i = 0; i < slots.Length; i++) { var slot = slots[i]; if (slot.Type != SlotType.Special) { continue; } Array.Resize(ref slots, slots.Length + 1); Array.Copy(slots, i, slots, i + 1, slots.Length - i - 1); // shift slots down slots[i + 1] = slot.Clone(); // differentiate copied slot int index = slot.LevelMin * 2; for (int j = 0; j < 2; j++) // load special slot info { var s = (EncounterSlot2)slots[i + j]; s.Species = dl[index + j].Species; s.LevelMin = s.LevelMax = dl[index + j].Level; s.Type = slots[i - 1].Type; // special slots are never first in a set, so copy previous type s.Time = j == 0 ? EncounterTime.Morning | EncounterTime.Day : EncounterTime.Night; } } area.Slots = slots; } return(areas); }
static Encounters1() { StaticRBY = Encounter_RBY; SlotsRBY = GetAreas(); MarkEncountersGeneration(1, SlotsRBY); MarkEncountersGeneration(1, StaticRBY, TradeGift_RBY_NoTradeback, TradeGift_RBY_Tradeback); var trades = ArrayUtil.ConcatAll(TradeGift_RBY_NoTradeback, TradeGift_RBY_Tradeback); foreach (var t in trades) { t.TrainerNames = StringConverter12.G1TradeOTName; } }
static BallApplicator() { var exclude = new[] { None, Poke }; var end = new[] { Poke }; var allBalls = BallList.Except(exclude).ToArray(); var colors = (PersonalColor[])Enum.GetValues(typeof(PersonalColor)); foreach (var c in colors) { var matchingColors = BallColors[c]; var extra = allBalls.Except(matchingColors).ToArray(); Util.Shuffle(extra); BallColors[c] = ArrayUtil.ConcatAll(matchingColors, extra, end); } }
/// <summary> /// Gets the encounter areas with <see cref="EncounterSlot"/> information from Generation 1 Grass/Water data. /// </summary> /// <param name="data">Input raw data.</param> /// <param name="count">Count of areas in the binary.</param> /// <returns>Array of encounter areas.</returns> public static EncounterArea1[] GetArray1GrassWater(byte[] data, int count) { EncounterArea1[] areas = new EncounterArea1[count]; for (int i = 0; i < areas.Length; i++) { int ptr = BitConverter.ToInt16(data, i * 2); var grass = GetSlots1GrassWater(data, ref ptr, SlotType.Grass); var water = GetSlots1GrassWater(data, ref ptr, SlotType.Surf); areas[i] = new EncounterArea1 { Location = i, Slots = ArrayUtil.ConcatAll(grass, water), }; } return(areas.Where(area => area.Slots.Length != 0).ToArray()); }