public static void DoEdit(ChangeArgs args)
        {
            // collect characters
            AICCollection result = new AICCollection();

            foreach (Change c in Version.Changes)
            {
                if (!c.IsChecked || !(c is AICChange))
                {
                    continue;
                }

                AICCollection collection = ((AICChange)c).Collection;
                foreach (AICharacter aic in collection.Values)
                {
                    // topmost aics have priority
                    if (!result.ContainsKey(aic.Index))
                    {
                        result.Add(aic.Index, aic);
                    }
                }
            }

            CreateEdit(result).Activate(args);
        }
        static void ParseAll()
        {
            AICCollection collection = new AICCollection();

            foreach (string file in Directory.EnumerateFiles("decompiled", "*.txt"))
            {
                string name = Path.GetFileNameWithoutExtension(file);
                if (!Enum.TryParse(name, true, out AICIndex index))
                {
                    continue;
                }

                Console.WriteLine(index);
                using (StreamReader sr = new StreamReader(file))
                {
                    AICharacter aic = new AICharacter()
                    {
                        Index       = (int)index,
                        Name        = index.ToString(),
                        Personality = Parse(sr)
                    };
                    collection.Add((int)index, aic);
                }
            }

            using (FileStream fs = new FileStream("vanilla.aic", FileMode.Create))
                collection.Write(fs);
        }