Пример #1
0
        //private void LoadCountryTags()
        //{
        //	Console.WriteLine("Loading list of countries...");
        //	var countryTagFiles = GetFilesFor(@"common\country_tags");
        //	CountryTags = new List<string>();
        //	foreach (var ctf in countryTagFiles)
        //	{
        //		var file = new StreamReader(ctf);
        //		string line;
        //		while ((line = file.ReadLine()) != null)
        //		{
        //			if (line.First() !='#' && line.Contains('='))
        //			{
        //				var tag = line.Substring(0, line.IndexOf('=')).Trim();
        //				CountryTags.Add(tag);
        //			}
        //		}
        //	}
        //
        //	var dynCountries = RootList.Sublists["dynamic_countries"].Values.Select(s => s.Substring(1, 3));
        //	CountryTags.AddRange(dynCountries);
        //	Console.WriteLine(CountryTags[0]);
        //}


        private void ReadSave(string filePath)
        {
            Console.WriteLine("Reading save file...");
            RootList = PdxSublist.ReadFile(filePath, "EU4txt");
            Console.WriteLine("Save reading complete.");
            //
            //	var file = new StreamReader(filePath);
            //	var line = file.ReadLine();
            //	if (line != "EU4txt")
            //	{
            //		throw new Exception("Not an EU4 file");
            //	}
            //	RootList = new PdxSublist(null);
            //	var currentList = RootList;
            //	//var lineNumber = 0;
            //	while ((line = file.ReadLine()) != null)
            //	{
            //		//lineNumber++;
            //		currentList = PdxSublist.RunLine(line, currentList);
            //	}
            //	if(currentList != RootList)
            //	{
            //		throw new Exception("An unknown error occurred.");
            //	}
            //
        }
Пример #2
0
        private void LoadCultureData()
        {
            Cultures      = new Dictionary <string, Eu4Culture>();
            CultureGroups = new Dictionary <string, Eu4CultureGroup>();
            var relFiles = GetFilesFor(@"common\cultures");
            var ignores  = new string[] { "male_names", "female_names", "dynasty_names" };

            foreach (var relFile in relFiles)
            {
                var cultures = PdxSublist.ReadFile(relFile);
                cultures.ForEachSublist(culGroup =>
                {
                    if (!CultureGroups.ContainsKey(culGroup.Key))
                    {
                        CultureGroups[culGroup.Key] = new Eu4CultureGroup(culGroup.Value, this);
                    }
                    culGroup.Value.ForEachSublist(cul =>
                    {
                        if (!Cultures.ContainsKey(cul.Key) && ignores.All(ign => ign != cul.Key))
                        {
                            Cultures[cul.Key] = CultureGroups[culGroup.Key].AddCulture(cul.Value, this);
                        }
                    });
                });
            }
        }
Пример #3
0
 private void LoadEffects()
 {
     Console.WriteLine("Loading countryEffects.txt...");
     CountryEffects = PdxSublist.ReadFile("countryEffects.txt");
     Console.WriteLine("Loading provinceEffects.txt...");
     ProvinceEffects = PdxSublist.ReadFile("provinceEffects.txt");
 }
Пример #4
0
        private void LoadReligion()
        {
            Console.WriteLine("Loading CK2 religions...");
            CK2Religions = new Dictionary <string, CK2Religion>();
            var religionFiles = GetFilesFor(@"common\religions");

            foreach (var file in religionFiles)
            {
                var religionGroups = PdxSublist.ReadFile(file);
                religionGroups.ForEachSublist(relGroup =>
                {
                    if (relGroup.Key == "secret_religion_visibility_trigger")
                    {
                        return;
                    }
                    relGroup.Value.ForEachSublist(rel =>
                    {
                        if (!(rel.Key == "color" || rel.Key == "male_names" || rel.Key == "female_names"))
                        {
                            CK2Religions[rel.Key] = new CK2Religion(rel.Key);
                        }
                    });
                });
            }
        }
