public static void CreateDictionary()
        {
            Regex rgx = new Regex("[^a-zA-Z0-9 -]");

            System.Net.WebClient wc = new System.Net.WebClient();
            string webData          = wc.DownloadString("https://raw.githubusercontent.com/LagoLunatic/wwrando/9f4752b6defbc5849ef52044422109b36f2ad790/logic/item_locations.txt");

            string[] Lines = webData.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None);

            List <string> DictionaryLines = new List <string> {
                "DictionaryName,LocationName,ItemName,LocationArea,ItemSubType,SpoilerLocation,SpoilerItem,EntrancePair"
            };

            LogicObjects.LogicDictionaryEntry Item = new LogicObjects.LogicDictionaryEntry();

            foreach (var i in Lines)
            {
                string Line = i.Trim();
                //Debugging.Log(Line);
                bool Unimplimented = false;
                if (Line.StartsWith("#"))
                {
                    Line.Replace("#", "");
                    Unimplimented = true;
                }
                if (Line.Contains(" -") && !Line.StartsWith("-") && !Line.Contains("\"") && Line.Contains(":") && !Line.Contains("Original item:") && !Line.Contains("Note:") && !Line.Contains("/"))
                {
                    if (!string.IsNullOrWhiteSpace(Item.DictionaryName))
                    {
                        string DictionaryLine = $"{Item.DictionaryName},{Item.LocationName},{Item.ItemName},{Item.LocationArea},{Item.ItemSubType},{Item.SpoilerLocation},{Item.SpoilerItem},";
                        DictionaryLines.Add(DictionaryLine.Replace("  ", " "));
                    }
                    Item = new LogicObjects.LogicDictionaryEntry();
                    var AllParts = Line.Split(new string[] { " -" }, StringSplitOptions.None);

                    string CombineParts = "";
                    for (var j = 1; j < AllParts.Length; j++)
                    {
                        string Seperater = (j == AllParts.Length - 1) ? "" : " -";
                        CombineParts = CombineParts + AllParts[j] + Seperater;
                    }

                    string[] Parts = new string[2] {
                        AllParts[0], CombineParts
                    };


                    Item.ItemSubType     = "Item";
                    Item.LocationArea    = Parts[0].Trim().Replace("#", "");
                    Item.LocationName    = Parts[1].Substring(0, Parts[1].IndexOf(":")).Trim();
                    Item.SpoilerLocation = Item.LocationName;
                    Item.DictionaryName  = Item.LocationArea + " " + rgx.Replace(Parts[1].Trim(), "").Replace("-", "");
                    Item.LocationName    = (Unimplimented) ? "" : Item.LocationName;
                }
                if (Line.Contains("Original item:"))
                {
                    Item.ItemName    = Line.Split(':')[1].Trim();
                    Item.SpoilerItem = Item.ItemName;
                }
            }
            SaveFileDialog saveDic = new SaveFileDialog
            {
                Filter   = "CSV File (*.csv)|*.csv",
                Title    = "Save Dictionary File",
                FileName = "WWRDICTIONARYV" + "1.7.0" + ".csv"
            };

            saveDic.ShowDialog();
            File.WriteAllLines(saveDic.FileName, DictionaryLines);
        }
        public static void CreateMinishLogDic()
        {
            var MinishLogicFile = File.ReadAllLines(@"D:\Emulated Games\Emulator\mGBA-0.7.3-win64\MinishRandomizer.v0.6.1a\MinishRandomizer.v0.6.1a\default.logic");

            bool AtLogic      = false;
            bool IsInIf       = false;
            bool IsInElse     = false;
            bool atKinstones  = false;
            bool atRupeeMania = false;

            LogicObjects.TrackerInstance MinishLogic = new LogicObjects.TrackerInstance
            {
                Logic           = new List <LogicObjects.LogicEntry>(),
                LogicDictionary = new List <LogicObjects.LogicDictionaryEntry>(),
                GameCode        = "MCR",
                LogicVersion    = 1
            };


            string CurrentLocation = "Overworld";

            foreach (var i in MinishLogicFile)
            {
                if (i.Trim().StartsWith("#Kinstone"))
                {
                    atKinstones = true;
                }
                if (i.Trim().StartsWith("HearthPot;"))
                {
                    atKinstones = false;
                }
                if (i.Trim().StartsWith("!ifdef - RUPEEMANIA"))
                {
                    atRupeeMania = true;
                }
                if (i.Trim() == "# Item Macro Helpers")
                {
                    AtLogic = true;
                }
                if (i.Trim() == "#Unrandomized locations")
                {
                    AtLogic = false;
                }
                if (!AtLogic)
                {
                    continue;
                }
                if (string.IsNullOrWhiteSpace(i))
                {
                    continue;
                }
                if (i.Trim().StartsWith("#"))
                {
                    continue;
                }

                if (i.Contains("!ifdef") || i.Contains("!ifndef"))
                {
                    IsInIf = true; continue;
                }
                if (i.Contains("!else"))
                {
                    IsInElse = true; IsInIf = false; continue;
                }
                if (i.Contains("!endif"))
                {
                    IsInElse = false; IsInIf = false; continue;
                }

                //if (IsInElse) { continue; }

                string CleanedLine = i.Replace("Items.", "").Replace("Helpers.", "").Replace("Locations.", "");

                var Data = CleanedLine.Split(';').Select(x => x.Trim()).ToArray();

                if (Data.Count() < 4)
                {
                    continue;
                }
                LogicObjects.LogicEntry           Entry = new LogicObjects.LogicEntry();
                LogicObjects.LogicDictionaryEntry Dic   = new LogicObjects.LogicDictionaryEntry();

                Entry.DictionaryName = Data[0];

                if (Data[0].Contains(":"))
                {
                    Data[0] = Data[0].Substring(0, Data[0].IndexOf(":"));
                }

                CurrentLocation = "Overworld";

                var LogicData = Data[3].Split(',').Select(x => x.Replace(")", "").Replace("(", "").Replace("|", "").Replace("&", "")).ToList();
                var AreaData  = LogicData.Find(x => x.Contains("Access"));
                if (AreaData != null)
                {
                    string Loc = string.Concat(AreaData.Replace("Access", "").Select(x => Char.IsUpper(x) ? " " + x : x.ToString())).TrimStart(' ');
                    CurrentLocation = Loc;
                }


                if (MinishLogic.Logic.Where(x => x.DictionaryName == Entry.DictionaryName).Any())
                {
                    continue;
                }
                Console.WriteLine(Entry.DictionaryName);

                Entry.IsFake         = Data[1] == "Helper";
                Entry.Checked        = false;
                Entry.ItemSubType    = "Item";
                Entry.RandomizedItem = -2;
                Entry.SpoilerRandom  = -2;
                if (!Entry.IsFake)
                {
                    Dic.DictionaryName  = Entry.DictionaryName;
                    Dic.LocationArea    = CurrentLocation;
                    Dic.LocationName    = string.Concat(Data[0].Select(x => Char.IsUpper(x) ? " " + x : x.ToString())).TrimStart(' ');
                    Dic.SpoilerLocation = Data[0];

                    string ItemName    = "";
                    string DicItemName = "";
                    if (Data.Count() > 4)
                    {
                        DicItemName = Data[4];
                        if (DicItemName.Contains("#"))
                        {
                            DicItemName = DicItemName.Substring(0, DicItemName.IndexOf("#")).Trim();
                        }
                        if (DicItemName.Contains("'"))
                        {
                            DicItemName = DicItemName.Substring(0, DicItemName.IndexOf("'")).Trim();
                        }
                        if (string.IsNullOrWhiteSpace(DicItemName))
                        {
                            DicItemName = "";
                        }
                        ItemName = string.Concat(DicItemName.Select(x => Char.IsUpper(x) ? " " + x : x.ToString())).TrimStart(' ');
                    }

                    Dic.SpoilerItem = DicItemName;
                    Dic.ItemName    = ItemName;
                    Dic.ItemSubType = "Item";
                    MinishLogic.LogicDictionary.Add(Dic);

                    Entry.LocationArea = CurrentLocation;
                    Entry.LocationName = string.Concat(Data[0].Select(x => Char.IsUpper(x) ? " " + x : x.ToString())).TrimStart(' ');
                    Entry.ItemName     = ItemName;
                    Console.WriteLine(ItemName);
                }

                MinishLogic.Logic.Add(Entry);
                Console.WriteLine("================");
            }

            LogicObjects.MainTrackerInstance = MinishLogic;
            MainInterface.CurrentProgram.PrintToListBox();
            MainInterface.CurrentProgram.ResizeObject();
            MainInterface.CurrentProgram.FormatMenuItems();

            List <string> csv = new List <string> {
                "DictionaryName,LocationName,ItemName,LocationArea,ItemSubType,SpoilerLocation,SpoilerItem"
            };

            foreach (LogicObjects.LogicDictionaryEntry entry in MinishLogic.LogicDictionary)
            {
                csv.Add(string.Format("{0},{1},{2},{3},{4},{5},{6}",
                                      entry.DictionaryName, entry.LocationName, entry.ItemName, entry.LocationArea,
                                      entry.ItemSubType, entry.SpoilerLocation, entry.SpoilerItem));
            }

            SaveFileDialog saveDic = new SaveFileDialog
            {
                Filter   = "CSV File (*.csv)|*.csv",
                Title    = "Save Dictionary File",
                FileName = "MCRDICTIONARYV6.csv"
            };

            saveDic.ShowDialog();
            File.WriteAllLines(saveDic.FileName, csv);

            SaveFileDialog saveDialog = new SaveFileDialog {
                Filter = "Logic File (*.txt)|*.txt", FilterIndex = 1
            };

            if (saveDialog.ShowDialog() != DialogResult.OK)
            {
                return;
            }
            var          logicText = LogicEditing.WriteLogicToArray(MinishLogic, true).ToList();
            StreamWriter LogicFile = new StreamWriter(File.Open(saveDialog.FileName, FileMode.Create));

            for (int i = 0; i < logicText.Count; i++)
            {
                if (i == logicText.Count - 1)
                {
                    LogicFile.Write(logicText[i]); break;
                }
                LogicFile.WriteLine(logicText[i]);
            }
            LogicFile.Close();

            return;
        }