// Public Methods #region Public /// <summary> /// Write the spoilers file, containg the randomized items location /// </summary> /// <param name="sourcefile">Oringal spoiler files</param> /// <param name="destinationfile">Path to save the organized spoiler file</param> public static void WriteSpoilers(string sourcefile, string destinationfile) { // Check parameters if (!File.Exists(sourcefile)) { throw new ArgumentException($"{sourcefile} does not exists."); } // Read the original spoilers file content string[] spoilers = File.ReadAllLines(sourcefile); List <string[]> spoilersInfo = new List <string[]>(); foreach (string spoilLine in spoilers) { spoilersInfo.Add(spoilLine.Replace(" -> ", ";").Split(';')); } // Create stream to save the spoiler file using (TextWriter spoilerWriter = new StreamWriter(destinationfile)) { // Write by item type SpoilersWriter.WriteSpoilersByItemType(spoilerWriter, spoilersInfo); spoilerWriter.WriteLine(); // Write by item location SpoilersWriter.WriteSpoilersByItemLocation(spoilerWriter, spoilersInfo); } }
/// <summary> /// Write the spoilers information grouped by items location /// </summary> /// <param name="textwriter">Text writer</param> /// <param name="spoilersInfo">Original spoiler info</param> private static void WriteSpoilersByItemLocation(TextWriter textwriter, List <string[]> spoilersInfo) { // Header textwriter.WriteLine("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"); textwriter.WriteLine("Items by location: "); textwriter.WriteLine(); // Landing Site, Crateria and Blue Brinstar items textwriter.WriteLine("\tLanding Site, Crateria and Blue Brinstar [Original Item Location -> Randomized Item]:"); SpoilersWriter.WriteItemLocation(textwriter, spoilersInfo.Where(m => SpoilersWriter._LandingSiteCrateriaBlueBrinstar.Contains(m[0])), true); // Green and Pink Brinstar items textwriter.WriteLine("\tGreen and Pink Brinstar [Original Item Location -> Randomized Item]:"); SpoilersWriter.WriteItemLocation(textwriter, spoilersInfo.Where(m => SpoilersWriter._GreenAndPinkBrinstar.Contains(m[0])), true); // Red Brinstar items textwriter.WriteLine("\tRed Brinstar [Original Item Location -> Randomized Item]:"); SpoilersWriter.WriteItemLocation(textwriter, spoilersInfo.Where(m => SpoilersWriter._RedBrinstar.Contains(m[0])), true); // Moat, West Ocean and Wrecked Ship items textwriter.WriteLine("\tMoat, West Ocean and Wrecked Ship [Original Item Location -> Randomized Item]:"); SpoilersWriter.WriteItemLocation(textwriter, spoilersInfo.Where(m => SpoilersWriter._MoatWestOceanAndWreckedShip.Contains(m[0])), true); // Kraid and Upper-Left Norfair items textwriter.WriteLine("\tKraid and Upper-Left Norfair [Original Item Location -> Randomized Item]:"); SpoilersWriter.WriteItemLocation(textwriter, spoilersInfo.Where(m => SpoilersWriter._KraidAndUpperLeftNorfair.Contains(m[0])), true); // Bubble Moutain and Upper-Right Norfair items textwriter.WriteLine("\tBubble Moutain and Upper-Right Norfair [Original Item Location -> Randomized Item]:"); SpoilersWriter.WriteItemLocation(textwriter, spoilersInfo.Where(m => SpoilersWriter._BubbleMoutainAndUpperRightNorfair.Contains(m[0])), true); // Crocomire items textwriter.WriteLine("\tCrocomire [Original Item Location -> Randomized Item]:"); SpoilersWriter.WriteItemLocation(textwriter, spoilersInfo.Where(m => SpoilersWriter._Crocomire.Contains(m[0])), true); // Lower Norfair items textwriter.WriteLine("\tLower Norfair [Original Item Location -> Randomized Item]:"); SpoilersWriter.WriteItemLocation(textwriter, spoilersInfo.Where(m => SpoilersWriter._LowerNorfair.Contains(m[0])), true); // Maridia items textwriter.WriteLine("\tMaridia [Original Item Location -> Randomized Item]:"); SpoilersWriter.WriteItemLocation(textwriter, spoilersInfo.Where(m => SpoilersWriter._Maridia.Contains(m[0])), true); }
/// <summary> /// Write the spoilers information grouped by item type /// </summary> /// <param name="textwriter">Text writer</param> /// <param name="spoilersInfo">Original spoiler info</param> private static void WriteSpoilersByItemType(TextWriter textwriter, List <string[]> spoilersInfo) { // Major items header textwriter.WriteLine("Items by type: "); textwriter.WriteLine(); textwriter.WriteLine("\tMajor items [Randomized Item -> Original Item Location]:"); // Suits SpoilersWriter.WriteItemLocation(textwriter, spoilersInfo.Where(m => SpoilersWriter._SuitItems.Contains(m[1]))); // Boots SpoilersWriter.WriteItemLocation(textwriter, spoilersInfo.Where(m => SpoilersWriter._BootItems.Contains(m[1]))); // Beams SpoilersWriter.WriteItemLocation(textwriter, spoilersInfo.Where(m => SpoilersWriter._BeamItems.Contains(m[1]))); // Misc SpoilersWriter.WriteItemLocation(textwriter, spoilersInfo.Where(m => SpoilersWriter._MiscItems.Contains(m[1]))); // Aux SpoilersWriter.WriteItemLocation(textwriter, spoilersInfo.Where(m => SpoilersWriter._AuxItems.Contains(m[1]))); // Energy Tanks SpoilersWriter.WriteItemLocation(textwriter, spoilersInfo.Where(m => m[1].Equals(SpoilersWriter._EnergyTankItems))); // Reserve Tanks SpoilersWriter.WriteItemLocation(textwriter, spoilersInfo.Where(m => m[1].Equals(SpoilersWriter._ReserveTankItems))); // Minor items header textwriter.WriteLine(); textwriter.WriteLine("\tMinor items [Randomized Item -> Original Item Location]:"); // Power bomb items SpoilersWriter.WriteItemLocation(textwriter, spoilersInfo.Where(m => m[1].Equals(SpoilersWriter._PowerBombItems))); // Super Missile items SpoilersWriter.WriteItemLocation(textwriter, spoilersInfo.Where(m => m[1].Equals(SpoilersWriter._SuperMissileItems))); // Item Missile items SpoilersWriter.WriteItemLocation(textwriter, spoilersInfo.Where(m => m[1].Equals(SpoilersWriter._MissileItems))); }