Пример #5
0
        private void LoadReligionData()
        {
            Religions       = new Dictionary <string, Eu4Religion>();
            ReligiousGroups = new Dictionary <string, Eu4ReligionGroup>();
            var relFiles = GetFilesFor(@"common\religions");
            var rgx      = new Regex(@"\d+$");

            foreach (var relFile in relFiles)
            {
                var religions = PdxSublist.ReadFile(relFile);
                religions.ForEachSublist(relGroup =>
                {
                    var key = rgx.Replace(relGroup.Key, string.Empty);
                    if (!ReligiousGroups.ContainsKey(key))
                    {
                        ReligiousGroups[relGroup.Key] = new Eu4ReligionGroup(key, this);
                    }
                    relGroup.Value.ForEachSublist(rel =>
                    {
                        if (!Religions.ContainsKey(rel.Key) && rel.Key != "flag_emblem_index_range")
                        {
                            Religions[rel.Key] = ReligiousGroups[key].AddReligion(rel.Value, this);
                        }
                    });
                });
            }
        }
Пример #6
0
        private void LoadVicReligion()
        {
            ReligiousGroups = new Dictionary <string, Vic2ReligionGroup>();
            var religions = PdxSublist.ReadFile(Path.Combine(VIC2_DIR, @"common\religion.txt"));

            foreach (var relGroup in religions.Sublists)
            {
                ReligiousGroups[relGroup.Key] = new Vic2ReligionGroup(relGroup.Value);
            }
        }
Пример #7
0
        private void LoadExistingCountries()
        {
            ExistingCountries = new HashSet <string>();
            var countries = PdxSublist.ReadFile(Path.Combine(VIC2_DIR, @"common\countries.txt"));

            foreach (var c in countries.KeyValuePairs.Keys)
            {
                ExistingCountries.Add(c);
            }
        }
Пример #8
0
        private void LoadBuildingData()
        {
            Buildings = new List <string>();
            var buildFiles = GetFilesFor(@"common\buildings");

            foreach (var buildFile in buildFiles)
            {
                var buildings = PdxSublist.ReadFile(buildFile);
                Buildings.AddRange(buildings.Sublists.Keys);
            }
        }
Пример #9
0
        private void LoadRegions()
        {
            Console.WriteLine("Loading EU4 areas..");
            var files    = GetFilesFor("map");
            var areaFile = files.Find(f => Path.GetFileName(f) == "area.txt");
            var areas    = PdxSublist.ReadFile(areaFile);

            Areas = new Dictionary <string, Eu4Area>();
            foreach (var ar in areas.Sublists)
            {
                //Areas[ar.Key] = new HashSet<int>(ar.Value.FloatValues.Values.SelectMany(f => f.Select(e => (int)e)));
                Areas[ar.Key] = new Eu4Area(ar.Key, ar.Value);
            }

            Console.WriteLine("Loading EU4 regions...");
            var regionFile = files.Find(f => Path.GetFileName(f) == "region.txt");
            var regions    = PdxSublist.ReadFile(regionFile);

            Regions = new Dictionary <string, Eu4Region>();
            foreach (var reg in regions.Sublists)
            {
                Regions[reg.Key] = new Eu4Region(reg.Key, reg.Value, this);
            }

            Console.WriteLine("Loading EU4 super regions...");

            var superRegionFile = files.Find(f => Path.GetFileName(f) == "superregion.txt");
            var superRegions    = PdxSublist.ReadFile(superRegionFile);

            SuperRegions = new Dictionary <string, Eu4SuperRegion>();
            foreach (var sr in superRegions.Sublists)
            {
                SuperRegions[sr.Key] = new Eu4SuperRegion(sr.Key, sr.Value, this);
            }


            Console.WriteLine("Loading EU4 continents..");

            var continentFile = files.Find(f => Path.GetFileName(f) == "continent.txt");
            var continents    = PdxSublist.ReadFile(continentFile);

            Continents = new Dictionary <string, Eu4Continent>();
            foreach (var con in continents.Sublists)
            {
                //Areas[ar.Key] = new HashSet<int>(ar.Value.FloatValues.Values.SelectMany(f => f.Select(e => (int)e)));
                if (con.Key != "island_check_provinces")
                {
                    Continents[con.Key] = new Eu4Continent(con.Key, con.Value);
                }
            }
        }
Пример #10
0
        private void LoadVicPopData()
        {
            PopData = new PdxSublist();
            var files = Directory.GetFiles(Path.Combine(VIC2_DIR, @"history\pops\1836.1.1"));

            foreach (var file in files)
            {
                var data = PdxSublist.ReadFile(file);
                foreach (var sub in data.Sublists)
                {
                    PopData.Sublists[sub.Key] = sub.Value;
                }
            }
        }
Пример #11
0
        private void LoadGovernmentTypes()
        {
            GovernmentTypes = new List <string>();
            var govFiles = GetFilesFor(@"common\governments");

            foreach (var govFile in govFiles)
            {
                var govs = PdxSublist.ReadFile(govFile);
                govs.ForEachSublist(gov =>
                {
                    GovernmentTypes.Add(gov.Key);
                });
            }
        }
Пример #12
0
        private void LoadDynasties()
        {
            Console.WriteLine("Loading static CK2 dynasties...");
            CK2Dynasties = new Dictionary <int, CK2Dynasty>();
            var dynFiles = GetFilesFor(@"common\dynasties");

            foreach (var dynFile in dynFiles)
            {
                var data = PdxSublist.ReadFile(dynFile);
                data.ForEachSublist(sub =>
                {
                    CK2Dynasties[int.Parse(sub.Key)] = new CK2Dynasty(this, sub.Value);
                });
            }
        }
Пример #13
0
        private void LoadVanillaTitleData()
        {
            Console.WriteLine("Loading CK2 title data...");
            var titles = GetFilesFor(@"common\landed_titles");

            foreach (var title in titles)
            {
                if (Path.GetExtension(title) != ".txt")
                {
                    continue;
                }
                var data = PdxSublist.ReadFile(title);
                RecursiveTitleSearch(data);
            }
        }
Пример #14
0
        private PdxSublist FindProvinceFile(int key)
        {
            var provinces = Path.Combine(VIC2_DIR, @"history\provinces");
            var provDir   = Directory.GetDirectories(provinces);

            foreach (var dir in provDir)
            {
                var files    = Directory.GetFiles(dir);
                var provFile = files.FirstOrDefault(f => Path.GetFileName(f).StartsWith(key + " "));
                if (provFile != default(string))
                {
                    return(PdxSublist.ReadFile(provFile));
                }
            }
            return(null);
        }
Пример #15
0
        private void LoadTraits()
        {
            Console.WriteLine("Loading CK2 traits...");
            CK2Traits = new List <CK2Traits>();
            CK2Traits.Add(null);
            var traitFiles = GetFilesFor(@"common\traits");

            traitFiles.Sort();
            foreach (var file in traitFiles)
            {
                var traits = PdxSublist.ReadFile(file);
                traits.ForEachSublist(trait =>
                {
                    CK2Traits.Add(new CK2Traits(trait));
                });
            }
        }
Пример #16
0
        private void LoadVicCulture()
        {
            Console.WriteLine("Loading Vic2 Cultures...");
            CultureGroups = new Dictionary <string, Vic2CultureGroup>();
            Cultures      = new Dictionary <string, Vic2Culture>();
            var cultures = PdxSublist.ReadFile(Path.Combine(VIC2_DIR, @"common\cultures.txt"));

            foreach (var culGroup in cultures.Sublists)
            {
                var nextGroup = new Vic2CultureGroup(this, culGroup.Value);
                CultureGroups[culGroup.Key] = nextGroup;
                nextGroup.Cultures.ForEach(c => Cultures.Add(c.Name, c));
            }

            Console.WriteLine("Loading cultureNations.txt");
            CultureNations = PdxSublist.ReadFile("cultureNations.txt");
        }
Пример #17
0
        private void LoadHistory()
        {
            Console.WriteLine("Loading history..");
            CountryHistory = new Dictionary <string, PdxSublist>();
            var ctryHistory = GetFilesFor(@"history\countries");

            foreach (var ctry in ctryHistory)
            {
                CountryHistory.Add(Path.GetFileName(ctry).Substring(0, 3), PdxSublist.ReadFile(ctry));
            }

            //ProvinceHistory = new Dictionary<string, PdxSublist>();
            //var provHistory = GetFilesFor(@"history\provinces");
            //foreach (var prov in provHistory)
            //{
            //	ProvinceHistory.Add(Path.GetFileName(prov).Substring(0, 3), PdxSublist.ReadFile(prov));
            //}
        }
Пример #18
0
        private void LoadBuildings()
        {
            Console.WriteLine("Loading CK2 buildings...");
            CK2Buildings = new Dictionary <string, CK2Building>();

            var buildingFiles = GetFilesFor("common\\buildings");

            foreach (var file in buildingFiles)
            {
                var data = PdxSublist.ReadFile(file);
                data.ForEachSublist(sub =>
                {
                    sub.Value.ForEachSublist(building =>
                    {
                        CK2Buildings.Add(building.Key, new CK2Building(building.Value));
                    });
                });
            }
        }
Пример #19
0
 public CK2Save(string filePath, string modPath, bool keepStartDate) : base(modPath)
 {
     FilePath      = filePath;
     KeepStartDate = keepStartDate;
     Console.WriteLine("Reading CK2 save file...");
     RootList = PdxSublist.ReadFile(filePath, "CK2txt");
     Date     = RootList.KeyValuePairs["date"];
     Console.WriteLine(RootList.Sublists.ContainsKey("artifacts"));
     LoadDynasties();
     LoadCharacters();
     LoadArtifacts();
     LoadDynamicReligions();
     LoadTitles();
     LoadProvinces();
     LoadPostCharacters();
     LoadCultureCentres();
     //LoadWars();
     LoadChina();
     LoadVanillaTitleData();
     LoadReligiousData();
 }
Пример #20
0
        private void FixTechnologies()
        {
            // adjust the year for tech

            Directory.CreateDirectory(Path.Combine(OUTPUT, "technologies"));
            var techFiles = Directory.GetFiles(Path.Combine(VIC2_DIR, "technologies"));

            foreach (var techFile in techFiles)
            {
                var data = PdxSublist.ReadFile(techFile);
                data.ForEachSublist(sub =>
                {
                    var year = (int)sub.Value.FloatValues["year"].Single() - 1836 + StartYear;
                    sub.Value.FloatValues["year"].Clear();
                    sub.Value.FloatValues["year"].Add(year);
                });

                using (var outFile = new StreamWriter(Path.Combine(OUTPUT, "technologies", Path.GetFileName(techFile))))
                {
                    data.WriteToFile(outFile);
                }
            }
        }
Пример #21
0
        // do not look in here, it's an ugly mess
        private void LoadVicTech()
        {
            Console.WriteLine("Loading vic2 technologies...");
            var techs     = PdxSublist.ReadFile(Path.Combine(VIC2_DIR, @"common\technology.txt"));
            var techTypes = techs.Sublists["folders"];

            TechOrder = new Dictionary <string, List <string> >();
            foreach (var techType in techTypes.Sublists)
            {
                TechOrder.Add(techType.Key, new List <string>());
                var techTypeFile = PdxSublist.ReadFile(Path.Combine(VIC2_DIR, $@"technologies\{techType.Key}.txt"));
                //list instead of dictionary to retain order
                var subTypes = new List <KeyValuePair <string, Queue <string> > >();
                foreach (var tech in techTypeFile.Sublists)
                {
                    if (!subTypes.Exists(p => p.Key == tech.Value.KeyValuePairs["area"]))
                    {
                        subTypes.Add(new KeyValuePair <string, Queue <string> >(tech.Value.KeyValuePairs["area"], new Queue <string>()));
                    }
                    // a big mess
                    subTypes.Find(kv => kv.Key == tech.Value.KeyValuePairs["area"]).Value.Enqueue(tech.Key);
                }
                var subTypesList = subTypes.ConvertAll(st => st.Value);
                while (subTypesList.Count > 0)
                {
                    for (var i = 0; i < subTypesList.Count; i++)
                    {
                        TechOrder[techType.Key].Add(subTypesList[i].Dequeue());
                        if (subTypesList[i].Count == 0)
                        {
                            subTypesList.RemoveAt(i--);
                        }
                    }
                }
            }
        }
Пример #22
0
        private void LoadPoliticalParties()
        {
            Console.WriteLine("Loading party ideologies...");
            IdeologyModifiers = new Dictionary <Ideology, IdeologyModifier>();
            var parties = PdxSublist.ReadFile("political_parties.txt");

            foreach (var ideology in (Ideology[])Enum.GetValues(typeof(Ideology)))
            {
                var name = Enum.GetName(typeof(Ideology), ideology);
                if (parties.Sublists.ContainsKey(name))
                {
                    var party = new IdeologyModifier();

                    foreach (var policy in Policies.policyTypes)
                    {
                        if (parties.Sublists[name].FloatValues.ContainsKey(policy.Name))
                        {
                            party.AddModifier(policy, parties.Sublists[name].FloatValues[policy.Name].Sum());
                        }
                    }
                    IdeologyModifiers.Add(ideology, party);
                }
            }
        }
Пример #23
0
        private void LoadCulture()
        {
            Console.WriteLine("Loading CK2 cultures...");
            CK2Cultures      = new Dictionary <string, CK2Culture>();
            CK2CultureGroups = new Dictionary <string, CK2CultureGroup>();
            var cultureFiles = GetFilesFor(@"common\cultures");

            foreach (var file in cultureFiles)
            {
                var cultureGroups = PdxSublist.ReadFile(file);
                cultureGroups.ForEachSublist(culGroup =>
                {
                    var group = new CK2CultureGroup(culGroup.Key);
                    CK2CultureGroups[culGroup.Key] = group;
                    culGroup.Value.ForEachSublist(rel =>
                    {
                        if (rel.Key != "graphical_cultures")
                        {
                            CK2Cultures[rel.Key] = new CK2Culture(rel.Value, this, group);
                        }
                    });
                });
            }
        }
Пример #24
0
 private PdxSublist MappingsFile(string filePath)
 {
     Console.WriteLine($"Loading {filePath}...");
     return(PdxSublist.ReadFile(filePath));
 }
Пример #25
0
 private void LoadLocalisationHelper()
 {
     LocalisationHelper = PdxSublist.ReadFile("localisation.txt");
 }
Пример #26
0
        private void CreateCountryFiles()
        {
            //common
            Console.WriteLine("Creating country files...");
            var vanillaCtry = PdxSublist.ReadFile(Path.Combine(VIC2_DIR, @"common\countries.txt"));
            var txt         = Path.Combine(OUTPUT, @"common\countries.txt");

            using (var txtFile = File.CreateText(txt))
            {
                foreach (var country in Vic2Countries)
                {
                    txtFile.WriteLine($"{country.CountryTag} = \"countries/{country.CountryTag}.txt\"");
                }
                txtFile.WriteLine("# From vanilla");
                foreach (var ctry in vanillaCtry.KeyValuePairs)
                {
                    var genCtry = Vic2Countries.Find(c => c.CountryTag == ctry.Key);
                    if (genCtry == null)
                    {
                        txtFile.WriteLine($"{ctry.Key} = \"{ctry.Value}\"");
                    }
                }
            }


            var dir       = Directory.CreateDirectory(Path.Combine(OUTPUT, @"common\countries"));
            var histDir   = Directory.CreateDirectory(Path.Combine(OUTPUT, @"history\countries"));
            var flagDir   = Directory.CreateDirectory(Path.Combine(OUTPUT, @"gfx\flags"));
            var eu4Flags  = Eu4Save.GetFilesFor(@"gfx\flags");
            var vic2Flags = Directory.GetFiles(Path.Combine(VIC2_DIR, @"gfx\flags"));
            var suffixes  = new string[] { "", "communist", "fascist", "monarchy", "republic" };

            foreach (var country in Vic2Countries)
            {
                //common\countries
                using (var file = File.CreateText(Path.Combine(dir.FullName, $"{country.CountryTag}.txt")))
                {
                    country.GetCommonCountryFile().WriteToFile(file);
                }
                //history\countries
                using (var file = File.CreateText(Path.Combine(histDir.FullName, $"{country.CountryTag}.txt")))
                {
                    country.GetHistoryCountryFile(this).WriteToFile(file);
                }
                if (country.CountryTag == "GRA")
                {
                    Console.WriteLine();
                }
                if (vic2Flags.FirstOrDefault(f => Path.GetFileName(f).StartsWith(country.CountryTag)) == null)
                {
                    var eu4Flag = eu4Flags.Find(f => Path.GetFileName(f).StartsWith(country.Eu4Country?.CountryTag ?? "!"));
                    foreach (var suff in suffixes)
                    {
                        var name = country.CountryTag + (suff == string.Empty ? string.Empty : $"_{suff}");
                        if (eu4Flag == null)
                        {
                            country.CreateFlag(Path.Combine(flagDir.FullName, $"{name}.tga"), suff);
                        }
                        else
                        {
                            File.Copy(eu4Flag, Path.Combine(flagDir.FullName, $"{name}.tga"));
                        }
                    }
                }
            }
        }
Пример #27
0
 private void LoadFactories()
 {
     Factories = PdxSublist.ReadFile("factory.txt");
 }
Пример #28
0
 public ProvinceMapper(string mappingPath)
 {
     //instance = this;
     Console.WriteLine("Loading province mappings...");
     Mappings = PdxSublist.ReadFile(mappingPath);
 }
Пример #29
0
        private void LoadProvCounties()
        {
            Console.WriteLine("Loading CK2 provinces...");
            // CK2ProvCounties = new Dictionary<string, string>();
            // CK2DupeProvCounties = new Dictionary<string, string>();
            CK2Provinces     = new Dictionary <int, CK2Province>();
            CK2ProvinceDupes = new Dictionary <int, CK2Province>();
            var provFiles = GetFilesFor("history\\provinces");

            foreach (var provFile in provFiles)
            {
                var data   = PdxSublist.ReadFile(provFile);
                var provID = int.Parse(new Regex("[0-9]+").Match(Path.GetFileName(provFile)).Value);
                var prov   = new CK2Province(provID, this, data);
                if (CK2Provinces.ContainsKey(provID))
                {
                    CK2ProvinceDupes.Add(provID, prov);
                }
                else
                {
                    CK2Provinces.Add(provID, prov);
                }
                //  if (CK2ProvCounties.ContainsKey(provID))
                // {
                //    CK2DupeProvCounties.Add(provID, data.KeyValuePairs["title"]);
                // }
                // else
                // {
                //     CK2ProvCounties.Add(provID, data.KeyValuePairs["title"]);
                // }
            }

            var mapFiles = GetFilesFor("map");

            var provMapFile = mapFiles.Single(m => Path.GetFileName(m) == "provinces.bmp");

            ProvinceMap    = new Bitmap(provMapFile);
            CK2ProvColours = new Dictionary <int, string>();
            var defFile = mapFiles.Single(m => Path.GetFileName(m) == "definition.csv");

            using (TextFieldParser parser = new TextFieldParser(defFile))
            {
                parser.TextFieldType = FieldType.Delimited;
                parser.SetDelimiters(";");
                parser.ReadFields();
                while (!parser.EndOfData)
                {
                    //Process row
                    string[] fields = parser.ReadFields();
                    var      col    = Color.FromArgb(int.Parse(fields[1]), int.Parse(fields[2]), int.Parse(fields[3]));
                    CK2ProvColours[col.ToArgb()] = fields[0];
                }
            }
            Console.WriteLine("Loading province map...");
            CK2ProvPositions = new Dictionary <string, List <Point> >();
            var bmp = ProvinceMap;

            for (int y = 0; y < bmp.Height; y++)
            {
                for (int x = 0; x < bmp.Width; x++)
                {
                    var pxColour = bmp.GetPixel(x, y).ToArgb();
                    if (CK2ProvColours.ContainsKey(pxColour))
                    {
                        var provID = CK2ProvColours[pxColour];
                        if (!CK2ProvPositions.ContainsKey(provID))
                        {
                            CK2ProvPositions[provID] = new List <Point>();
                        }
                        CK2ProvPositions[provID].Add(new Point(x, y));
                    }
                }
            }
        }