diff --git a/ImperatorToCK3/CK3/Characters/CharacterCollection.cs b/ImperatorToCK3/CK3/Characters/CharacterCollection.cs index f51610ec8..06086389b 100644 --- a/ImperatorToCK3/CK3/Characters/CharacterCollection.cs +++ b/ImperatorToCK3/CK3/Characters/CharacterCollection.cs @@ -824,4 +824,22 @@ internal void ConvertImperatorCharacterDNA(DNAFactory dnaFactory) { } } } + + public void RemoveUndefinedTraits(TraitMapper traitMapper) { + Logger.Info("Removing undefined traits from CK3 character history..."); + + var definedTraits = traitMapper.ValidCK3TraitIDs.ToHashSet(); + + foreach (var character in this) { + if (character.FromImperator) { + continue; + } + + var traitsField = character.History.Fields["traits"]; + int removedCount = traitsField.RemoveAllEntries(value => !definedTraits.Contains(value.ToString()?.RemQuotes() ?? string.Empty)); + if (removedCount > 0) { + Logger.Debug($"Removed {removedCount} undefined traits from character {character.Id}."); + } + } + } } \ No newline at end of file diff --git a/ImperatorToCK3/CK3/Characters/CharactersLoader.cs b/ImperatorToCK3/CK3/Characters/CharactersLoader.cs index 0b686d6cb..27d156816 100644 --- a/ImperatorToCK3/CK3/Characters/CharactersLoader.cs +++ b/ImperatorToCK3/CK3/Characters/CharactersLoader.cs @@ -33,7 +33,7 @@ public void LoadCK3Characters(ModFilesystem ck3ModFS, Date bookmarkDate) { "set_relation_ward", "set_relation_mentor", "add_opinion", "make_concubine", ]; - string[] fieldsToClear = ["friends", "best_friends", "lovers", "rivals", "nemesis", "primary_title"]; + string[] fieldsToClear = ["friends", "best_friends", "lovers", "rivals", "nemesis", "primary_title", "dna"]; foreach (var character in loadedCharacters) { // Remove post-bookmark history except for births and deaths. diff --git a/ImperatorToCK3/CK3/Cultures/CultureCollection.cs b/ImperatorToCK3/CK3/Cultures/CultureCollection.cs index cb3443017..46c01370b 100644 --- a/ImperatorToCK3/CK3/Cultures/CultureCollection.cs +++ b/ImperatorToCK3/CK3/Cultures/CultureCollection.cs @@ -215,11 +215,11 @@ public void LoadInnovationIds(ModFilesystem ck3ModFS) { return cultureMapper.Match(irCulture, ck3ProvinceId, irProvinceId, country.HistoricalTag); } - public void ImportTechnology(CountryCollection countries, CultureMapper cultureMapper, ProvinceMapper provinceMapper, InventionsDB inventionsDB, LocDB irLocDB) { // TODO: add tests for this + public void ImportTechnology(CountryCollection countries, CultureMapper cultureMapper, ProvinceMapper provinceMapper, InventionsDB inventionsDB, LocDB irLocDB, OrderedDictionary ck3ModFlags) { // TODO: add tests for this Logger.Info("Converting Imperator inventions to CK3 innovations..."); var innovationMapper = new InnovationMapper(); - innovationMapper.LoadLinksAndBonuses("configurables/inventions_to_innovations_map.txt"); + innovationMapper.LoadLinksAndBonuses("configurables/inventions_to_innovations_map.liquid", ck3ModFlags); innovationMapper.LogUnmappedInventions(inventionsDB, irLocDB); innovationMapper.RemoveMappingsWithInvalidInnovations(InnovationIds); diff --git a/ImperatorToCK3/CK3/Provinces/ProvinceCollection.cs b/ImperatorToCK3/CK3/Provinces/ProvinceCollection.cs index 80e6a3215..18c8ef4a8 100644 --- a/ImperatorToCK3/CK3/Provinces/ProvinceCollection.cs +++ b/ImperatorToCK3/CK3/Provinces/ProvinceCollection.cs @@ -1,6 +1,8 @@ using commonItems; using commonItems.Collections; using commonItems.Mods; +using ImperatorToCK3.CK3.Cultures; +using ImperatorToCK3.CK3.Religions; using ImperatorToCK3.CK3.Titles; using ImperatorToCK3.CommonUtils.Map; using ImperatorToCK3.Exceptions; @@ -9,8 +11,6 @@ using ImperatorToCK3.Mappers.Religion; using Microsoft.VisualBasic.FileIO; using System.Collections.Generic; -using System.Globalization; -using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -72,7 +72,7 @@ private void LoadProvincesHistory(ModFilesystem ck3ModFs) { parser.ParseGameFolder("history/provinces", ck3ModFs, "txt", recursive: true); } - public void ImportVanillaProvinces(ModFilesystem ck3ModFs) { + public void ImportVanillaProvinces(ModFilesystem ck3ModFs, ReligionCollection religions, CultureCollection cultures) { var existingProvinceDefinitionsCount = Count; Logger.Info("Importing vanilla provinces..."); @@ -83,6 +83,23 @@ public void ImportVanillaProvinces(ModFilesystem ck3ModFs) { LoadProvincesHistory(ck3ModFs); Logger.IncrementProgress(); + // Cleanup: remove invalid faith and culture entries from province history + var validFaithIds = religions.Faiths.Select(f => f.Id).ToHashSet(); + var validCultureIds = cultures.Select(c => c.Id).ToHashSet(); + foreach (var province in this) { + var faithField = province.History.Fields["faith"]; + int removedCount = faithField.RemoveAllEntries(value => !validFaithIds.Contains(value.ToString()?.RemQuotes() ?? string.Empty)); + if (removedCount > 0) { + Logger.Debug($"Removed {removedCount} invalid faith entries from province {province.Id}."); + } + + var cultureField = province.History.Fields["culture"]; + removedCount = cultureField.RemoveAllEntries(value => !validCultureIds.Contains(value.ToString()?.RemQuotes() ?? string.Empty)); + if (removedCount > 0) { + Logger.Debug($"Removed {removedCount} invalid culture entries from province {province.Id}."); + } + } + // Now load the provinces that don't have unique entries in history/provinces. // They instead use history/province_mapping. foreach (var (newProvinceId, baseProvinceId) in new ProvinceMappings(ck3ModFs)) { diff --git a/ImperatorToCK3/CK3/Religions/Faith.cs b/ImperatorToCK3/CK3/Religions/Faith.cs index 8d769b394..7c792e318 100644 --- a/ImperatorToCK3/CK3/Religions/Faith.cs +++ b/ImperatorToCK3/CK3/Religions/Faith.cs @@ -24,6 +24,13 @@ public Faith(string id, FaithData faithData, Religion religion) { DoctrineIds = faithData.DoctrineIds.ToOrderedSet(); holySiteIds = faithData.HolySiteIds.ToOrderedSet(); attributes = [.. faithData.Attributes]; + + // Fixup for issue found in TFE: add reformed_icon if faith has unreformed_faith_doctrine. + if (DoctrineIds.Contains("unreformed_faith_doctrine") && !attributes.Any(pair => pair.Key == "reformed_icon")) { + // Use the icon attribute. + var icon = attributes.FirstOrDefault(pair => pair.Key == "icon"); + attributes = [.. attributes, new KeyValuePair("reformed_icon", icon.Value)]; + } } private readonly OrderedSet holySiteIds; diff --git a/ImperatorToCK3/CK3/Titles/LandedTitles.cs b/ImperatorToCK3/CK3/Titles/LandedTitles.cs index d32632e89..ecf7b2189 100644 --- a/ImperatorToCK3/CK3/Titles/LandedTitles.cs +++ b/ImperatorToCK3/CK3/Titles/LandedTitles.cs @@ -338,6 +338,15 @@ public void CleanUpHistory(CharacterCollection characters, Date ck3BookmarkDate) } } } + + // Remove undated succession_laws entries; the game doesn't seem to like them. + foreach (var title in this) { + if (!title.History.Fields.TryGetValue("succession_laws", out var successionLawsField)) { + continue; + } + + successionLawsField.InitialEntries.RemoveAll(entry => true); + } } internal void ImportImperatorCountries( diff --git a/ImperatorToCK3/CK3/World.cs b/ImperatorToCK3/CK3/World.cs index 7d21ea6dd..2fdec76cd 100644 --- a/ImperatorToCK3/CK3/World.cs +++ b/ImperatorToCK3/CK3/World.cs @@ -134,15 +134,17 @@ public World(Imperator.World impWorld, Configuration config, Thread? irCoaExtrac () => CK3CoaMapper = new(ModFS) ); + OrderedDictionary ck3ModFlags = config.GetCK3ModFlags(); + Parallel.Invoke( () => { // depends on ck3ColorFactory and CulturalPillars // Load CK3 cultures from CK3 mod filesystem. Logger.Info("Loading cultural pillars..."); - CulturalPillars = new(ck3ColorFactory, config.GetCK3ModFlags()); + CulturalPillars = new(ck3ColorFactory, ck3ModFlags); CulturalPillars.LoadPillars(ModFS); Logger.Info("Loading converter cultural pillars..."); CulturalPillars.LoadConverterPillars("configurables/cultural_pillars"); - Cultures = new CultureCollection(ck3ColorFactory, CulturalPillars, config.GetCK3ModFlags()); + Cultures = new CultureCollection(ck3ColorFactory, CulturalPillars, ck3ModFlags); Cultures.LoadNameLists(ModFS); Cultures.LoadInnovationIds(ModFS); Cultures.LoadCultures(ModFS); @@ -213,7 +215,7 @@ public World(Imperator.World impWorld, Configuration config, Thread? irCoaExtrac var religionMapper = new ReligionMapper(Religions, imperatorRegionMapper, ck3RegionMapper); Parallel.Invoke( - () => Cultures.ImportTechnology(impWorld.Countries, cultureMapper, provinceMapper, impWorld.InventionsDB, impWorld.LocDB), + () => Cultures.ImportTechnology(impWorld.Countries, cultureMapper, provinceMapper, impWorld.InventionsDB, impWorld.LocDB, ck3ModFlags), () => { // depends on religionMapper // Check if all I:R religions have a base mapping. @@ -243,6 +245,9 @@ public World(Imperator.World impWorld, Configuration config, Thread? irCoaExtrac Logger.Warn($"No base mapping found for I:R culture {cultureStr}!"); } } + }, + () => { // depends on TraitMapper and CK3 characters being loaded + Characters.RemoveUndefinedTraits(traitMapper); } ); @@ -308,7 +313,7 @@ public World(Imperator.World impWorld, Configuration config, Thread? irCoaExtrac // Now we can deal with provinces since we know to whom to assign them. We first import vanilla province data. // Some of it will be overwritten, but not all. - Provinces.ImportVanillaProvinces(ModFS); + Provinces.ImportVanillaProvinces(ModFS, Religions, Cultures); // Next we import Imperator provinces and translate them ontop a significant part of all imported provinces. Provinces.ImportImperatorProvinces(impWorld, MapData, LandedTitles, cultureMapper, religionMapper, provinceMapper, CorrectedDate, config); diff --git a/ImperatorToCK3/CommonUtils/IHistoryField.cs b/ImperatorToCK3/CommonUtils/IHistoryField.cs index 9c3a4764a..7b651bad9 100644 --- a/ImperatorToCK3/CommonUtils/IHistoryField.cs +++ b/ImperatorToCK3/CommonUtils/IHistoryField.cs @@ -30,11 +30,14 @@ public void RemoveAllEntries() { /// Removes all entries with values matching the predicate /// /// - public void RemoveAllEntries(Func predicate) { - InitialEntries.RemoveAll(kvp => predicate(kvp.Value)); + public int RemoveAllEntries(Func predicate) { + int removed = 0; + removed += InitialEntries.RemoveAll(kvp => predicate(kvp.Value)); foreach (var datedEntriesBlock in DateToEntriesDict) { - datedEntriesBlock.Value.RemoveAll(kvp => predicate(kvp.Value)); + removed += datedEntriesBlock.Value.RemoveAll(kvp => predicate(kvp.Value)); } + + return removed; } public void RegisterKeywords(Parser parser, Date date); diff --git a/ImperatorToCK3/Data_Files/configurables/culture_map.txt b/ImperatorToCK3/Data_Files/configurables/culture_map.txt index 36da8da65..023572c93 100644 --- a/ImperatorToCK3/Data_Files/configurables/culture_map.txt +++ b/ImperatorToCK3/Data_Files/configurables/culture_map.txt @@ -582,6 +582,9 @@ link = { ck3=butr ir=gyzantian ir=psyllic ir=nasamonian ir=perorsian ir=phazani link = { ck3=numidian ir=capariensian ir=lotophagoi ir=abannaean } ## Persian and Iranian +# TFE +link = { ck3 = median ir = median } +# vanilla CK3 link = { ck3 = persian ir = persian } # https://steamcommunity.com/sharedfiles/filedetails/?id=3098496649 link = { ck3 = daylamite ir = daylamite } # https://steamcommunity.com/sharedfiles/filedetails/?id=3098496649 link = { ck3 = baloch ir = baloch } # https://steamcommunity.com/sharedfiles/filedetails/?id=3098496649 @@ -591,7 +594,7 @@ link = { ck3 = daylamite ir = hyrcanian } link = { ck3 = parthian ir = parthian } link = { ck3 = kurdish - ir = median + ir = median # TODO: add a separate Median culture to the converter instead of mapping to Kurdish ir = cardukoi # added by Invictus https://en.wikipedia.org/wiki/Carduchii, TODO: create a separate CK3 culture for them } link = { ck3 = afghan ir = pactyan ir = sattagydian } diff --git a/ImperatorToCK3/Data_Files/configurables/inventions_to_innovations_map.liquid b/ImperatorToCK3/Data_Files/configurables/inventions_to_innovations_map.liquid new file mode 100644 index 000000000..0a73644ad --- /dev/null +++ b/ImperatorToCK3/Data_Files/configurables/inventions_to_innovations_map.liquid @@ -0,0 +1,270 @@ +### INVENTIONS TO INNOVATIONS MAPPINGS ### + +# bonus = { ir = imperator invention ck3 = ck3 innovation } +# Multiple Inventions can be listed, if they conceptually contribute to the Innovation +# Working assumption: each bonus line should have no more than 3 universal and 1 cultural/regional Invention per Innovation, on the assumption that each Invention might give a 25% bonus towards the Innovation. +# link = { ir = imperator invention ck3 = ck3 innovation } +# Links are one to one. +# Working assumption: only include an Invention here if it's conceptually almost or actually identical to the Innovation (effects don't matter). +# All CK3 Innovations up to 1.12 are listed here, even if they don't make sense for conversion. +# Lines that don't have any suitable Invention should be commented out. + +# Supported CK3 mod flags for conditional blocks: +# tfe (The Fallen Eagle) +# wtwsms (When the World Stopped Making Sense) +# aep (Asia Expansion Project) +# vanilla (Vanilla CK3) + + + +{% if tfe %} # FALLEN EAGLE, credits to cycnusater from the PDX forum + + # TRIBAL ERA + link = { ir = global_defensive_inv_1 ck3 = innovation_motte } + link = { ir = siege_engineers_inv_3 ck3 = innovation_siege_towers } + link = { ir = global_tribesmen_output_inv_1 ck3 = innovation_tribal_duties } + link = { ir = global_freemen_output_inv_1 ck3 = innovation_tribal_duties } + bonus = { ir = global_start_experience_inv_3 ir = global_start_experience_inv_2 ck3 = innovation_barracks } + link = { ir = cohort_reinforcement_speed_inv ck3 = innovation_barracks } + link = { ir = military_tech_investment_inv_1 ck3 = innovation_smithing_tables } + link = { ir = oaths_of_allegiance_inv ck3 =innovation_gavelkind } + link = { ir = global_population_growth_inv_1 ck3 = innovation_crop_rotation } + link = { ir = state_trade_inv_2 ck3 = innovation_merchant_outposts } + link = { ir = global_citizen_output_inv_1 ck3 = innovation_plenary_assemblies } # 3rd Assemblies + link = { ir = global_population_growth_inv_5 ck3 = innovation_development_00 } + link = { ir = global_tax_modifier_inv_1 ck3 = innovation_currency_01 } + link = { ir = military_tech_investment_inv_2 ck3 = innovation_elephantry } + link = { ir = military_tech_investment_inv_2 ck3 = innovation_war_camels } + + # CLASSICAL ANTIQUITY ERA + link = { ir = siege_engineers_inv_4 ck3 = innovation_scorpio } + link = { ir = professional_training_inv ck3 = innovation_war_dogs } + link = { ir = global_unrest_inv_1 ck3 = innovation_tanning_tables } + link = { ir = global_tribesmen_happyness_inv ck3 = innovation_tanning_tables } + bonus = { ir = global_start_experience_inv_1 ir = global_supply_limit_modifier_inv_1 ir = heavy_infantry_discipline_inv ck3 = innovation_mustering_grounds } + link = { ir = global_cohort_recruit_speed_inv ck3 = innovation_mustering_grounds } + link = { ir = global_citizen_output_inv_1 ck3 = innvation_animal_husbandry } + link = { ir = agressive_expansion_impact_inv_3 ck3 = innovation_client_states } + link = { ir = build_cost_inv ck3 = innovation_development_01 } + link = { ir = global_building_slot_inv ck3 = innovation_city_planning } + link = { ir = war_score_cost_inv_1 ck3 = innovation_casus_belli } + link = { ir = global_population_growth_inv_2 ck3 = innovation_heavy_plow } + link = { ir = omen_power_inv_4 ck3 = innovation_imperial_faiths } + + # LATE ANTIQUITY ERA + link = { ir = siege_engineers_inv_4 ck3 = innovation_catapult } + link = { ir =gallic_chainmail_inv ck3 = innovation_quilted_armour } + link = { ir = professional_training_inv ck3 = innovation_quilted_armour } + link = { ir = heavy_cavalry_discipline_inv ck3 = innovation_equestrian_husbandry } + link = { ir = naval_rostra_inv_1 ck3 = innovation_naval_carpentry } + link = { ir = monthly_governor_wage_inv ck3 = innovation_officer_efficiency } + + +{% else %} # BASE GAME + + # TRIBAL ERA - MILITARY + bonus = { ir = fort_maintenance_cost_inv ir = global_defensive_inv_3 ir = global_defensive_inv_1 ck3 = innovation_motte } + link = { ir = siege_speed_inv_3 ck3 = innovation_motte } + bonus = { ir = siege_speed_inv_5 ir = siege_engineers_inv_5 ck3 = innovation_catapult } + link = { ir = siege_engineers_inv_4 ck3 = innovation_catapult } + bonus = { ir = global_start_experience_inv_3 ir = global_start_experience_inv_2 ck3 = innovation_barracks } + link = { ir = cohort_reinforcement_speed_inv ck3 = innovation_barracks } + bonus = { ir = global_start_experience_inv_1 ir = global_supply_limit_modifier_inv_1 ir = heavy_infantry_discipline_inv ck3 = innovation_mustering_grounds } + link = { ir = global_cohort_recruit_speed_inv ck3 = innovation_mustering_grounds } + bonus = { ir = experience_decay_inv_1 ir = general_loyalty_inv ir= tyranny_inv_2 ck3 = innovation_bannus } # 3rd Hierarchy of Responsibility + # link = { ir = ck3 = innovation_bannus } + bonus = { ir = gallic_chainmail_inv ck3 = innovation_quilted_armor } + # link = { ir = ck3 = innovation_quilted_armor } + # TRIBAL ERA - CIVIC + bonus = { ir = global_citizen_output_inv_3 ir = global_freemen_output_inv_3 ir = italic_lex_frumentaria_inv ir = global_tax_modifier_inv_3 ck3 = innovation_development_01 } + link = { ir = ruler_popularity_gain_inv_4 ck3 = innovation_development_01 } # Public Works + bonus = { ir = commerce_inv_1 ir = global_tax_modifier_inv_1 ir = commerce_inv_2 ck3 = innovation_currency_01 } + # link = { ir = ck3 = innovation_currency_01 } + # bonus = { ir = ck3 = innovation_gavelkind } + link = { ir = oaths_of_allegiance_inv ck3 =innovation_gavelkind } # IR is Codified Succession + # bonus = { ir = ck3 = innovation_crop_rotation } + # link = { ir = ck3 = innovation_crop_rotation } + bonus = { ir = italic_insulae_inv ir = italic_lex_frumentaria_inv ck3 = innovation_city_planning } + link = { ir = global_building_slot_inv ck3 = innovation_city_planning } + bonus = { ir = fabricate_claim_cost_modifier_inv ir = agressive_expansion_impact_inv_3 ir = tribute_income_modifier_inv_1 ck3 = innovation_casus_belli } # Third is Tributary Administration + link = { ir = war_score_cost_inv_1 ck3 = innovation_casus_belli } + bonus = { ir = italic_lex_frumentaria_inv ir = global_tribesmen_output_inv_2 ir = global_tribesmen_output_inv_2 ir = global_unrest_inv_5 ck3 = innovation_plenary_assemblies } # 3rd Assemblies + # link = { ir = ck3 = innovation_plenary_assemblies } + bonus = { ir = commerce_inv_5 ir = monthly_wage_inv ir = tribute_income_modifier_inv_3 ck3 = innovation_ledger } + # link = { ir = ck3 = innovation_ledger } + # TRIBAL ERA - REGIONAL + # bonus = { ir = ck3 = innovation_table_of_princes } + # link = { ir = ck3 = innovation_table_of_princes } # culture:czech|slovien + bonus = { ir = blockade_efficiency_inv ir = liburnian_invention_1 ck3 = innovation_longboats } # 1st Experienced Seafarers 2nd Lemboi Scouts (could both fight and row) + # link = { ir = ck3 = innovation_longboats } # region = world_europe_north + # bonus = { ir = ck3 = innovation_elephantry } + # link = { ir = ck3 = innovation_elephantry } # region = world_innovation_elephants + # bonus = { ir = ck3 = innovation_war_camels } + # link = { ir = ck3 = innovation_war_camels } # region = world_innovation_camels + bonus = { ir = buy_military_tradition_inv ck3 = innovation_wootz_steel } + link = { ir = indian_wootz_steel_inv ck3 = innovation_wootz_steel } # world_india_deccan + # bonus = { ir = ck3 = innovation_african_canoes } + # link = { ir = ck3 = innovation_african_canoes } # world_africa_west + # TRIBAL ERA - MEN-AT-ARMS + # bonus = { ir = ck3 = innovation_caballeros } + # link = { ir = ck3 = innovation_caballeros } # region = world_europe_west_iberia + # bonus = { ir = ck3 = innovation_bamboo_bows } + # link = { ir = ck3 = innovation_bamboo_bows } # region = world_india + # bonus = { ir = ck3 = innovation_sahel_horsemen } + # link = { ir = ck3 = innovation_sahel_horsemen } # region = custom_sahel_proper + # bonus = { ir = ck3 = innovation_repeating_crossbow } + # link = { ir = ck3 = innovation_repeating_crossbow } # has_cultural_pillar = heritage_chinese + # bonus = { ir = ck3 = innovation_pole_vault } + # link = { ir = ck3 = innovation_pole_vault } # culture:guanches OR PARENT CULTURE + # TRIBAL ERA - NORTHERN LORDS - has_fp1_dlc_trigger = yes + bonus = { ir = assemble_raiding_inv ck3 = innovation_varangian_adventurers } # 1st Experienced Raiders (Tribal only) + # link = { ir = ck3 = innovation_varangian_adventurers } # ( has_cultural_pillar = heritage_north_germanic OR Norman culture OR Estonian culture ) BUT NOT EARLY MEDIEVAL OR LATER + bonus = { ir = agressive_expansion_monthly_decay_inv_1 ck3 = innovation_all_things } + # link = { ir = ck3 = innovation_all_things } # region = world_europe_north + + # EARLY MEDIEVAL ERA - MILITARY + # bonus = { ir = ck3 = innovation_battlements } + # link = { ir = ck3 = innovation_battlements } + bonus = { ir = siege_speed_inv_1 ck3 = innovation_mangonel } + link = { ir = siege_engineers_inv_6 ck3 = innovation_mangonel } + bonus = { ir = gallic_oppidum_inv ir = siege_speed_inv_4 ir = civic_tech_investment_inv_1 ck3 = innovation_burhs } + # link = { ir = ck3 = innovation_burhs } + bonus = { ir = global_start_experience_inv_4 ck3 = innovation_house_soldiers } + # link = { ir = ck3 = innovation_house_soldiers } + # bonus = { ir = ck3 = innovation_horseshoes } + # link = { ir = ck3 = innovation_horseshoes } + bonus = { ir = gallic_four_horned_saddle_inv ir = heavy_cavalry_discipline_inv ck3 = innovation_arched_saddle } + # link = { ir = ck3 = innovation_arched_saddle } + # EARLY MEDIEVAL ERA - CIVIC + bonus = { ir = monthly_character_loyalty_inv_2 ir = dictatorship_step_3 ir = dictatorship_step_4 ck3 = innovation_hereditary_rule } # 1st Approved Familia 2nd and 3rd are Demand/Request a Line of Succession which are alternatives for Dictatorship + # link = { ir = ck3 = innovation_hereditary_rule } # UNLOCKS PARTITION + bonus = { ir = global_goods_from_slaves_inv ck3 = innovation_manorialism } + link = { ir = global_settlement_building_slot_inv ck3 = innovation_manorialism } + bonus = { ir = smear_character_cost_modifier_inv ck3 = innovation_development_02 } # 1st Town Criers + # link = { ir = ck3 = innovation_development_02 } # Communal Government + bonus = { ir = hold_triumph_cost_modifier_inv ck3 = innovation_currency_02 } + link = { ir = coins_inv ck3 = innovation_currency_02 } # Coinage + link = { ir = brass_coinage_inv ck3 = innovation_currency_02 } # Coinage + bonus = { ir = loyalty_gain_chance_modifier_inv ir = agressive_expansion_monthly_decay_inv_4 ck3 = innovation_royal_prerogative } + # link = { ir = ck3 = innovation_royal_prerogative } + bonus = { ir = land_won_by_the_spear ir = religious_tech_investment_inv_1 ck3 = innovation_chronicle_writing } # 2nd Recording Tradition + # link = { ir = ck3 = innovation_chronicle_writing } + bonus = { ir = indian_trigonometric_functions_inv ck3 = innovation_armilary_sphere } + # link = { ir = ck3 = innovation_armilary_sphere } + bonus = { ir = tyranny_inv_1 ir = religious_tech_investment_inv_2 ck3 = innovation_baliffs } # 1st Official Orators 2nd Scribae + # link = { ir = ck3 = innovation_baliffs } # (sic) bailiffs + # EARLY MEDIEVAL ERA - REGIONAL + # bonus = { ir = ck3 = innovation_reconquista } + # link = { ir = ck3 = innovation_reconquista } # region = world_europe_west_iberia + # bonus = { ir = ck3 = innovation_stem_duchies } + # link = { ir = ck3 = innovation_stem_duchies } # region = custom_europe_western_germany + # bonus = { ir = ck3 = innovation_ghilman } + # link = { ir = ck3 = innovation_ghilman } # region = world_middle_east_arabia + # link = { ir = ck3 = fp3_innovation_mural_sextant } REQUIRES DLC AND COURT SCHOLAR + + + # HIGH MEDIEVAL ERA - MILITARY + # bonus = { ir = ck3 = innovation_hoardings } + # link = { ir = ck3 = innovation_hoardings } + # bonus = { ir = ck3 = innovation_trebuchet } + # link = { ir = ck3 = innovation_trebuchet } + # bonus = { ir = ck3 = innovation_castle_baileys } + # link = { ir = ck3 = innovation_castle_baileys } + # bonus = { ir = ck3 = innovation_men_at_arms } + # link = { ir = ck3 = innovation_men_at_arms } + # bonus = { ir = ck3 = innovation_knighthood } + # link = { ir = ck3 = innovation_knighthood } + # bonus = { ir = ck3 = innovation_advanced_bowmaking } + # link = { ir = ck3 = innovation_advanced_bowmaking } + # HIGH MEDIEVAL ERA - CIVIC + # bonus = { ir = ck3 = innovation_heraldry } + # link = { ir = ck3 = innovation_heraldry } + # bonus = { ir = ck3 = innovation_windmills } + # link = { ir = ck3 = innovation_windmills } + bonus = { ir = agressive_expansion_impact_inv_5 ck3 = innovation_divine_right } # 1st Divine Mandate + # link = { ir = ck3 = innovation_divine_right } + # bonus = { ir = ck3 = innovation_land_grants } + # link = { ir = ck3 = innovation_land_grants } + # bonus = { ir = ck3 = innovation_scutage } + # link = { ir = ck3 = innovation_scutage } + # bonus = { ir = ck3 = innovation_guilds } + # link = { ir = ck3 = innovation_guilds } + # bonus = { ir = ck3 = innovation_development_03 } + # link = { ir = ck3 = innovation_development_03 } # Urbanization + # bonus = { ir = ck3 = innovation_currency_03 } + # link = { ir = ck3 = innovation_currency_03 } # Banking + # HIGH MEDIEVAL ERA - REGIONAL + # bonus = { ir = ck3 = innovation_east_settling } + # link = { ir = ck3 = innovation_east_settling } # region = custom_europe_eastern_germany + # bonus = { ir = ck3 = innovation_seigneurialism } + # link = { ir = ck3 = innovation_seigneurialism } # region = world_europe_west_francia + # bonus = { ir = ck3 = innovation_muladi } + # link = { ir = ck3 = innovation_muladi } # region = world_africa_north + bonus = { ir = subject_opinions_inv_3 ck3 = innovation_french_peerage } + # link = { ir = ck3 = innovation_french_peerage } # region = world_europe_west_francia AND UNLOCKED BY DECISION + # bonus = { ir = ck3 = innovation_sanitation } + # link = { ir = ck3 = innovation_sanitation } # has_cultural_pillar = heritage_byzantine OR has_cultural_pillar = heritage_arabic IN LEGENDS OF THE DEAD FILE BUT NOT ACTUALLY DLC-LOCKED?? + # HIGH MEDIEVAL ERA - MEN-AT-ARMS + # bonus = { ir = ck3 = innovation_desert_tactics } + # link = { ir = ck3 = innovation_desert_tactics } # has_innovation = innovation_desert_tactics CIRCULAR POTENTIAL + # bonus = { ir = ck3 = innovation_hobbies } + # link = { ir = ck3 = innovation_hobbies } # region = ghw_region_britannia + # bonus = { ir = ck3 = innovation_sarawit } + # link = { ir = ck3 = innovation_sarawit } # has_cultural_parameter = unlock_sarawit_innovation + + # LATE MEDIEVAL ERA - MILITARY + # bonus = { ir = ck3 = innovation_machicolations } + # link = { ir = ck3 = innovation_machicolations } + # bonus = { ir = ck3 = innovation_bombard } + # link = { ir = ck3 = innovation_bombard } + # bonus = { ir = ck3 = innovation_royal_armory } + # link = { ir = ck3 = innovation_royal_armory } + # bonus = { ir = ck3 = innovation_standing_armies } + # link = { ir = ck3 = innovation_standing_armies } + # bonus = { ir = ck3 = innovation_sappers } + # link = { ir = ck3 = innovation_sappers } + # bonus = { ir = ck3 = innovation_plate_armor } + # link = { ir = ck3 = innovation_plate_armor } + # LATE MEDIEVAL ERA - CIVIC + # bonus = { ir = ck3 = innovation_primogeniture } + # link = { ir = ck3 = innovation_primogeniture } + bonus = { ir = global_defensive_inv_5 ck3 = innovation_cranes } + # link = { ir = ck3 = innovation_cranes } + # bonus = { ir = ck3 = innovation_noblesse_oblige } + # link = { ir = ck3 = innovation_noblesse_oblige } + # bonus = { ir = ck3 = innovation_rightful_ownership } + # link = { ir = ck3 = innovation_rightful_ownership } + # bonus = { ir = ck3 = innovation_ermine_cloaks } + # link = { ir = ck3 = innovation_ermine_cloaks } + # bonus = { ir = ck3 = innovation_court_officials } + # link = { ir = ck3 = innovation_court_officials } + # bonus = { ir = ck3 = innovation_development_04 } + # link = { ir = ck3 = innovation_development_04 } # Renaissance Thought + # bonus = { ir = ck3 = innovation_currency_04 } + # link = { ir = ck3 = innovation_currency_04 } # Promissory Notes + # LATE MEDIEVAL ERA - REGIONAL + # bonus = { ir = ck3 = innovation_wierdijks } + # link = { ir = ck3 = innovation_wierdijks } # region = custom_netherlands + # bonus = { ir = ck3 = innovation_condottieri } + # link = { ir = ck3 = innovation_condottieri } # region = world_europe_south_italy + # bonus = { ir = ck3 = innovation_deccan_unity } + # link = { ir = ck3 = innovation_deccan_unity } # region = world_india_deccan + # LATE MEDIEVAL ERA - REGIONAL + bonus = { ir = indian_tube_drawn_technology_inv ir = global_citizen_happyness_inv ck3 = fp3_innovation_fritware } # 2nd Glass Blowing + # link = { ir = ck3 = fp3_innovation_fritware } REQUIRES DLC AND COURT SCHOLAR + # LATE MEDIEVAL ERA - MEN-AT-ARMS + # bonus = { ir = ck3 = innovation_zweihanders } + # link = { ir = ck3 = innovation_zweihanders } # region = ghw_region_germany && has_cultural_pillar = heritage_central_germanic + # bonus = { ir = ck3 = innovation_adaptive_militia } + # link = { ir = ck3 = innovation_adaptive_militia } # has_cultural_parameter = unlock_adaptive_militia_innovation + # bonus = { ir = ck3 = innovation_valets } + # link = { ir = ck3 = innovation_valets } # has_cultural_parameter = unlock_valets_innovation + # bonus = { ir = ck3 = innovation_pike_columns } + # link = { ir = ck3 = innovation_pike_columns } # has_cultural_parameter = unlock_innovation_pike_columns + bonus = { ir = discipline_inv_5 ir = discipline_inv_2 ir = military_tech_investment_inv_2 ck3 = innovation_legionnaires } # 1st Cohorts 2nd Manipular Legion 3rd Praefactus Fabrum + # link = { ir = ck3 = innovation_legionnaires } # culture:roman + # bonus = { ir = ck3 = innovation_rectilinear_schiltron } + # link = { ir = ck3 = innovation_rectilinear_schiltron } # has_cultural_parameter = unlock_schiltron_innovation + +{% endif %} + diff --git a/ImperatorToCK3/Data_Files/configurables/inventions_to_innovations_map.txt b/ImperatorToCK3/Data_Files/configurables/inventions_to_innovations_map.txt deleted file mode 100644 index 056f9b6b3..000000000 --- a/ImperatorToCK3/Data_Files/configurables/inventions_to_innovations_map.txt +++ /dev/null @@ -1,214 +0,0 @@ -### INVENTIONS TO INNOVATIONS MAPPINGS ### - -# bonus = { ir = imperator invention ck3 = ck3 innovation } -# Multiple Inventions can be listed, if they conceptually contribute to the Innovation -# Working assumption: each bonus line should have no more than 3 universal and 1 cultural/regional Invention per Innovation, on the assumption that each Invention might give a 25% bonus towards the Innovation. -# link = { ir = imperator invention ck3 = ck3 innovation } -# Links are one to one. -# Working assumption: only include an Invention here if it's conceptually almost or actually identical to the Innovation (effects don't matter). -# All CK3 Innovations up to 1.12 are listed here, even if they don't make sense for conversion. -# Lines that don't have any suitable Invention should be commented out - -# TRIBAL ERA - MILITARY -bonus = { ir = fort_maintenance_cost_inv ir = global_defensive_inv_3 ir = global_defensive_inv_1 ck3 = innovation_motte } -link = { ir = siege_speed_inv_3 ck3 = innovation_motte } -bonus = { ir = siege_speed_inv_5 ir = siege_engineers_inv_5 ck3 = innovation_catapult } -link = { ir = siege_engineers_inv_4 ck3 = innovation_catapult } -bonus = { ir = global_start_experience_inv_3 ir = global_start_experience_inv_2 ck3 = innovation_barracks } -link = { ir = cohort_reinforcement_speed_inv ck3 = innovation_barracks } -bonus = { ir = global_start_experience_inv_1 ir = global_supply_limit_modifier_inv_1 ir = heavy_infantry_discipline_inv ck3 = innovation_mustering_grounds } -link = { ir = global_cohort_recruit_speed_inv ck3 = innovation_mustering_grounds } -bonus = { ir = experience_decay_inv_1 ir = general_loyalty_inv ir= tyranny_inv_2 ck3 = innovation_bannus } # 3rd Hierarchy of Responsibility -# link = { ir = ck3 = innovation_bannus } -bonus = { ir = gallic_chainmail_inv ck3 = innovation_quilted_armor } -# link = { ir = ck3 = innovation_quilted_armor } -# TRIBAL ERA - CIVIC -bonus = { ir = global_citizen_output_inv_3 ir = global_freemen_output_inv_3 ir = italic_lex_frumentaria_inv ir = global_tax_modifier_inv_3 ck3 = innovation_development_01 } -link = { ir = ruler_popularity_gain_inv_4 ck3 = innovation_development_01 } # Public Works -bonus = { ir = commerce_inv_1 ir = global_tax_modifier_inv_1 ir = commerce_inv_2 ck3 = innovation_currency_01 } -# link = { ir = ck3 = innovation_currency_01 } -# bonus = { ir = ck3 = innovation_gavelkind } -link = { ir = oaths_of_allegiance_inv ck3 =innovation_gavelkind } # IR is Codified Succession -# bonus = { ir = ck3 = innovation_crop_rotation } -# link = { ir = ck3 = innovation_crop_rotation } -bonus = { ir = italic_insulae_inv ir = italic_lex_frumentaria_inv ck3 = innovation_city_planning } -link = { ir = global_building_slot_inv ck3 = innovation_city_planning } -bonus = { ir = fabricate_claim_cost_modifier_inv ir = agressive_expansion_impact_inv_3 ir = tribute_income_modifier_inv_1 ck3 = innovation_casus_belli } # Third is Tributary Administration -link = { ir = war_score_cost_inv_1 ck3 = innovation_casus_belli } -bonus = { ir = italic_lex_frumentaria_inv ir = global_tribesmen_output_inv_2 ir = global_tribesmen_output_inv_2 ir = global_unrest_inv_5 ck3 = innovation_plenary_assemblies } # 3rd Assemblies -# link = { ir = ck3 = innovation_plenary_assemblies } -bonus = { ir = commerce_inv_5 ir = monthly_wage_inv ir = tribute_income_modifier_inv_3 ck3 = innovation_ledger } -# link = { ir = ck3 = innovation_ledger } -# TRIBAL ERA - REGIONAL -# bonus = { ir = ck3 = innovation_table_of_princes } -# link = { ir = ck3 = innovation_table_of_princes } # culture:czech|slovien -bonus = { ir = blockade_efficiency_inv ir = liburnian_invention_1 ck3 = innovation_longboats } # 1st Experienced Seafarers 2nd Lemboi Scouts (could both fight and row) -# link = { ir = ck3 = innovation_longboats } # region = world_europe_north -# bonus = { ir = ck3 = innovation_elephantry } -# link = { ir = ck3 = innovation_elephantry } # region = world_innovation_elephants -# bonus = { ir = ck3 = innovation_war_camels } -# link = { ir = ck3 = innovation_war_camels } # region = world_innovation_camels -bonus = { ir = buy_military_tradition_inv ck3 = innovation_wootz_steel } -link = { ir = indian_wootz_steel_inv ck3 = innovation_wootz_steel } # world_india_deccan -# bonus = { ir = ck3 = innovation_african_canoes } -# link = { ir = ck3 = innovation_african_canoes } # world_africa_west -# TRIBAL ERA - MEN-AT-ARMS -# bonus = { ir = ck3 = innovation_caballeros } -# link = { ir = ck3 = innovation_caballeros } # region = world_europe_west_iberia -# bonus = { ir = ck3 = innovation_bamboo_bows } -# link = { ir = ck3 = innovation_bamboo_bows } # region = world_india -# bonus = { ir = ck3 = innovation_sahel_horsemen } -# link = { ir = ck3 = innovation_sahel_horsemen } # region = custom_sahel_proper -# bonus = { ir = ck3 = innovation_repeating_crossbow } -# link = { ir = ck3 = innovation_repeating_crossbow } # has_cultural_pillar = heritage_chinese -# bonus = { ir = ck3 = innovation_pole_vault } -# link = { ir = ck3 = innovation_pole_vault } # culture:guanches OR PARENT CULTURE -# TRIBAL ERA - NORTHERN LORDS - has_fp1_dlc_trigger = yes -bonus = { ir = assemble_raiding_inv ck3 = innovation_varangian_adventurers } # 1st Experienced Raiders (Tribal only) -# link = { ir = ck3 = innovation_varangian_adventurers } # ( has_cultural_pillar = heritage_north_germanic OR Norman culture OR Estonian culture ) BUT NOT EARLY MEDIEVAL OR LATER -bonus = { ir = agressive_expansion_monthly_decay_inv_1 ck3 = innovation_all_things } -# link = { ir = ck3 = innovation_all_things } # region = world_europe_north - -# EARLY MEDIEVAL ERA - MILITARY -# bonus = { ir = ck3 = innovation_battlements } -# link = { ir = ck3 = innovation_battlements } -bonus = { ir = siege_speed_inv_1 ck3 = innovation_mangonel } -link = { ir = siege_engineers_inv_6 ck3 = innovation_mangonel } -bonus = { ir = gallic_oppidum_inv ir = siege_speed_inv_4 ir = civic_tech_investment_inv_1 ck3 = innovation_burhs } -# link = { ir = ck3 = innovation_burhs } -bonus = { ir = global_start_experience_inv_4 ck3 = innovation_house_soldiers } -# link = { ir = ck3 = innovation_house_soldiers } -# bonus = { ir = ck3 = innovation_horseshoes } -# link = { ir = ck3 = innovation_horseshoes } -bonus = { ir = gallic_four_horned_saddle_inv ir = heavy_cavalry_discipline_inv ck3 = innovation_arched_saddle } -# link = { ir = ck3 = innovation_arched_saddle } -# EARLY MEDIEVAL ERA - CIVIC -bonus = { ir = monthly_character_loyalty_inv_2 ir = dictatorship_step_3 ir = dictatorship_step_4 ck3 = innovation_hereditary_rule } # 1st Approved Familia 2nd and 3rd are Demand/Request a Line of Succession which are alternatives for Dictatorship -# link = { ir = ck3 = innovation_hereditary_rule } # UNLOCKS PARTITION -bonus = { ir = global_goods_from_slaves_inv ck3 = innovation_manorialism } -link = { ir = global_settlement_building_slot_inv ck3 = innovation_manorialism } -bonus = { ir = smear_character_cost_modifier_inv ck3 = innovation_development_02 } # 1st Town Criers -# link = { ir = ck3 = innovation_development_02 } # Communal Government -bonus = { ir = hold_triumph_cost_modifier_inv ck3 = innovation_currency_02 } -link = { ir = coins_inv ck3 = innovation_currency_02 } # Coinage -link = { ir = brass_coinage_inv ck3 = innovation_currency_02 } # Coinage -bonus = { ir = loyalty_gain_chance_modifier_inv ir = agressive_expansion_monthly_decay_inv_4 ck3 = innovation_royal_prerogative } -# link = { ir = ck3 = innovation_royal_prerogative } -bonus = { ir = land_won_by_the_spear ir = religious_tech_investment_inv_1 ck3 = innovation_chronicle_writing } # 2nd Recording Tradition -# link = { ir = ck3 = innovation_chronicle_writing } -bonus = { ir = indian_trigonometric_functions_inv ck3 = innovation_armilary_sphere } -# link = { ir = ck3 = innovation_armilary_sphere } -bonus = { ir = tyranny_inv_1 ir = religious_tech_investment_inv_2 ck3 = innovation_baliffs } # 1st Official Orators 2nd Scribae -# link = { ir = ck3 = innovation_baliffs } # (sic) bailiffs -# EARLY MEDIEVAL ERA - REGIONAL -# bonus = { ir = ck3 = innovation_reconquista } -# link = { ir = ck3 = innovation_reconquista } # region = world_europe_west_iberia -# bonus = { ir = ck3 = innovation_stem_duchies } -# link = { ir = ck3 = innovation_stem_duchies } # region = custom_europe_western_germany -# bonus = { ir = ck3 = innovation_ghilman } -# link = { ir = ck3 = innovation_ghilman } # region = world_middle_east_arabia -# link = { ir = ck3 = fp3_innovation_mural_sextant } REQUIRES DLC AND COURT SCHOLAR - - -# HIGH MEDIEVAL ERA - MILITARY -# bonus = { ir = ck3 = innovation_hoardings } -# link = { ir = ck3 = innovation_hoardings } -# bonus = { ir = ck3 = innovation_trebuchet } -# link = { ir = ck3 = innovation_trebuchet } -# bonus = { ir = ck3 = innovation_castle_baileys } -# link = { ir = ck3 = innovation_castle_baileys } -# bonus = { ir = ck3 = innovation_men_at_arms } -# link = { ir = ck3 = innovation_men_at_arms } -# bonus = { ir = ck3 = innovation_knighthood } -# link = { ir = ck3 = innovation_knighthood } -# bonus = { ir = ck3 = innovation_advanced_bowmaking } -# link = { ir = ck3 = innovation_advanced_bowmaking } -# HIGH MEDIEVAL ERA - CIVIC -# bonus = { ir = ck3 = innovation_heraldry } -# link = { ir = ck3 = innovation_heraldry } -# bonus = { ir = ck3 = innovation_windmills } -# link = { ir = ck3 = innovation_windmills } -bonus = { ir = agressive_expansion_impact_inv_5 ck3 = innovation_divine_right } # 1st Divine Mandate -# link = { ir = ck3 = innovation_divine_right } -# bonus = { ir = ck3 = innovation_land_grants } -# link = { ir = ck3 = innovation_land_grants } -# bonus = { ir = ck3 = innovation_scutage } -# link = { ir = ck3 = innovation_scutage } -# bonus = { ir = ck3 = innovation_guilds } -# link = { ir = ck3 = innovation_guilds } -# bonus = { ir = ck3 = innovation_development_03 } -# link = { ir = ck3 = innovation_development_03 } # Urbanization -# bonus = { ir = ck3 = innovation_currency_03 } -# link = { ir = ck3 = innovation_currency_03 } # Banking -# HIGH MEDIEVAL ERA - REGIONAL -# bonus = { ir = ck3 = innovation_east_settling } -# link = { ir = ck3 = innovation_east_settling } # region = custom_europe_eastern_germany -# bonus = { ir = ck3 = innovation_seigneurialism } -# link = { ir = ck3 = innovation_seigneurialism } # region = world_europe_west_francia -# bonus = { ir = ck3 = innovation_muladi } -# link = { ir = ck3 = innovation_muladi } # region = world_africa_north -bonus = { ir = subject_opinions_inv_3 ck3 = innovation_french_peerage } -# link = { ir = ck3 = innovation_french_peerage } # region = world_europe_west_francia AND UNLOCKED BY DECISION -# bonus = { ir = ck3 = innovation_sanitation } -# link = { ir = ck3 = innovation_sanitation } # has_cultural_pillar = heritage_byzantine OR has_cultural_pillar = heritage_arabic IN LEGENDS OF THE DEAD FILE BUT NOT ACTUALLY DLC-LOCKED?? -# HIGH MEDIEVAL ERA - MEN-AT-ARMS -# bonus = { ir = ck3 = innovation_desert_tactics } -# link = { ir = ck3 = innovation_desert_tactics } # has_innovation = innovation_desert_tactics CIRCULAR POTENTIAL -# bonus = { ir = ck3 = innovation_hobbies } -# link = { ir = ck3 = innovation_hobbies } # region = ghw_region_britannia -# bonus = { ir = ck3 = innovation_sarawit } -# link = { ir = ck3 = innovation_sarawit } # has_cultural_parameter = unlock_sarawit_innovation - -# LATE MEDIEVAL ERA - MILITARY -# bonus = { ir = ck3 = innovation_machicolations } -# link = { ir = ck3 = innovation_machicolations } -# bonus = { ir = ck3 = innovation_bombard } -# link = { ir = ck3 = innovation_bombard } -# bonus = { ir = ck3 = innovation_royal_armory } -# link = { ir = ck3 = innovation_royal_armory } -# bonus = { ir = ck3 = innovation_standing_armies } -# link = { ir = ck3 = innovation_standing_armies } -# bonus = { ir = ck3 = innovation_sappers } -# link = { ir = ck3 = innovation_sappers } -# bonus = { ir = ck3 = innovation_plate_armor } -# link = { ir = ck3 = innovation_plate_armor } -# LATE MEDIEVAL ERA - CIVIC -# bonus = { ir = ck3 = innovation_primogeniture } -# link = { ir = ck3 = innovation_primogeniture } -bonus = { ir = global_defensive_inv_5 ck3 = innovation_cranes } -# link = { ir = ck3 = innovation_cranes } -# bonus = { ir = ck3 = innovation_noblesse_oblige } -# link = { ir = ck3 = innovation_noblesse_oblige } -# bonus = { ir = ck3 = innovation_rightful_ownership } -# link = { ir = ck3 = innovation_rightful_ownership } -# bonus = { ir = ck3 = innovation_ermine_cloaks } -# link = { ir = ck3 = innovation_ermine_cloaks } -# bonus = { ir = ck3 = innovation_court_officials } -# link = { ir = ck3 = innovation_court_officials } -# bonus = { ir = ck3 = innovation_development_04 } -# link = { ir = ck3 = innovation_development_04 } # Renaissance Thought -# bonus = { ir = ck3 = innovation_currency_04 } -# link = { ir = ck3 = innovation_currency_04 } # Promissory Notes -# LATE MEDIEVAL ERA - REGIONAL -# bonus = { ir = ck3 = innovation_wierdijks } -# link = { ir = ck3 = innovation_wierdijks } # region = custom_netherlands -# bonus = { ir = ck3 = innovation_condottieri } -# link = { ir = ck3 = innovation_condottieri } # region = world_europe_south_italy -# bonus = { ir = ck3 = innovation_deccan_unity } -# link = { ir = ck3 = innovation_deccan_unity } # region = world_india_deccan -# LATE MEDIEVAL ERA - REGIONAL -bonus = { ir = indian_tube_drawn_technology_inv ir = global_citizen_happyness_inv ck3 = fp3_innovation_fritware } # 2nd Glass Blowing -# link = { ir = ck3 = fp3_innovation_fritware } REQUIRES DLC AND COURT SCHOLAR -# LATE MEDIEVAL ERA - MEN-AT-ARMS -# bonus = { ir = ck3 = innovation_zweihanders } -# link = { ir = ck3 = innovation_zweihanders } # region = ghw_region_germany && has_cultural_pillar = heritage_central_germanic -# bonus = { ir = ck3 = innovation_adaptive_militia } -# link = { ir = ck3 = innovation_adaptive_militia } # has_cultural_parameter = unlock_adaptive_militia_innovation -# bonus = { ir = ck3 = innovation_valets } -# link = { ir = ck3 = innovation_valets } # has_cultural_parameter = unlock_valets_innovation -# bonus = { ir = ck3 = innovation_pike_columns } -# link = { ir = ck3 = innovation_pike_columns } # has_cultural_parameter = unlock_innovation_pike_columns -bonus = { ir = discipline_inv_5 ir = discipline_inv_2 ir = military_tech_investment_inv_2 ck3 = innovation_legionnaires } # 1st Cohorts 2nd Manipular Legion 3rd Praefactus Fabrum -# link = { ir = ck3 = innovation_legionnaires } # culture:roman -# bonus = { ir = ck3 = innovation_rectilinear_schiltron } -# link = { ir = ck3 = innovation_rectilinear_schiltron } # has_cultural_parameter = unlock_schiltron_innovation diff --git a/ImperatorToCK3/Data_Files/configurables/religion_map.txt b/ImperatorToCK3/Data_Files/configurables/religion_map.txt index c788ae4ea..4d1181c1b 100644 --- a/ImperatorToCK3/Data_Files/configurables/religion_map.txt +++ b/ImperatorToCK3/Data_Files/configurables/religion_map.txt @@ -59,6 +59,16 @@ link = { ck3=pagan ir=nuragic_pantheon } # TODO: https://github.com/ParadoxGameC link = { ck3 = pagan ir = pagan } link = { ck3 = kushitism_pagan ir = kushite } +# Iranian Mithraism (mithra_religion in Invictus) +# https://en.wikipedia.org/wiki/Mithra +# TFE +link = { ck3 = kitebacilweism ir = mithra_religion } +# vanilla CK3 +link = { # TODO: Change this mapping for non-TFE conversions. The Zoroastrian cult of Mithra is not the same as the Roman Mithraic Mysteries. + ck3 = mithraic_mysteries + ir = mithra_religion +} + # Arabic link = { ck3 = aksumite_pagan ir = arabian_pantheon irRegion = punt_region } # TFE link = { # TFE @@ -75,10 +85,6 @@ link = { ck3 = arabic_pagan ir = arabian_pantheon } # Hellenic - TFE link = { ck3 = roman_pagan ir = italic_pantheon } # Hellenic - Vanilla CK3 -link = { # TODO: Change this mapping. The Zoroastrian cult of Mithra is not the same as the Roman Mithraic Mysteries. - ck3 = mithraic_mysteries - ir = mithra_religion # from Invictus -} link = { ck3 = eleusinian_mysteries ir = roman_pantheon irRegion = thrace_region } # https://en.wikipedia.org/wiki/Eleusinian_Mysteries link = { ck3 = celto_hellenic_syncretism diff --git a/ImperatorToCK3/Data_Files/configurables/removable_file_blocks_tfe.txt b/ImperatorToCK3/Data_Files/configurables/removable_file_blocks_tfe.txt index 797d2e48a..59dfbe02f 100644 --- a/ImperatorToCK3/Data_Files/configurables/removable_file_blocks_tfe.txt +++ b/ImperatorToCK3/Data_Files/configurables/removable_file_blocks_tfe.txt @@ -53,6 +53,41 @@ # Other { #### Starting events stuff + if = { + limit = { + game_start_date = 361.11.17 + } + character:145237 = { + add_character_flag = { + flag = immune_to_disease + years = 5 + } + } + character:145232 = { + add_character_flag = { + flag = immune_to_disease + years = 5 + } + } + character:145231 = { + add_character_flag = { + flag = immune_to_disease + years = 5 + } + } + } + if = { + limit = { + game_start_date = 361.11.17 + title:e_roman_empire.holder = character:145237 + } + character:145237 = { + trigger_event = { + id = western_roman.0081 + days = 2 + } + } + } if = { limit = { game_start_date = 395.1.17 @@ -1592,6 +1627,9 @@ title:e_byzantium.holder ?= { add_gold = 1000 } + character:200290 = { + remove_claim = title:d_muntenia + } character:balamer_01 ?= { add_prestige = 3000 spawn_army = { @@ -2233,6 +2271,33 @@ } } +"common/on_action/east_asia_flavor_on_actions.txt" = { + { +on_game_start = { + on_actions = { + on_TFE_east_asia_start + } +} + +on_TFE_east_asia_start = { + effect = { + character:western_liang_043 ?= { + if = { + limit = { + is_alive = yes + is_landed = yes + } + trigger_event = { + id = liang.0012 + days = { 365 2190 } + } + } + } + } +} + } +} + "common/scripted_triggers/tfe_culture_triggers.txt" = { { dynasty = dynasty:nuvelan @@ -2312,593 +2377,4813 @@ this = character:aelling_01 #Aelle } } + { modifier = { add = 999 - exists = this - exists = character:6448 #count_eudes - this = character:6448 #count_eudes + exists = this + exists = character:easteregg_elisabeth_gangenes + this = character:easteregg_elisabeth_gangenes } } { modifier = { add = 999 exists = this - exists = character:107500 #king_sancho - this = character:107500 #king_sancho + exists = character:7757 #duchess_matilda + this = character:7757 #duchess_matilda + } + modifier = { + add = 999 + exists = this + exists = character:102505 #queen_ingebjorg + this = character:102505 #queen_ingebjorg + } + modifier = { + add = 999 + exists = this + exists = character:765 #princess_swietoslawa + this = character:765 #princess_swietoslawa + } + modifier = { + add = 999 + exists = this + exists = character:930551279 #eudoxia + this = character:930551279 #eudoxia + } + modifier = { + add = 999 + exists = this + exists = character:placidia_01 #placidia + this = character:placidia_01 #placidia + } + modifier = { + add = 999 + exists = this + exists = character:900065 #serena + this = character:900065 #serena } + modifier = { + add = 999 + exists = this + exists = character:992020 #Amalasuntha + this = character:992020 #Amalasuntha + } + modifier = { + add = 999 + exists = this + exists = character:992024 #Matasuntha + this = character:992024 #Matasuntha + } } { modifier = { add = 999 exists = this - exists = character:214 #king_philippe - this = character:214 #king_philippe + exists = character:108501 #infanta_urraca + this = character:108501 #infanta_urraca + } + modifier = { + add = 999 + exists = this + exists = character:131 #eadgifu_the_fair + this = character:131 #eadgifu_the_fair } } -} - -"common\casus_belli_types\TFE_event_wars.txt" = { { - NOT = { THIS = character:vandals_012 } + modifier = { + add = 999 + exists = this + exists = character:633 #queen_yelizaveta + this = character:633 #queen_yelizaveta + } } { - if = { - limit = { - character:armenian_02 = { - is_alive = yes - } - } - add_courtier = character:armenian_02 - } + modifier = { + add = 999 + exists = this + exists = character:easteregg_bianca_savazzi + this = character:easteregg_bianca_savazzi + } + modifier = { + add = 999 + exists = this + exists = character:easteregg_claudia_baldassi + this = character:easteregg_claudia_baldassi + } } -} - -"common\decisions\TFE_major_decisions_south_asia.txt" = { { -# Restore the main branch of the Vakataka Dynasty - -reclaim_vakataka_decision = { - picture = "gfx/interface/illustrations/decisions/decision_dynasty_house.dds" - - desc = reclaim_vakataka_decision_desc - selection_tooltip = reclaim_vakataka_decision_tooltip - major = yes - - ai_check_interval = 120 - - is_shown = { - dynasty = dynasty:900024 - NOT = { house = character:900900.house } #Not a member of the OG Vakatakas - NOT = { - is_target_in_global_variable_list = { - name = unavailable_unique_decisions - target = flag:reclaim_vakataka_decision - } - } - } - - is_valid = { - is_independent_ruler = yes - prestige_level >= 4 - completely_controls = title:k_maharastra - completely_controls = title:k_telingana - completely_controls = title:k_karnata - } - - is_valid_showing_failures_only = { - is_available_adult = yes - is_landed = yes + modifier = { + add = 999 + exists = this + exists = character:6863 #ingrid_bjornsdottir + this = character:6863 #ingrid_bjornsdottir + } + modifier = { + add = 999 + exists = this + exists = character:easteregg_linnea_thimren + this = character:easteregg_linnea_thimren + } } - - cost = { - prestige = 850 - piety = 500 + { + modifier = { + add = 999 + exists = this + exists = character:6839 #iliana_of_uppland + this = character:6839 #iliana_of_uppland + } + modifier = { + add = 999 + exists = this + exists = character:161257 #queen_wyszeslawa + this = character:161257 #queen_wyszeslawa + } + modifier = { + add = 999 + exists = this + exists = character:easteregg_steacy_mcilwham + this = character:easteregg_steacy_mcilwham + } + modifier = { + add = 999 + exists = this + exists = character:easteregg_katya_boestad + this = character:easteregg_katya_boestad + } + modifier = { + add = 999 + exists = this + exists = character:easteregg_tegan_harris + this = character:easteregg_tegan_harris + } + modifier = { + add = 999 + exists = this + exists = character:easteregg_bahar_shefket + this = character:easteregg_bahar_shefket + } + modifier = { + add = 999 + exists = this + exists = character:easteregg_alexia_belfort + this = character:easteregg_alexia_belfort + } } - - effect = { - hidden_effect = { ROOT.house = { every_house_member = { set_house = character:900900.house } } } - set_house = character:900900.house - add_pressed_claim = title:e_deccan - add_pressed_claim = title:k_gondwana - add_pressed_claim = title:d_jejakabhukti - add_pressed_claim = title:d_akara_dasarna - save_scope_as = founder - trigger_event = { - id = tfe_south_asia_decision.2001 - } - #Notify other Vakatakas - every_player = { - limit = { - dynasty = dynasty:900024 - } - trigger_event = tfe_south_asia_decision.2002 - } - } - - hidden_effect = { - add_to_global_variable_list = { - name = unavailable_unique_decisions - target = flag:reclaim_vakataka_decision - } - } - - ai_potential = { - always = yes + { + modifier = { + add = 999 + exists = this + exists = character:997005 #Chlodovech + this = character:997005 #Chlodovech + } + modifier = { + add = 999 + exists = character:997013 #Chlothar + this = character:997013 #Chlothar + } + modifier = { + add = 999 + exists = this + exists = character:997015 #Theodobert + this = character:997015 #Theodobert + } } - - ai_will_do = { - base = 100 + { + modifier = { + add = 999 + exists = this + exists = character:123 #queen_ealdgyth + this = character:123 #queen_ealdgyth + } + modifier = { + add = 999 + exists = this + exists = character:367 #duchess_mathilde + this = character:367 #duchess_mathilde + } } -} + { + modifier = { + add = 999 + exists = this + exists = character:145072 #Focas + this = character:145072 #Focas + } + modifier = { + add = 999 + exists = this + exists = character:145071 #Heraclius + this = character:145071 #Heraclius + } + modifier = { + add = 999 + exists = this + exists = character:armenian_01 #Narses + this = character:armenian_01 #Narses + } + modifier = { + add = 999 + exists = this + exists = character:greek_17 #Plutarch + this = character:greek_17 #Plutarch + } } { -#Restore the Three Crowned Kings -muvendhar_restoration_decision = { - picture = "gfx/interface/illustrations/decisions/decision_dynasty_house.dds" - - desc = muvendhar_restoration_decision_desc - selection_tooltip = muvendhar_restoration_decision_tooltip - major = yes - - ai_check_interval = 120 - - is_shown = { - is_ruler = yes - is_landed = yes - OR = { - culture = culture:tamil - culture = culture:malaiya - culture = culture:sinhala - culture = { any_parent_culture_or_above = { this = culture:tamil }} + modifier = { + add = 999 + exists = this + exists = character:6448 #count_eudes + this = character:6448 #count_eudes + } + modifier = { + add = 999 + exists = this + exists = character:107500 #king_sancho + this = character:107500 #king_sancho + } + modifier = { + add = 999 + exists = this + exists = character:214 #king_philippe + this = character:214 #king_philippe + } + modifier = { + add = 999 + exists = this + exists = character:146 #william_the_red + this = character:146 #william_the_red + } + } + { + modifier = { + add = 999 + exists = this + exists = character:163112 #halfdan_whiteshirt + this = character:163112 #halfdan_whiteshirt + } + modifier = { + add = 999 + exists = this + exists = character:30228 #king_louis + this = character:30228 #king_louis + } + modifier = { + add = 999 + exists = this + exists = character:984 #king_malcom + this = character:984 #king_malcom + } + modifier = { + add = 999 + exists = this + exists = character:212892 #ota_the_handsome + this = character:212892 #ota_the_handsome + } + modifier = { + add = 999 + exists = this + exists = character:762 #king_boleslaw + this = character:762 #king_boleslaw + } + modifier = { + add = 999 + exists = this + exists = character:easteregg_joel_hansson + this = character:easteregg_joel_hansson + } + modifier = { + add = 999 + exists = this + exists = character:easteregg_peter_johannesson + this = character:easteregg_peter_johannesson + } + modifier = { + add = 999 + exists = this + exists = character:easteregg_petter_vilberg + this = character:easteregg_petter_vilberg + } + + modifier = { + add = 999 + exists = this + exists = character:168137 + this = character:168137 + } + modifier = { + add = 999 + exists = this + exists = character:200290 #Atawulf + this = character:200290 #Arawulf + } + modifier = { + add = 999 + exists = this + exists = character:180618 #Bahram + this = character:180618 #Bahram + } + modifier = { + add = 999 + exists = this + exists = character:997004 #Childeric + this = character:997004 #Childeric + } + modifier = { + add = 999 + exists = this + exists = character:997009 #Theodoric Meroving + this = character:997009 #Theodoric Meroving + } + modifier = { + add = 999 + exists = this + exists = character:997011 #Chlodomir + this = character:997011 #Chlodomir + } + } + { + modifier = { + add = 999 + exists = this + exists = character:3924 #emir_yahya + this = character:3924 #emir_yahya + } + modifier = { + add = 999 + exists = this + exists = character:106000 #king_antso + this = character:106000 #king_antso + } + modifier = { + add = 999 + exists = this + exists = character:easteregg_alexander_oltner + this = character:easteregg_alexander_oltner + } + modifier = { + add = 999 + exists = this + exists = character:easteregg_ismael_serrano + this = character:easteregg_ismael_serrano + } + modifier = { + add = 999 + exists = this + exists = character:easteregg_christian_daflos + this = character:easteregg_christian_daflos + } + modifier = { + add = 999 + exists = this + exists = character:70517 #Leo + this = character:70517 #Leo + } + modifier = { + add = 999 + exists = this + exists = character:mauro_roman_kings_02 #Massonas + this = character:mauro_roman_kings_02 #Massonas + } + } + { + modifier = { + add = 999 + exists = this + exists = character:205141 #Ceredig + this = character:205141 #Ceredig + } + modifier = { + add = 999 + exists = this + exists = character:70512 #Justinian + this = character:70512 #Justinian + } + modifier = { + add = 999 + exists = this + exists = character:cappadocia_07 #Ioannes + this = character:cappadocia_07 #Ioannes + } + } + { + modifier = { + add = 999 + exists = this + exists = character:quadi_04 # Hermerich of the Quadi + this = character:quadi_04 # Hermerich of the Quadi + } + } + { + modifier = { + add = 400 + exists = this + exists = character:83355 #petty_king_murchad + this = character:83355 #petty_king_murchad + } + modifier = { + add = 999 + exists = this + exists = character:109500 #king_garcia + this = character:109500 #king_garcia + } + modifier = { + add = 999 + exists = this + exists = character:easteregg_henrik_fahraeus + this = character:easteregg_henrik_fahraeus + } + modifier = { + add = 999 + exists = this + exists = character:easteregg_jakub_potapczyk + this = character:easteregg_jakub_potapczyk + } + modifier = { + add = 999 + exists = this + exists = character:easteregg_petter_lundh + this = character:easteregg_petter_lundh + } + modifier = { + add = 999 + exists = this + exists = character:easteregg_max_weltz + this = character:easteregg_max_weltz + } + modifier = { + add = 999 + exists = this + exists = character:easteregg_max_collin + this = character:easteregg_max_collin + } + modifier = { + add = 999 + exists = this + exists = character:easteregg_martin_anward + this = character:easteregg_martin_anward + } + modifier = { + add = 999 + exists = this + exists = character:6392 #charlemagne + this = character:6392 #charlemagne + } + } + { + modifier = { + add = 999 + exists = this + exists = character:522 #duke_vratislav + this = character:522 #duke_vratislav + } + modifier = { + add = 999 + exists = this + exists = character:108500 #king_alfonso + this = character:108500 #king_alfonso + } + modifier = { + add = 999 + exists = this + exists = character:easteregg_sean_hughes + this = character:easteregg_sean_hughes + } + modifier = { + add = 999 + exists = this + exists = character:easteregg_paul_depre + this = character:easteregg_paul_depre + } + modifier = { + add = 999 + exists = this + exists = character:easteregg_zack_holmgren + this = character:easteregg_zack_holmgren + } + modifier = { + add = 999 + exists = this + exists = character:159431 #Conan Meriadoc + this = character:159431 #tiberius + } + modifier = { + add = 999 + exists = this + exists = character:999103 #king_alaric + this = character:999103 #king_alaric + } + modifier = { + add = 999 + exists = this + exists = character:159038 #Coel + this = character:159038 #ACoel + } + modifier = { + add = 999 + exists = this + exists = character:constantinus_05 #Ambrosius + this = character:constantinus_05 #Ambrosius + } + modifier = { + add = 999 + exists = this + exists = character:mauri_42 #Iabdas + this = character:mauri_42 #Iabdas + } + modifier = { + add = 999 + exists = this + exists = character:997002 #Chlodio + this = character:997002 #Chlodio + } + } + { + modifier = { + add = 999 + exists = this + exists = character:easteregg_james_beaumont + this = character:easteregg_james_beaumont + } + modifier = { + add = 999 + exists = this + exists = character:maldras_06 #Hermenerich + this = character:maldras_06 #Hermenerich + } + modifier = { + add = 999 + exists = this + exists = character:982001 #Abu Karib + this = character:982001 #Abu Karib + } + modifier = { + add = 999 + exists = this + exists = character:xionite_001 #Kidara + this = character:xionite_001 #Kidara + } + modifier = { + add = 999 + exists = this + exists = character:samo_01 #Samo + this = character:samo_01 #Samo + } + } + { + modifier = { + add = 999 + exists = this + exists = character:90104 #charles_the_bald + this = character:90104 #charles_the_bald + } + modifier = { + add = 999 + exists = this + exists = character:1316 #emperor_heinrich + this = character:1316 #emperor_heinrich + } + modifier = { + add = 999 + exists = this + exists = character:992016 #theodoric_the_great + this = character:992016 #theodoric_the_great + } + modifier = { + add = 999 + exists = this + exists = character:83432 #Eochaid + this = character:83432 #Eochaid + } + } + { + modifier = { + modifier = { + add = 999 + exists = this + exists = character:easteregg_nils_wadensten + this = character:easteregg_nils_wadensten + } + add = 999 + exists = this + exists = character:900062 #stilicho + this = character:900062 #stilicho + } + modifier = { + add = 999 + exists = this + exists = character:70519 #Imperator Arcadius I + this = character:70519 #Imperator Arcadius I + } + modifier = { + add = 999 + exists = this + exists = character:145227 #Imperator Honorius I + this = character:145227 #Imperator Honorius I + } + modifier = { + add = 999 + exists = this + exists = character:nepos_02 #Nepos + this = character:nepos_02 #Nepos + } + modifier = { + add = 999 + exists = this + exists = character:145237 #julian_the_apostate + this = character:145237 #julian_the_apostate + } + modifier = { + add = 999 + exists = this + exists = character:londinium_01 #Riothamus + this = character:londinium_01 #Riothamus + } + modifier = { + add = 999 + exists = this + exists = character:arsacid_58 #vramshapuh + this = character:arsacid_58 #vramshapuh + } + modifier = { + add = 999 + exists = this + exists = character:vandals_005 #Hilderic + this = character:vandals_005 #Hilderic + } + modifier = { + add = 999 + exists = this + exists = character:992022 #Theodahad + this = character:992022 #Theodahad + } + modifier = { + add = 999 + exists = this + exists = character:991004 #Mundus + this = character:991004 #Mundus + } + modifier = { + add = 999 + exists = this + exists = character:greek_20 #Proklos + this = character:greek_20 #Proklos + } + } + { + modifier = { + add = 999 + exists = this + exists = character:nuvelan_11 #Gildo + this = character:nuvelan_11 #Gildo + } + modifier = { + add = 999 + exists = this + exists = character:aksum_16 #Ouazeba + this = character:aksum_16 #Ouazeba + } + } + { + modifier = { + add = 999 + exists = this + exists = character:easteregg_magne_skjaeran + this = character:easteregg_magne_skjaeran + } + } + { + modifier = { + modifier = { + add = 999 + exists = this + exists = character:163111 #ivar_the_boneless + this = character:163111 #ivar_the_boneless + } + modifier = { + add = 999 + exists = this + exists = character:102531 #harald_hardrade + this = character:102531 #harald_hardrade + } + modifier = { + add = 999 + exists = this + exists = character:easteregg_joacim_carlberg + this = character:easteregg_joacim_carlberg + } + modifier = { + add = 999 + exists = this + exists = character:easteregg_struan_mccallum + this = character:easteregg_struan_mccallum + } + add = 999 + exists = this + exists = character:999105 #athaulf + this = character:999105 #athaulf + } + modifier = { + add = 999 + exists = this + exists = character:997003 #Merovech + this = character:997003 #Merovech + } + modifier = { + add = 999 + exists = this + exists = character:992003 #Hermanaric + this = character:992003 #Hermanaric + } + } + { + modifier = { + add = 999 + exists = this + exists = character:163110 #sigurdr_snake_in_the_eye + this = character:163110 #sigurdr_snake_in_the_eye + } + modifier = { + add = 999 + exists = this + exists = character:144000 #haraldr_fairhair + this = character:144000 #haraldr_fairhair + } + modifier = { + add = 999 + exists = this + exists = character:40605 #rurik_rurikid + this = character:40605 #rurik_rurikid + } + modifier = { + add = 999 + exists = this + exists = character:easteregg_jonas_wickerstrom + this = character:easteregg_jonas_wickerstrom + } + modifier = { + add = 999 + exists = this + exists = character:900016 #faramund + this = character:900016 #faramund + } + } + { + modifier = { + add = 999 + exists = this + exists = character:163108 #bjorn_ironside + this = character:163108 #bjorn_ironside + } + modifier = { + add = 999 + exists = this + exists = character:140 #william_the_bastard + this = character:140 #william_the_bastard + } + modifier = { + add = 999 + exists = this + exists = character:101515 #king_svend + this = character:101515 #king_svend + } + modifier = { + add = 999 + exists = this + exists = character:42018 #karlmann + this = character:42018 #karlmann + } + } + { + modifier = { + add = 999 + exists = this + exists = character:159137 #almos_arpad + this = character:159137 #almos_arpad + } + } + { + modifier = { + add = 999 + exists = this + exists = character:alchonid_005 #Khingila + this = character:alchonid_005 #Khingila + } + modifier = { + add = 999 + exists = this + exists = character:hephthalite_misc_017 #Katulf + this = character:hephthalite_misc_017 #Katulf + } + } + { + modifier = { + add = 999 + exists = this + exists = character:belisarius_001 #Belisarius + this = character:belisarius_001 #Belisarius + } + } + { + modifier = { + add = 999 + exists = this + exists = character:200284 #euric + this = character:200284 #euric + } + modifier = { + add = 999 + exists = this + exists = character:180628 #Khosrau + this = character:180628 #Khosrau + } + modifier = { + add = 999 + exists = this + exists = character:mauri_36 #Masties + this = character:mauri_36 #Masties + } + } + { + modifier = { + add = 999 + exists = this + exists = character:danis0005 + this = character:danis0005 + } + + modifier = { + add = 999 + exists = this + exists = character:surunbaqi0001 + this = character:surunbaqi0001 + } + modifier = { + add = 999 + exists = this + exists = character:107590 #el_cid + this = character:107590 #el_cid + } + modifier = { + add = 999 + exists = this + exists = character:159012 #Cadwallon + this = character:159012 #Cadwallon + } + modifier = { + add = 999 + exists = this + exists = character:ashina_03 #Tuwu + this = character:ashina_03 #Tuwu + } + modifier = { + add = 999 + exists = this + exists = character:ashina_05 #Istemi + this = character:ashina_05 #Istemi + } + } + { + modifier = { + add = 999 + exists = this + exists = character:200280 #Theodis + this = character:200280 #Theodis + } + modifier = { + add = 999 + exists = this + exists = character:ashina_04 #Bumin + this = character:ashina_04 #Bumin + } + modifier = { + add = 999 + exists = this + exists = character:waegmunding_2 #Beowulf + this = character:waegmunding_2 #Beowulf + } + } + { + modifier = { + add = 999 + exists = this + exists = character:996002 #odoacer + this = character:996002 #odoacer + } + modifier = { + add = 999 + exists = this + exists = character:992023 #Athalaric + this = character:992023 #Athalaric + } + modifier = { + add = 999 + exists = this + exists = character:992063 #Fritigern + this = character:992063 #Fritigern + } + } + { + modifier = { + add = 999 + exists = this + exists = character:900016 #Faramund + this = character:900016 #Faramund + } + modifier = { + add = 999 + exists = character:990006 #Attila + this = character:990006 #Attila + } + modifier = { + add = 999 + exists = this + exists = character:997012 #Childebert + this = character:997012 #Childebert + } + } + { + modifier = { + add = 999 + exists = this + exists = character:vandals_012 #Gelimer + this = character:vandals_012 #Gelimer + } + modifier = { + add = 999 + exists = this + exists = character:marshalnsc + this = character:marshalnsc + } + } + { + modifier = { + add = 999 + exists = this + exists = character:168314 #waldrada + this = character:168314 #waldrada + } + modifier = { + add = 999 + exists = this + exists = character:1183 #empress_bertha + this = character:1183 #empress_bertha + } + } + { + modifier = { + add = 999 + exists = this + exists = character:251187 #daurama_daura + this = character:251187 #daurama_daura + } + } + { + modifier = { + add = 999 + exists = this + exists = character:73683 + this = character:73683 + } + modifier = { + add = 999 + exists = this + exists = character:vandals_003 + this = character:vandals_003 + } + } + { + modifier = { + add = 999 + exists = this + exists = character:73759 + this = character:73759 + } + } + { + modifier = { + add = 999 + exists = this + exists = character:73857 + this = character:73857 + } + + modifier = { + add = 999 + exists = this + exists = character:70292 + this = character:70292 + } + } + { + modifier = { + add = 999 + exists = this + exists = character:73783 + this = character:73783 + } + } +} + +"common\casus_belli_types\TFE_event_wars.txt" = { + { +independence_war_vandal = { + icon = independence_faction_war + group = event + ai = no # AI targeting is handled through game_rule events. + + allow_hostages = no + allowed_against_character = { + OR = { + scope:attacker = { + liege = scope:defender + } + scope:attacker = { + top_liege = scope:defender + } + } + } + + cost = { + piety = { + value = 0 + } + prestige = { + value = 0 + } + } + + on_declaration = { + on_declared_war = yes + # Remove offending HumSac modifiers. + scope:attacker = { + hidden_effect = { fp1_remove_humsac_offended_counties_effect = yes } + } + war = { + every_war_attacker = { + if = { + limit = { + OR = { + liege = title:k_africae.holder + AND = { + liege = { + liege = scope:defender + } + NOT = { + faith = liege.faith + } + } + } + } + add_character_flag = should_become_independent + } + } + } + } + + on_victory_desc = { + first_valid = { + triggered_desc = { + trigger = { # Desc for only one player attacker + scope:attacker = { + is_local_player = yes + } + } + desc = independence_war_victory_desc_local_player_attacker_alone + } + triggered_desc = { # Desc for only one attacker, player defender + trigger = { + scope:defender = { + is_local_player = yes + } + } + desc = player_independence_war_victory_desc_local_player_defender_attacker_alone + } + desc = independence_war_victory_desc_local_player_attacker_alone # Desc for a third party involved + } + + } + + on_victory = { + scope:attacker = { show_pow_release_message_effect = yes } + + #EP2 Accolade glory gain from winning against higher ranked enemy + scope:attacker = { accolade_attacker_war_end_glory_gain_med_effect = yes } + + create_title_and_vassal_change = { + type = independency + save_scope_as = change + } + if = { + # Free character with the flag + limit = { exists = war } + war = { + every_war_attacker = { + if = { + limit = { has_character_flag = should_become_independent } + + create_title_and_vassal_change = { + type = independency + save_scope_as = going_independent + add_claim_on_loss = no + } + becomes_independent = { + change = scope:going_independent + } + + resolve_title_and_vassal_change = scope:going_independent + + add_truce_both_ways = { + character = scope:defender + days = 1825 + war = root.war + result = victory + } + + remove_character_flag = should_become_independent + + change_liege_or_become_independent = { + CHANGE = scope:change + VASSAL = this + } + + hidden_effect = { + set_variable = { + name = independence_war_former_liege + value = scope:defender + } + + save_scope_as = current_member + + # Struggle Catalyst + if = { + limit = { + catalyst_gave_independence_to_powerful_diff_faith_culture_vassal_preliminary_trigger = { + CHAR1 = scope:defender + CHAR2 = scope:current_member + } + any_character_struggle = { + involvement = involved + activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + CATALYST = catalyst_gave_independence_to_powerful_diff_faith_culture_vassal + CHAR = scope:current_member + } + } + } + every_character_struggle = { + involvement = involved + limit = { + activate_struggle_catalyst_secondary_character_involvement_either_trigger = { + CATALYST = catalyst_gave_independence_to_powerful_diff_faith_culture_vassal + CHAR = scope:current_member + } + } + activate_struggle_catalyst = { + catalyst = catalyst_gave_independence_to_powerful_diff_faith_culture_vassal + character = scope:defender + } + } + } + } + } + } + } + } + + scope:defender = { + # Struggle Catalyst + hidden_effect = { + if = { + limit = { + catalyst_gave_independence_to_powerful_diff_faith_culture_vassal_preliminary_trigger = { + CHAR1 = scope:defender + CHAR2 = scope:attacker + } + any_character_struggle = { + involvement = involved + activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + CATALYST = catalyst_gave_independence_to_powerful_diff_faith_culture_vassal + CHAR = scope:attacker + } + } + } + every_character_struggle = { + involvement = involved + limit = { + activate_struggle_catalyst_secondary_character_involvement_either_trigger = { + CATALYST = catalyst_gave_independence_to_powerful_diff_faith_culture_vassal + CHAR = scope:attacker + } + } + activate_struggle_catalyst = { + catalyst = catalyst_gave_independence_to_powerful_diff_faith_culture_vassal + character = scope:defender + } + } + } + } + } + + resolve_title_and_vassal_change = scope:change + + } + + on_white_peace_desc = { + first_valid = { + triggered_desc = { + trigger = { scope:defender = { is_local_player = yes } } + desc = player_independence_war_white_peace_defender_desc + } + triggered_desc = { + trigger = { + scope:attacker = { + is_local_player = yes + } + } + desc = player_independence_war_white_peace_attacker_desc + } + desc = player_independence_war_white_peace_desc + } + + } + + on_white_peace = { + scope:attacker = { + show_pow_release_message_effect = yes + stress_impact = { + ambitious = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + } + } + hidden_effect = { + scope:attacker = { + add_truce_both_ways = { + character = scope:defender + days = 1825 + war = root.war + result = white_peace + } + } + } + + scope:defender = { + add_prestige = minor_prestige_value + stress_impact = { + arrogant = medium_stress_impact_gain + } + } + } + + on_defeat_desc = { + first_valid = { + triggered_desc = { + trigger = { scope:defender = { is_local_player = yes } } + desc = player_independence_defeat_defender_desc + } + triggered_desc = { + trigger = { + scope:attacker = { + is_local_player = yes + } + } + desc = player_independence_defeat_attacker_desc + } + desc = player_independence_war_defeat_desc + } + + } + + on_defeat = { + scope:attacker = { show_pow_release_message_effect = yes } + scope:defender = { + add_dread = medium_dread_gain + # Prestige for Defender + add_prestige_war_defender_effect = { + PRESTIGE_VALUE = medium_prestige_value + } + } + + if = { + # Free character with the flag + limit = { exists = war } + war = { + every_war_attacker = { + save_scope_as = expelled_vandal + if = { + limit = { + has_character_flag = should_become_independent + NOT = { THIS = character:vandals_012 } + } + hard_imprison_character_effect = { + TARGET = this + IMPRISONER = scope:defender + } + scope:defender = { + add_opinion = { + target = prev + modifier = vassal_lost_faction_revolt_war + } + } + } + if = { + limit = { + THIS = character:vandals_012 + title:c_cappadocia.holder = { + is_ai = yes + } + } + title:c_cappadocia = { + save_temporary_scope_as = current_county + } + create_title_and_vassal_change = { + type = usurped + save_scope_as = change + add_claim_on_loss = no + } + scope:current_county = { + change_title_holder = { + holder = character:vandals_012 + change = scope:change + take_baronies = yes + } + } + resolve_title_and_vassal_change = scope:change + + every_vassal = { + add_to_list = vassals_to_defect + } + + every_held_title = { + limit = { + NOT = { this = title:c_cappadocia } + } + add_to_list = titles_to_usurp + } + + create_title_and_vassal_change = { + type = usurped + save_scope_as = title_change + add_claim_on_loss = no + } + every_in_list = { + list = titles_to_usurp + change_title_holder = { + holder = title:k_africae.holder + change = scope:title_change + take_baronies = no + } + } + every_in_list = { + list = vassals_to_defect + change_liege = { + liege = title:k_africae.holder + change = scope:title_change + } + } + change_liege = { + liege = title:k_africae.holder.top_liege + change = scope:title_change + } + resolve_title_and_vassal_change = scope:title_change + character:vandals_012 = { + add_character_modifier = { + modifier = peaceful_retirement + } + add_trait = content + change_government = imperial_government + } + } + else_if = { + limit = { + THIS = character:vandals_012 + } + title:c_lower_galatia = { + save_temporary_scope_as = current_county + } + create_title_and_vassal_change = { + type = usurped + save_scope_as = change + add_claim_on_loss = no + } + scope:current_county = { + change_title_holder = { + holder = character:vandals_012 + change = scope:change + take_baronies = yes + } + } + resolve_title_and_vassal_change = scope:change + + every_vassal = { + add_to_list = vassals_to_defect + } + + every_held_title = { + limit = { + NOT = { this = title:c_lower_galatia } + } + add_to_list = titles_to_usurp + } + + create_title_and_vassal_change = { + type = usurped + save_scope_as = title_change + add_claim_on_loss = no + } + every_in_list = { + list = titles_to_usurp + change_title_holder = { + holder = title:k_africae.holder + change = scope:title_change + take_baronies = no + } + } + every_in_list = { + list = vassals_to_defect + change_liege = { + liege = title:k_africae.holder + change = scope:title_change + } + } + change_liege = { + liege = title:k_africae.holder.top_liege + change = scope:title_change + } + resolve_title_and_vassal_change = scope:title_change + character:vandals_012 = { + add_character_modifier = { + modifier = peaceful_retirement + } + add_trait = content + change_government = imperial_government + } + } + if = { + limit = { + liege = title:k_africae.holder + NOT = { THIS = character:vandals_012 } + } + save_scope_as = vandal_expel + scope:defender.top_liege = { + random_sub_realm_county = { + limit = { + kingdom = title:k_orientis + holder = { + is_ai = yes + realm_size > 1 + NOT = { + OR = { + THIS = primary_title.title_capital_county + THIS = primary_title.title_capital_county.de_jure_liege + } + } + } + NOT = { + is_in_list = vandal_titles_to_usurp + } + } + save_scope_as = county_expel + add_to_list = vandal_titles_to_usurp + + #create_title_and_vassal_change = { + # type = usurped + # save_scope_as = change + # add_claim_on_loss = no + #} + #scope:county_expel = { + # change_title_holder = { + # holder = scope:expelled_vandal + # change = scope:change + # take_baronies = yes + # } + #} + #resolve_title_and_vassal_change = scope:change + } + scope:vandal_expel = { + every_vassal = { + add_to_list = vassals_to_defect + } + + every_held_title = { + limit = { + NOT = { this = scope:county_expel } + } + add_to_list = titles_to_usurp + } + + create_title_and_vassal_change = { + type = usurped + save_scope_as = title_change + add_claim_on_loss = no + } + every_in_list = { + list = titles_to_usurp + change_title_holder = { + holder = title:k_africae.holder + change = scope:title_change + take_baronies = no + } + } + every_in_list = { + list = vassals_to_defect + change_liege = { + liege = title:k_africae.holder + change = scope:title_change + } + } + change_liege = { + liege = title:k_africae.holder.top_liege + change = scope:title_change + } + resolve_title_and_vassal_change = scope:title_change + } + if = { + limit = { + scope:vandal_expel = { + is_landed = no + } + character:vandals_012 = { + is_alive = yes + is_landed = yes + } + } + character:vandals_012 = { + add_courtier = scope:vandal_expel + } + } + } + } + } + } + } + add_culture_minority_effect = { + CULTURE = culture:vandal + SIZE = small + COUNTY = title:c_upper_khabur + } + add_culture_minority_effect = { + CULTURE = culture:vandal + SIZE = small + COUNTY = title:c_amida + } + add_culture_minority_effect = { + CULTURE = culture:vandal + SIZE = small + COUNTY = title:c_tall_basma + } + } + + on_invalidated_desc = msg_invalidate_war_title + + check_defender_inheritance_validity = no + + on_primary_attacker_death = inherit + on_primary_defender_death = inherit + + attacker_allies_inherit = yes + defender_allies_inherit = yes + + transfer_behavior = transfer + + war_name = "INDEPENDENCE_WAR_NAME" + + interface_priority = 120 + + attacker_wargoal_percentage = 0.8 + + max_attacker_score_from_battles = 100 + max_defender_score_from_battles = 50 + + max_defender_score_from_occupation = 150 + max_attacker_score_from_occupation = 150 + + max_ai_diplo_distance_to_title = 500 +} + } + { +radagaisus_invasion_cb = { + group = event + + allowed_for_character = { + } + + allowed_against_character = { + scope:attacker = { + ALL_FALSE = { + top_liege = scope:defender.top_liege + liege = scope:defender + } + } + } + + combine_into_one = yes + + target_titles = none + target_title_tier = all + target_de_jure_regions_above = yes + ignore_effect = change_title_holder + ai_only_against_neighbors = yes + defender_ticking_warscore_delay = { years = 2 } + + white_peace_possible = no + + valid_to_start = { + always = no + } + + should_invalidate = { + NOT = { + any_in_list = { + list = target_titles + any_in_de_jure_hierarchy = { + tier = tier_county + holder = { + OR = { + this = scope:defender + target_is_liege_or_above = scope:defender + } + } + } + } + } + } + + on_invalidated_desc = msg_religious_war_invalidation_region_message + + on_invalidated = { + } + + cost = { + } + + on_declaration = { + on_declared_war = yes + } + + on_victory_desc = { + first_valid = { + triggered_desc = { + trigger = { scope:attacker = { is_local_player = yes } } + desc = radagaisus_invasion_victory_desc_attacker + } + triggered_desc = { + trigger = { scope:defender = { is_local_player = yes } } + desc = radagaisus_invasion_victory_desc_defender + } + desc = radagaisus_invasion_victory_desc + } + } + + on_victory = { + #EP2 accolade glory gain for winning against higher ranked enemy + scope:attacker = { accolade_attacker_war_end_glory_gain_high_effect = yes } + scope:attacker = { show_pow_release_message_effect = yes } + scope:defender = { + trigger_event = { + id = gothic_wars.0014 + days = 1 + } + } + + create_title_and_vassal_change = { + type = conquest_holy_war + save_scope_as = change + add_claim_on_loss = yes + } + # go through the dejure hierarchy under target titles, transfer titles with same or worse tolerance holders (their religion equaly or less tolerated than the defender's), + # take the holder as vassal otherwise and don't go deeper + every_in_list = { + list = target_titles + custom_tooltip = RELIGIOUS_CB_TITLE + + conquest_cb_title_transfer = { + RELIGIOUS_WAR = yes + } + } + + every_in_list = { + list = vassals_taken + change_liege = { + liege = scope:attacker + change = scope:change + } + } + + every_in_list = { + list = titles_taken + change_title_holder = { + holder = scope:attacker + change = scope:change + take_baronies = yes + } + } + + resolve_title_and_vassal_change = scope:change + + # Prestige Progress for the Attacker + every_in_list = { + list = target_titles + scope:attacker = { + add_prestige_experience = medium_prestige_value + } + } + + # Allies on both sides get full prestige value for helping in the war, based on their war participation. + modify_allies_of_participants_fame_values = { + WINNER = scope:attacker + FAME_BASE = medium_prestige_value + IS_RELIGIOUS_WAR = no + WINNER_ALLY_FAME_SCALE = 1 + LOSER_ALLY_FAME_SCALE = 1 + } + + # Truce + add_truce_attacker_victory_effect = yes + + # FP1: note the victory for future memorialisation via stele (if applicable) + scope:attacker = { fp1_remember_recent_conquest_victory_effect = yes } + } + + on_white_peace_desc = { + first_valid = { + triggered_desc = { + trigger = { scope:attacker = { is_local_player = yes } } + desc = radagaisus_invasion_white_peace_desc_attacker + } + triggered_desc = { + trigger = { scope:defender = { is_local_player = yes } } + desc = radagaisus_invasion_white_peace_desc_defender + } + desc = radagaisus_invasion_white_peace_desc + } + } + + on_defeat_desc = { + first_valid = { + triggered_desc = { + trigger = { scope:attacker = { is_local_player = yes } } + desc = radagaisus_invasion_defeat_desc_attacker + } + triggered_desc = { + trigger = { scope:defender = { is_local_player = yes } } + desc = radagaisus_invasion_defeat_desc_defender + } + desc = radagaisus_invasion_defeat_desc + } + } + + on_defeat = { + #EP2 accolade glory gain for winning against higher ranked enemy + scope:defender = { accolade_attacker_war_end_glory_gain_high_effect = yes } + scope:attacker = { show_pow_release_message_effect = yes } + + if = { + limit = { + exists = title:k_visigoths.holder + } + goths_flee_effect = yes + } + + # Prestige loss for the attacker + scope:attacker = { + save_temporary_scope_as = loser + pay_short_term_gold_reparations_effect = { + GOLD_VALUE = 5 + } + add_prestige = { + value = major_prestige_value + multiply = -1.0 + } + } + + # Prestige for Defender + scope:defender = { + add_prestige_war_defender_effect = { + PRESTIGE_VALUE = major_prestige_value + } + } + + # Allies on both sides get full prestige value for helping in the war, based on their war participation. + modify_allies_of_participants_fame_values = { + WINNER = scope:defender + FAME_BASE = medium_prestige_value + IS_RELIGIOUS_WAR = no + WINNER_ALLY_FAME_SCALE = 1 + LOSER_ALLY_FAME_SCALE = 1 + } + + lost_radagaisus_invasion_effect = yes + + add_truce_attacker_defeat_effect = yes + on_lost_aggression_war_discontent_loss = yes + } + + transfer_behavior = transfer + + on_primary_attacker_death = inherit + on_primary_defender_death = inherit + + attacker_allies_inherit = yes + defender_allies_inherit = yes + + war_name = RADAGAISUS_INVASION_NAME + war_name_base = RADAGAISUS_INVASION_NAME_BASE + cb_name = RADAGAISUS_INVASION_CB_NAME + + use_de_jure_wargoal_only = yes + + interface_priority = 100 +} + } + { + if = { + limit = { + character:armenian_02 = { + is_alive = yes + } + } + add_courtier = character:armenian_02 + } + } +} + +"common\casus_belli_types\TFE_event_wars_overflow.txt" = { + { +independence_war_berber = { + icon = independence_faction_war + group = event + ai = no # AI targeting is handled through game_rule events. + + allow_hostages = no + allowed_against_character = { + OR = { + scope:attacker = { + liege = scope:defender + } + scope:attacker = { + top_liege = scope:defender + } + } + } + + cost = { + piety = { + value = 0 + } + prestige = { + value = 0 + } + } + + on_declaration = { + on_declared_war = yes + # Remove offending HumSac modifiers. + scope:attacker = { + spawn_army = { + name = "Berber Tribesmen" + levies = 1000 + men_at_arms = { + type = bowmen + stacks = 2 + } + men_at_arms = { + type = desert_hussar + stacks = 2 + } + men_at_arms = { + type = light_footmen + stacks = 2 + } + location = province:4601 #Nemancha + inheritable = no + uses_supply = no + war = scope:war + } + } + scope:attacker = { + hidden_effect = { fp1_remove_humsac_offended_counties_effect = yes } + } + war = { + every_war_attacker = { + if = { + limit = { + top_liege = scope:defender + NOT = { culture = { has_same_culture_heritage = liege.culture } } + } + add_character_flag = should_become_independent + } + } + } + } + + on_victory_desc = { + first_valid = { + triggered_desc = { + trigger = { # Desc for only one player attacker + scope:attacker = { + is_local_player = yes + } + } + desc = independence_war_victory_desc_local_player_attacker_alone + } + triggered_desc = { # Desc for only one attacker, player defender + trigger = { + scope:defender = { + is_local_player = yes + } + } + desc = player_independence_war_victory_desc_local_player_defender_attacker_alone + } + desc = independence_war_victory_desc_local_player_attacker_alone # Desc for a third party involved + } + + } + + on_victory = { + scope:attacker = { show_pow_release_message_effect = yes } + + #EP2 Accolade glory gain from winning against higher ranked enemy + scope:attacker = { accolade_attacker_war_end_glory_gain_med_effect = yes } + + create_title_and_vassal_change = { + type = independency + save_scope_as = change + } + if = { + # Free character with the flag + limit = { exists = war } + war = { + every_war_attacker = { + if = { + limit = { + has_character_flag = should_become_independent + top_liege = scope:defender + } + + create_title_and_vassal_change = { + type = independency + save_scope_as = going_independent + add_claim_on_loss = no + } + becomes_independent = { + change = scope:going_independent + } + + resolve_title_and_vassal_change = scope:going_independent + + add_truce_both_ways = { + character = scope:defender + days = 1825 + war = root.war + result = victory + } + + remove_character_flag = should_become_independent + + change_liege_or_become_independent = { + CHANGE = scope:change + VASSAL = this + } + + hidden_effect = { + set_variable = { + name = independence_war_former_liege + value = scope:defender + } + + save_scope_as = current_member + + # Struggle Catalyst + if = { + limit = { + catalyst_gave_independence_to_powerful_diff_faith_culture_vassal_preliminary_trigger = { + CHAR1 = scope:defender + CHAR2 = scope:current_member + } + any_character_struggle = { + involvement = involved + activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + CATALYST = catalyst_gave_independence_to_powerful_diff_faith_culture_vassal + CHAR = scope:current_member + } + } + } + every_character_struggle = { + involvement = involved + limit = { + activate_struggle_catalyst_secondary_character_involvement_either_trigger = { + CATALYST = catalyst_gave_independence_to_powerful_diff_faith_culture_vassal + CHAR = scope:current_member + } + } + activate_struggle_catalyst = { + catalyst = catalyst_gave_independence_to_powerful_diff_faith_culture_vassal + character = scope:defender + } + } + } + } + } + } + } + } + + scope:defender = { + # Struggle Catalyst + hidden_effect = { + if = { + limit = { + catalyst_gave_independence_to_powerful_diff_faith_culture_vassal_preliminary_trigger = { + CHAR1 = scope:defender + CHAR2 = scope:attacker + } + any_character_struggle = { + involvement = involved + activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + CATALYST = catalyst_gave_independence_to_powerful_diff_faith_culture_vassal + CHAR = scope:attacker + } + } + } + every_character_struggle = { + involvement = involved + limit = { + activate_struggle_catalyst_secondary_character_involvement_either_trigger = { + CATALYST = catalyst_gave_independence_to_powerful_diff_faith_culture_vassal + CHAR = scope:attacker + } + } + activate_struggle_catalyst = { + catalyst = catalyst_gave_independence_to_powerful_diff_faith_culture_vassal + character = scope:defender + } + } + } + } + } + resolve_title_and_vassal_change = scope:change + + } + + on_white_peace_desc = { + first_valid = { + triggered_desc = { + trigger = { scope:defender = { is_local_player = yes } } + desc = player_independence_war_white_peace_defender_desc + } + triggered_desc = { + trigger = { + scope:attacker = { + is_local_player = yes + } + } + desc = player_independence_war_white_peace_attacker_desc + } + desc = player_independence_war_white_peace_desc + } + + } + + on_white_peace = { + scope:attacker = { + show_pow_release_message_effect = yes + stress_impact = { + ambitious = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + } + } + hidden_effect = { + scope:attacker = { + add_truce_both_ways = { + character = scope:defender + days = 1825 + war = root.war + result = white_peace + } + } + } + + scope:defender = { + add_prestige = minor_prestige_value + stress_impact = { + arrogant = medium_stress_impact_gain + } + } + } + + on_defeat_desc = { + first_valid = { + triggered_desc = { + trigger = { scope:defender = { is_local_player = yes } } + desc = player_independence_defeat_defender_desc + } + triggered_desc = { + trigger = { + scope:attacker = { + is_local_player = yes + } + } + desc = player_independence_defeat_attacker_desc + } + desc = player_independence_war_defeat_desc + } + + } + + on_defeat = { + scope:attacker = { show_pow_release_message_effect = yes } + scope:defender = { + add_dread = medium_dread_gain + # Prestige for Defender + add_prestige_war_defender_effect = { + PRESTIGE_VALUE = medium_prestige_value + } + } + if = { + limit = { exists = war } + war = { + every_war_attacker = { + limit = { + top_liege = scope:defender + } + hard_imprison_character_effect = { + TARGET = this + IMPRISONER = scope:defender + } + scope:defender = { + add_opinion = { + target = prev + modifier = vassal_lost_faction_revolt_war + } + } + } + } + } + if = { + limit = { + character:thracio_03 = { + is_landed = yes + top_liege = scope:defender + is_imprisoned = yes + } + } + character:thracio_03 = { + depose = yes + release_from_prison = yes + } + } + if = { + limit = { + exists = title:k_mauro_roman_kingdom.holder + } + title:k_mauro_roman_kingdom.holder = { + add_courtier = character:thracio_03 + } + character:thracio_03 = { + add_unpressed_claim = title:k_mauro_roman_kingdom + } + } + if = { + limit = { + war = { + any_war_attacker = { has_title = title:d_avaritana } + } + war = { + any_war_defender = { has_title = title:d_zaba } + } + } + create_title_and_vassal_change = { + type = swear_fealty + save_scope_as = change + add_claim_on_loss = no + } + + if = { + limit = { + title:d_avaritana.holder.primary_title.tier < title:d_zaba.holder.primary_title.tier + } + title:d_avaritana.holder = { + change_liege = { + liege = title:d_zaba.holder + change = scope:change + } + } + } + else = { + title:d_avaritana.holder = { + every_held_title = { + if = { + limit = { + tier = title:d_avaritana.holder.primary_title.tier + } + change_title_holder = { + holder = title:d_zaba.holder + change = scope:change + } + } + else_if = { + limit = { + OR = { + NOT = { exists = scope:secondary_title } + tier > scope:secondary_title.tier + } + } + save_temporary_scope_as = secondary_title + } + } + } + + title:d_avaritana.holder = { + if = { + limit = { + exists = scope:secondary_title + } + every_vassal = { + limit = { + primary_title.tier >= scope:secondary_title.tier + NOT = { + primary_title.tier = tier_barony + } + } + change_liege = { + liege = title:d_zaba.holder + change = scope:change + } + } + } + } + + title:d_avaritana.holder = { + change_liege = { + liege = title:d_zaba.holder + change = scope:change + } + } + } + + resolve_title_and_vassal_change = scope:change + + title:d_avaritana.holder = { + destroy_title = title:d_avaritana + } + } + } + + on_invalidated_desc = msg_invalidate_war_title + + check_defender_inheritance_validity = no + + on_primary_attacker_death = inherit + on_primary_defender_death = inherit + + attacker_allies_inherit = yes + defender_allies_inherit = yes + + transfer_behavior = transfer + + war_name = "INDEPENDENCE_WAR_NAME" + + interface_priority = 120 + + attacker_wargoal_percentage = 0.8 + + max_attacker_score_from_battles = 100 + max_defender_score_from_battles = 50 + + max_defender_score_from_occupation = 150 + max_attacker_score_from_occupation = 150 + + max_ai_diplo_distance_to_title = 500 +} + } +} + +"common/scripted_effects/TFE_invasion_effects.txt" = { + { +lost_radagaisus_invasion_effect = { + if = { + limit = { + exists = title:k_goths.holder + } + title:k_goths.holder = { + if = { # Imprison them if they aren't imprisoned. + limit = { + is_imprisoned = no + character:900062 = { + is_alive = yes + } + } + + hard_imprison_character_effect = { + TARGET = this + IMPRISONER = character:900062 + } + trigger_event = { + id = gothic_wars.0016 + days = 7 + } + } + else = { + limit = { + is_imprisoned = no + } + hard_imprison_character_effect = { + TARGET = this + IMPRISONER = scope:defender + } + } + } + } +} + } +} + +"common\decisions\TFE_major_decisions_south_asia.txt" = { + { +# Restore the main branch of the Vakataka Dynasty + +reclaim_vakataka_decision = { + picture = { + reference = "gfx/interface/illustrations/decisions/decision_dynasty_house.dds" + } + decision_group_type = major + + desc = reclaim_vakataka_decision_desc + selection_tooltip = reclaim_vakataka_decision_tooltip + + ai_check_interval = 120 + + is_shown = { + dynasty = dynasty:900024 + NOT = { house = character:900900.house } #Not a member of the OG Vakatakas + NOT = { + is_target_in_global_variable_list = { + name = unavailable_unique_decisions + target = flag:reclaim_vakataka_decision + } + } + } + + is_valid = { + is_independent_ruler = yes + prestige_level >= 4 + completely_controls = title:k_maharastra + completely_controls = title:k_telingana + completely_controls = title:k_karnata + } + + is_valid_showing_failures_only = { + is_available_adult = yes + is_landed_or_landless_administrative = yes + } + + cost = { + prestige = 850 + piety = 500 + } + + effect = { + hidden_effect = { ROOT.house = { every_house_member = { set_house = character:900900.house } } } + set_house = character:900900.house + add_pressed_claim = title:e_deccan + add_pressed_claim = title:k_gondwana + add_pressed_claim = title:d_jejakabhukti + add_pressed_claim = title:d_akara_dasarna + save_scope_as = founder + trigger_event = { + id = tfe_south_asia_decision.2001 + } + #Notify other Vakatakas + every_player = { + limit = { + dynasty = dynasty:900024 + } + trigger_event = tfe_south_asia_decision.2002 + } + } + + hidden_effect = { + add_to_global_variable_list = { + name = unavailable_unique_decisions + target = flag:reclaim_vakataka_decision + } + } + + ai_potential = { + always = yes + } + + ai_will_do = { + base = 100 + } +} + } + { +#Restore the Three Crowned Kings +muvendhar_restoration_decision = { + picture = { + reference = "gfx/interface/illustrations/decisions/decision_dynasty_house.dds" + } + decision_group_type = cultural + + desc = muvendhar_restoration_decision_desc + selection_tooltip = muvendhar_restoration_decision_tooltip + + ai_check_interval = 120 + + is_shown = { + is_ruler = yes + is_landed_or_landless_administrative = yes + OR = { + culture = culture:tamil + culture = culture:malaiya + culture = culture:sinhala + culture = { any_parent_culture_or_above = { this = culture:tamil }} culture = { any_parent_culture_or_above = { this = culture:malaiya }} culture = { any_parent_culture_or_above = { this = culture:sinhala }} } - NOT = { - is_target_in_global_variable_list = { - name = unavailable_unique_decisions - target = flag:muvendhar_restoration_decision - } + NOT = { + is_target_in_global_variable_list = { + name = unavailable_unique_decisions + target = flag:muvendhar_restoration_decision + } + } + } + + is_valid = { + is_independent_ruler = yes + has_title = title:k_tamilakam + prestige_level >= 3 + title:d_chola_nadu.holder.dynasty = dynasty:1043008 + title:d_pandya_nadu.holder.dynasty = dynasty:1043009 + title:d_chera_nadu.holder.dynasty = dynasty:1043010 + NOT = { dynasty = dynasty:900026 } + completely_controls = title:d_chola_nadu + completely_controls = title:d_pandya_nadu + completely_controls = title:d_chera_nadu + } + + is_valid_showing_failures_only = { + is_capable_adult = yes + is_imprisoned = no + is_at_war = no + } + + cost = { + prestige = 750 + piety = 500 + } + + effect = { + if = { + limit = { + NOR = { + dynasty = dynasty:1043008 + dynasty = dynasty:1043009 + dynasty = dynasty:1043010 + } + } + dynasty = { add_dynasty_prestige = 500 } + } + dynasty:1043008 = { add_dynasty_prestige = 500 } + dynasty:1043009 = { add_dynasty_prestige = 500 } + dynasty:1043010 = { add_dynasty_prestige = 500 } + save_scope_as = founder + trigger_event = tfe_south_asia_decision.4001 + hidden_effect = { + add_to_global_variable_list = { + name = unavailable_unique_decisions + target = flag:muvendhar_restoration_decision + } + } + } + + ai_potential = { + always = yes + } + + ai_will_do = { + base = 100 + } +} + } +} + +"common\decisions\TFE_rome_decisions.txt" = { + { +recall_belisarius = { + picture = { + reference = "gfx/interface/illustrations/decisions/decision_roman_knight.dds" + } + decision_group_type = roman + + ai_check_interval = 6 + + desc = recall_belisarius_desc + selection_tooltip = recall_belisarius_tooltip + + is_shown = { + NOT = { + is_target_in_global_variable_list = { + name = unavailable_unique_decisions + target = flag:recall_belisarius + } + } + #OR = { + # root = global_var:justinian + # has_trait = paranoid + #} + has_global_variable = vandalic_war_won + current_date >= 530.1.1 + current_date <= 600.1.1 + OR = { + has_title = title:e_byzantium + has_title = title:e_roman_empire + } + exists = title:k_africae.holder + title:k_africae.holder = { + is_vassal_of = root + } + game_start_date = 532.2.1 + } + + is_valid = { + character:belisarius_001 = title:k_africae.holder + } + + effect = { + root = { + save_scope_as = emperor + } + title:k_africae.holder = { + save_scope_as = belisarius + } + custom_tooltip = recall_belisarius_warning + character:belisarius_001 = { + add_opinion = { + modifier = angry_opinion + target = root + opinion = -20 + } + trigger_event = { + id = western_roman.0044 + days = 1 + } + } + add_to_global_variable_list = { + name = unavailable_unique_decisions + target = flag:recall_belisarius + } + } + + cost = { + prestige = { + if = { + limit = { + is_ai = no + } + add = { + value = 500 + } + } + } + gold = { + if = { + limit = { + is_ai = no + } + add = { + value = 250 + } + } + } + } + + ai_potential = { + is_at_war = no + } + ai_will_do = { + base = 100 + } +} + } + + { +start_amalasuntha_coup = { + picture = { + reference = "gfx/interface/illustrations/decisions/decision_destiny_goal.dds" + } + decision_group_type = roman + + ai_goal = yes + + desc = start_amalasuntha_coup_desc + selection_tooltip = start_amalasuntha_coup_tooltip + + is_shown = { + OR = { + has_title = title:e_byzantium + has_title = title:e_roman_empire + } + NOT = { + exists = global_var:gothic_war_declared + } + exists = global_var:amalasuntha_coup_unlock + current_date >= 530.1.1 + current_date <= 600.1.1 + NOT = { + is_target_in_global_variable_list = { + name = unavailable_unique_decisions + target = flag:started_gothic_war + } + } + character:992020 = { + is_alive = yes + liege = title:k_ostrogoths.holder + } + title:k_ostrogoths.holder = { + has_active_diarchy = yes + diarch = character:992020 + } + game_start_date = 532.2.1 + } + + is_valid = { + trigger_if = { + limit = { + is_ai = yes + } + is_at_war = no + } + trigger_if = { + limit = { + is_ai = yes + character:belisarius_001 = { + is_ai = no + } + } + is_target_in_global_variable_list = { + name = unavailable_unique_decisions + target = flag:recall_belisarius + } + } + } + + effect = { + root = { + save_scope_as = emperor + trigger_event = { + id = germanic_events.0033 + days = 1 + } + } + custom_tooltip = gothic_war_belisarius_warning + add_to_global_variable_list = { + name = unavailable_unique_decisions + target = flag:started_gothic_war + } + } + + cost = { + prestige = { + if = { + limit = { + is_ai = no + } + add = { + value = 250 + } + } + } + } + + ai_potential = { + always = yes + } + ai_will_do = { + base = 100 + } +} + } + + { +vandalic_war = { + picture = { + reference = "gfx/interface/illustrations/decisions/decision_vandalic_war.dds" + } + decision_group_type = roman + + ai_check_interval = 12 + + desc = vandalic_war_desc + selection_tooltip = vandalic_war_tooltip + + is_shown = { + NOT = { + is_target_in_global_variable_list = { + name = unavailable_unique_decisions + target = flag:vandalic_war + } + } + exists = title:k_vandals + has_title = title:e_byzantium + current_date >= 530.1.1 + game_start_date = 532.2.1 + OR = { + character:vandals_005 = { + is_alive = yes + } + AND = { + current_date <= 550.1.1 + any_courtier = { + has_claim_on = title:k_vandals + } + } + } + } + + effect = { + custom_tooltip = vandalic_war_decision_1 + custom_tooltip = vandalic_war_decision_2 + custom_tooltip = vandalic_war_decision_3 + + hidden_effect = { + every_vassal = { + add_opinion = { + modifier = respect_opinion + target = root + opinion = -20 + } + } + add_to_global_variable_list = { + name = unavailable_unique_decisions + target = flag:vandalic_war + } + trigger_event = { + id = western_roman.0039 + days = 1 + } + } + } + + cost = { + prestige = { + if = { + limit = { + is_ai = no + } + add = { + value = 750 + } + } + } + gold = { + if = { + limit = { + is_ai = no + } + add = { + value = 250 + } + } + } + } + + ai_potential = { + always = yes + } + ai_will_do = { + base = 100 + } + +} + } +} + + +"common/decisions/tfe_culture_decisions.txt" = { + { +dong_zhuo_culture_decision = { + ai_check_interval = 0 + is_shown = { + has_game_rule = larp_enabled + NOT = { + culture = { + this = culture:soissons + } + } + dynasty = dynasty:syagri + game_start_date = 395.1.17 + } + is_valid = { + culture = { has_cultural_pillar = heritage_levantine } + custom_description = { + text = soissonstrigger1 + culture = { any_parent_culture_or_above = { this = culture:han } } + } + dynasty = dynasty:syagri + has_title = title:k_israel + custom_description = { + text = soissonstrigger2 + current_date = 690.4.20 + } + } + effect = { + save_scope_as = soi + #Convert your, and your whole family's, culture + set_culture = culture:soissons + add_prestige = 10000 + hidden_effect = { + if = { + limit = { any_spouse = { is_landed = no } } + every_spouse = { + limit = { + is_landed = no + } + set_culture = culture:soissons + } + } + if = { + limit = { + any_close_family_member = { + is_landed = no + NOT = { is_spouse_of = root } + } + } + every_close_family_member = { + limit = { + is_landed = no + NOT = { is_spouse_of = root } + } + custom = all_unlanded_family_members + set_culture = culture:soissons + } + } + + #Convert appropriate vassals, and their family + if = { + limit = { + any_vassal_or_below = { + is_ai = yes + } + } + every_vassal_or_below = { + limit = { + is_ai = yes + } + set_culture = culture:soissons + } + } + + #Flip Counties + every_realm_county = { + set_county_culture = culture:soissons + } + + culture:soissons = { + hidden_effect = { + reset_culture_creation_date = yes + get_all_innovations_from = culture:han + get_all_innovations_from = culture:hebrew + } + } + + trigger_event = tfe_culture.9900 + } + } + cost = { gold = 69 } +} + } +} + +"gfx/portraits/portrait_modifiers/00_custom_hair.txt" = { + { + modifier = { + add = 200 + exists = this + exists = character:easteregg_joe_parkin + this = character:easteregg_joe_parkin + } + modifier = { + add = 200 + exists = this + exists = character:easteregg_alessandro_bragalini + this = character:easteregg_alessandro_bragalini + } + } +} + +"gfx/portraits/portrait_modifiers/50_beards_scripted_characters.txt" = { + { +beards_scripted_characters = { + + usage = game + selection_behavior = max + + male_beard_western_01 = { # Standard full beard + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_01 + value = 0.04 # For the randomness to work correctly + } + } + weight = { + base = 0 + modifier = { + add = 999 + exists = this + exists = character:144998 #king_lothaire + this = character:144998 #king_lothaire + } + modifier = { + add = 999 + exists = this + exists = character:83355 #petty_king_murchad + this = character:83355 #petty_king_murchad + } + modifier = { + add = 999 + exists = this + exists = character:easteregg_petter_vilberg + this = character:easteregg_petter_vilberg + } + modifier = { + add = 999 + exists = this + exists = character:easteregg_james_beaumont + this = character:easteregg_james_beaumont + } + modifier = { + add = 999 + exists = this + exists = character:159038 #Coel + this = character:159038 #ACoel + } + modifier = { + add = 999 + exists = this + exists = character:900062 #Stilicho + this = character:900062 #Stilicho + } + modifier = { + add = 999 + exists = this + exists = character:180618 #Bahram + this = character:180618 #Bahram + } + modifier = { + add = 999 + exists = this + exists = character:83432 #Eochaid + this = character:83432 #Eochaid + } + modifier = { + add = 999 + exists = this + exists = character:londinium_01 #Riothamus + this = character:londinium_01 #Riothamus + } + modifier = { + add = 999 + exists = this + exists = character:vigg_04 #Hengest + this = character:vigg_04 #Hengest + } + modifier = { + add = 999 + exists = this + exists = character:constantinus_05 #Ambrosius + this = character:constantinus_05 #Ambrosius + } + modifier = { + add = 999 + exists = this + exists = character:cappadocia_07 #Ioannes + this = character:cappadocia_07 #Ioannes + } + modifier = { + add = 999 + exists = this + exists = character:mauri_42 #Iabdas + this = character:mauri_42 #Iabdas + } + modifier = { + add = 999 + exists = this + exists = character:997011 #Chlodomir + this = character:997011 #Chlodomir + } + } + } + + male_beard_western_02 = { # Standard goatee + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_01 + value = 0.07 # For the randomness to work correctly + } + } + weight = { + base = 0 + modifier = { + add = 999 + exists = this + exists = character:107500 #king_sancho + this = character:107500 #king_sancho + } + modifier = { + add = 999 + exists = this + exists = character:42018 #karlmann + this = character:42018 #karlmann + } + modifier = { + add = 999 + exists = this + exists = character:991004 #Mundus + this = character:991004 #Mundus + } + } + } + + male_beard_western_03 = { # Short beard + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_01 + value = 0.11 # For the randomness to work correctly + } + } + weight = { + base = 0 + modifier = { + add = 999 + exists = this + exists = character:163110 #sigurdr_snake_in_the_eye + this = character:163110 #sigurdr_snake_in_the_eye + } + modifier = { + add = 999 + exists = this + exists = character:90104 #charles_the_bald + this = character:90104 #charles_the_bald + } + modifier = { + add = 999 + exists = this + exists = character:109500 #king_garcia + this = character:109500 #king_garcia + } + modifier = { + add = 999 + exists = this + exists = character:easteregg_henrik_fahraeus + this = character:easteregg_henrik_fahraeus + } + modifier = { + add = 999 + exists = this + exists = character:easteregg_olof_bjork + this = character:easteregg_olof_bjork + } + modifier = { + add = 999 + exists = this + exists = character:easteregg_sean_hughes + this = character:easteregg_sean_hughes + } + modifier = { + add = 999 + exists = this + exists = character:easteregg_maximilian_olbers + this = character:easteregg_maximilian_olbers + } + modifier = { + add = 999 + exists = this + exists = character:easteregg_nikolaos_kaltsogiannis + this = character:easteregg_nikolaos_kaltsogiannis + } + } + } + + male_beard_western_04 = { # Short goatee + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_01 + value = 0.14 # For the randomness to work correctly + } + } + weight = { + base = 0 + modifier = { + add = 999 + exists = this + exists = character:easteregg_nils_wadensten + this = character:easteregg_nils_wadensten + } + modifier = { + add = 999 + exists = this + exists = character:waegmunding_2 #Beowulf + this = character:waegmunding_2 #Beowulf + } + } + } + + male_beard_western_05 = { # Mustache + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_01 + value = 0.17 # For the randomness to work correctly + } + } + weight = { + base = 0 + modifier = { + add = 999 + exists = this + exists = character:122 #king_harold + this = character:122 #king_harold + } + modifier = { + add = 999 + exists = this + exists = character:1128 #duke_robert + this = character:1128 #duke_robert + } + modifier = { + add = 999 + exists = this + exists = character:992016 #theodoric_the_great + this = character:992016 #theodoric_the_great + } + modifier = { + add = 999 + exists = this + exists = character:992022 #Theodahad + this = character:992022 #Theodahad + } + modifier = { + add = 999 + exists = this + exists = character:997003 #Merovech + this = character:997003 #Merovech + } + } + } + + male_beard_western_06 = { # Big bushy beard + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_01 + value = 0.2 # For the randomness to work correctly + } + } + weight = { + base = 0 + modifier = { + add = 999 + exists = this + exists = character:106000 #king_antso + this = character:106000 #king_antso + } + modifier = { + add = 999 + exists = this + exists = character:easteregg_paul_depre + this = character:easteregg_paul_depre + } + modifier = { + add = 999 + exists = this + exists = character:999103 #Alaric I + this = character:999103 #Alaric I + } + modifier = { + add = 999 + exists = this + exists = character:997002 #Chlodio + this = character:997002 #Chlodio + } + } + } + + male_beard_western_07 = { # Chin strap + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_01 + value = 0.23 # For the randomness to work correctly + } + } + weight = { + base = 0 + modifier = { + add = 999 + exists = this + exists = character:997004 #Childeric + this = character:997004 #Childeric + } + } + } + + male_beard_western_08 = { # Big with fancy mustache + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_01 + value = 0.27 # For the randomness to work correctly + } + } + weight = { + base = 0 + modifier = { + add = 999 + exists = this + exists = character:984 #king_malcom + this = character:984 #king_malcom + } + modifier = { + add = 999 + exists = this + exists = character:easteregg_max_weltz + this = character:easteregg_max_weltz + } + modifier = { + add = 999 + exists = this + exists = character:arsacid_58 #vramshapuh + this = character:arsacid_58 #vramshapuh + } + modifier = { + add = 999 + exists = this + exists = character:145071 #Heraclius + this = character:145071 #Heraclius + } + } + } + + male_beard_western_09 = { # Pointy beard + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_01 + value = 0.30 # For the randomness to work correctly + } + } + weight = { + base = 0 + modifier = { + add = 999 + exists = this + exists = character:159431 #Conan Meriadoc + this = character:159431 #Conan Meriadoc + } + modifier = { + add = 999 + exists = this + exists = character:maldras_06 #Hermenerich + this = character:maldras_06 #Hermenerich + } + modifier = { + add = 999 + exists = this + exists = character:997009 #Theodoric Meroving + this = character:997009 #Theodoric Meroving + } + modifier = { + add = 999 + exists = this + exists = character:992063 #Fritigern + this = character:992063 #Fritigern + } + } + } + + male_beard_western_10 = { # Chin goatee + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_01 + value = 0.33 # For the randomness to work correctly + } + } + weight = { + base = 0 + } + } + + male_beard_mena_01 = { # Very curly medium length full beard + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_01 + value = 0.35 # For the randomness to work correctly + } + } + weight = { + base = 0 + + modifier = { + add = 999 + exists = this + exists = character:982001 #Abu Karib + this = character:982001 #Abu Karib + } + } + } + + male_beard_mena_02 = { # Big with small mustache + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_01 + value = 0.39 # For the randomness to work correctly + } + } + weight = { + base = 0 + modifier = { + add = 999 + exists = this + exists = character:3924 #emir_yahya + this = character:3924 #emir_yahya + } + modifier = { + add = 999 + exists = this + exists = character:lakhmid_06 #al-Nu'Man + this = character:lakhmid_06 #al-Nu'Man + } + modifier = { + add = 999 + exists = this + exists = character:rugian_03 #Feletheus + this = character:rugian_03 #Feletheus + } + } + } + + male_beard_mena_03 = { # Big chin strap + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_01 + value = 0.42 # For the randomness to work correctly + } + } + weight = { + base = 0 + } + } + + male_beard_mena_04 = { # Short stylish + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_01 + value = 0.45 # For the randomness to work correctly + } + } + weight = { + base = 0 + modifier = { + add = 999 + exists = this + exists = character:quadi_04 # Hermerich of the Quadi + this = character:quadi_04 # Hermerich of the Quadi + } + modifier = { + add = 999 + exists = this + exists = character:syagri_06 #Syagrus + this = character:syagri_06 #Syagrus + } + modifier = { + add = 999 + exists = this + exists = character:997005 #Chlodovech + this = character:997005 #Chlodovech + } + modifier = { + add = 999 + exists = this + exists = character:belisarius_001 #Belisarius + this = character:belisarius_001 #Belisarius + } + } + } + + male_beard_northern_01 = { # Big wide + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_01 + value = 0.48 # For the randomness to work correctly + } + } + weight = { + base = 0 + modifier = { + add = 999 + exists = this + exists = character:163111 #ivar_the_boneless + this = character:163111 #ivar_the_boneless + } + modifier = { + add = 999 + exists = this + exists = character:102531 #harald_hardrade + this = character:102531 #harald_hardrade + } + } + } + + male_beard_northern_02 = { # Single braid + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_01 + value = 0.52 # For the randomness to work correctly + } + } + weight = { + base = 0 + modifier = { + add = 999 + exists = this + exists = character:163112 #halfdan_whiteshirt + this = character:163112 #halfdan_whiteshirt + } + } + weight = { + base = 0 + modifier = { + add = 999 + exists = this + exists = character:6878 #jarl_haesteinn + this = character:6878 #jarl_haesteinn + } + } + } + + male_beard_northern_03 = { # Beaded beard + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_01 + value = 0.54 # For the randomness to work correctly + } + } + weight = { + base = 0 + modifier = { + add = 999 + exists = this + exists = character:163108 #bjorn_ironside + this = character:163108 #bjorn_ironside + } + modifier = { + add = 999 + exists = this + exists = character:40605 #rurik + this = character:40605 #rurik + } + modifier = { + add = 999 + exists = this + exists = character:easteregg_peter_johannesson + this = character:easteregg_peter_johannesson + } + modifier = { + add = 999 + exists = character:997013 #Chlothar + this = character:997013 #Chlothar + } + } + } + + male_beard_steppe_01 = { # long at chin with mustache + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_01 + value = 0.58 # For the randomness to work correctly + } + } + weight = { + base = 0 + modifier = { + add = 999 + exists = character:ashina_03 #Tuwu + this = character:ashina_03 #Tuwu + } + modifier = { + add = 999 + exists = character:ashina_04 #Bumin + this = character:ashina_04 #Bumin + } + } + } + + male_beard_steppe_02 = { # low rough + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_01 + value = 0.61 # For the randomness to work correctly + } + } + weight = { + base = 0 + modifier = { + add = 999 + exists = this + exists = character:159137 #almos_arpad + this = character:159137 #almos_arpad + } + modifier = { + add = 999 + exists = character:990006 #Attila + this = character:990006 #Attila + } + modifier = { + add = 999 + exists = character:ashina_05 #Istemi + this = character:ashina_05 #Istemi + } + modifier = { + add = 999 + exists = this + exists = character:hephthalite_misc_017 #Katulf + this = character:hephthalite_misc_017 #Katulf + } + } + } + + male_beard_sub_saharan_01 = { # Full african beard medium + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_01 + value = 0.64 # For the randomness to work correctly + } + } + weight = { + base = 0 + } + weight = { + base = 0 + modifier = { + add = 999 + exists = this + exists = character:nuvelan_11 #Gildo + this = character:nuvelan_11 #Gildo + } + modifier = { + add = 999 + exists = this + exists = character:aksum_16 #Ouazeba + this = character:aksum_16 #Ouazeba } + modifier = { + add = 999 + exists = this + exists = character:himyarite_30 #Abraha + this = character:himyarite_30 #Abraha + } } - - is_valid = { - is_independent_ruler = yes - has_title = title:k_tamilakam - prestige_level >= 3 - title:d_chola_nadu.holder.dynasty = dynasty:1043008 - title:d_pandya_nadu.holder.dynasty = dynasty:1043009 - title:d_chera_nadu.holder.dynasty = dynasty:1043010 - NOT = { dynasty = dynasty:900026 } - completely_controls = title:d_chola_nadu - completely_controls = title:d_pandya_nadu - completely_controls = title:d_chera_nadu - } + } + + male_beard_sub_saharan_02 = { # Stylish african goatee + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_01 + value = 0.67 # For the randomness to work correctly + } + } + weight = { + base = 0 + modifier = { + add = 999 + exists = this + exists = character:aksum_17 #eon + this = character:aksum_17 #eon + } + } + } + + male_beard_sub_saharan_03 = { # Full african beard long + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_01 + value = 0.70 # For the randomness to work correctly + } + } + weight = { + base = 0 + } + } + + male_beard_indian_01 = { # Handlebar mustache + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_01 + value = 0.74 # For the randomness to work correctly + } + } + weight = { + base = 0 + modifier = { + add = 999 + exists = this + exists = character:easteregg_struan_mccallum + this = character:easteregg_struan_mccallum + } + modifier = { + add = 999 + exists = this + exists = character:alchonid_005 #Khingila + this = character:alchonid_005 #Khingila + } + modifier = { + add = 999 + exists = this + exists = character:arsacid_64 #Mystakon + this = character:arsacid_64 #Mystakon + } + } + } + + male_beard_indian_02 = { # Indian pointy + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_01 + value = 0.77 # For the randomness to work correctly + } + } + weight = { + base = 0 + modifier = { + add = 999 + exists = this + exists = character:900016 #Faramund + this = character:900016 #Faramund + } + modifier = { + add = 999 + exists = this + exists = character:xionite_001 #Kidara + this = character:xionite_001 #Kidara + } + modifier = { + add = 999 + exists = this + exists = character:145072 #Focas + this = character:145072 #Focas + } + modifier = { + add = 999 + exists = this + exists = character:greek_17 #Plutarch + this = character:greek_17 #Plutarch + } + } + } + + male_beard_indian_03 = { # Very curly medium length full beard + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_01 + value = 0.80 # For the randomness to work correctly + } + } + weight = { + base = 0 + + } + } + + male_beard_rtt_01 = { # Wizard beard + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_01 + value = 0.0 # For the randomness to work correctly + } + } + weight = { + base = 0 + } + } + + ### FP2 Beards ### + + male_beard_fp2_iberian_christian_01 = { # Twin braids with metal rings + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_02 + value = 0.11 # For the randomness to work correctly + } + } + weight = { + base = 0 + } + } + + male_beard_fp2_iberian_christian_02 = { # Twin braids with metal rings + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_02 + value = 0.235 # For the randomness to work correctly + } + } + weight = { + base = 0 + modifier = { + add = 999 + exists = this + exists = character:996002 #Odovacar + this = character:996002 #Odovacar + } + modifier = { + add = 999 + exists = this + exists = character:168137 + this = character:168137 + } + + modifier = { + add = 999 + exists = this + exists = character:70292 + this = character:70292 + } + } + } + + male_beard_fp2_iberian_christian_03 = { # Twin braids with metal rings + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_02 + value = 0.36 # For the randomness to work correctly + } + } + weight = { + base = 0 + + modifier = { + add = 999 + exists = this + exists = character:73813 + this = character:73813 + } - is_valid_showing_failures_only = { - is_capable_adult = yes - is_imprisoned = no - is_at_war = no - } + modifier = { + add = 999 + exists = this + exists = character:surunbaqi0001 + this = character:surunbaqi0001 + } + } + } - cost = { - prestige = 750 - piety = 500 - } + male_beard_fp2_iberian_christian_04 = { + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_02 + value = 0.485 # For the randomness to work correctly + } + } + weight = { + base = 0 - effect = { - if = { - limit = { - NOR = { - dynasty = dynasty:1043008 - dynasty = dynasty:1043009 - dynasty = dynasty:1043010 - } - } - dynasty = { add_dynasty_prestige = 500 } - } - dynasty:1043008 = { add_dynasty_prestige = 500 } - dynasty:1043009 = { add_dynasty_prestige = 500 } - dynasty:1043010 = { add_dynasty_prestige = 500 } - save_scope_as = founder - trigger_event = tfe_south_asia_decision.4001 - hidden_effect = { - add_to_global_variable_list = { - name = unavailable_unique_decisions - target = flag:muvendhar_restoration_decision - } - } - } - - ai_potential = { - always = yes - } + modifier = { + add = 999 + exists = this + exists = character:barcelona_00003 + this = character:barcelona_00003 + } + modifier = { + add = 999 + exists = this + exists = character:200280 #Theodis + this = character:200280 #Theodis + } + modifier = { + add = 999 + exists = this + exists = character:997015 #Theodobert + this = character:997015 #Theodobert + } + } + } - ai_will_do = { - base = 100 - } -} - } -} + male_beard_fp2_iberian_muslim_01 = { # Thick Groomed Beard + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_02 + value = 0.61 # For the randomness to work correctly + } + } + weight = { + base = 0 -"common\decisions\TFE_rome_decisions.txt" = { - { -recall_belisarius = { - picture = "gfx/interface/illustrations/decisions/decision_roman_knight.dds" - major = yes + modifier = { + add = 999 + exists = this + exists = character:70150 + this = character:70150 + } - ai_check_interval = 12 + modifier = { + add = 999 + exists = this + exists = character:180628 #Khosrau + this = character:180628 #Khosrau + } - desc = recall_belisarius_desc - selection_tooltip = recall_belisarius_tooltip + modifier = { + add = 999 + exists = this + exists = character:73683 + this = character:73683 + } + modifier = { + add = 999 + exists = this + exists = character:200284 #euric + this = character:200284 #euric + } + modifier = { + add = 999 + exists = this + exists = character:aelling_01 #Aelle + this = character:aelling_01 #Aelle + } + modifier = { + add = 999 + exists = this + exists = character:159012 #Cadwallon + this = character:159012 #Cadwallon + } + } + } - is_shown = { - NOT = { - is_target_in_global_variable_list = { - name = unavailable_unique_decisions - target = flag:recall_belisarius - } - } - OR = { - root = global_var:justinian - has_trait = paranoid - } - has_global_variable = vandalic_war_won - current_date >= 530.1.1 - current_date <= 600.1.1 - character:belisarius_001 = title:k_africae.holder - game_start_date = 532.2.1 - } + male_beard_fp2_iberian_muslim_02 = { # Scholar's beard + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_02 + value = 0.735 # For the randomness to work correctly + } + } + weight = { + base = 0 - is_valid = { - OR = { - has_title = title:e_byzantium - has_title = title:e_roman_empire - } - exists = title:k_africae.holder - title:k_africae.holder = { - is_vassal_of = root - } - } + modifier = { + add = 999 + exists = this + exists = character:danis0005 + this = character:danis0005 + } + modifier = { + add = 999 + exists = this + exists = character:vandals_003 + this = character:vandals_003 + } + modifier = { + add = 999 + exists = this + exists = character:145237 #julian_the_apostate + this = character:145237 #julian_the_apostate + } + modifier = { + add = 999 + exists = this + exists = character:greek_20 #Proklos + this = character:greek_20 #Proklos + } + } + } - effect = { - root = { - save_scope_as = emperor - } - title:k_africae.holder = { - save_scope_as = belisarius - } - custom_tooltip = recall_belisarius_warning - character:belisarius_001 = { - add_opinion = { - modifier = angry_opinion - target = root - opinion = -20 - } - trigger_event = { - id = western_roman.0044 - days = 1 - } - } - add_to_global_variable_list = { - name = unavailable_unique_decisions - target = flag:recall_belisarius - } - } - cost = { - prestige = { - if = { - limit = { - is_ai = no - } - add = { - value = 500 - } - } - } - gold = { - if = { - limit = { - is_ai = no - } - add = { - value = 250 - } - } - } - } - ai_potential = { - is_at_war = no - } - ai_will_do = { - base = 100 - } + male_beard_fp2_iberian_muslim_03 = { # Forked beard + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_02 + value = 0.860 # For the randomness to work correctly + } + } + weight = { + base = 0 + modifier = { + add = 999 + exists = this + exists = character:mauri_36 #Masties + this = character:mauri_36 #Masties + } + } + } + + no_beard = { + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_02 + value = 1 # For the randomness to work correctly + } + } + weight = { + base = 0 + modifier = { + add = 999 + exists = this + exists = character:73857 + this = character:73857 + } + modifier = { + add = 999 + exists = this + exists = character:nepos_02 #Nepos + this = character:nepos_02 #Nepos + } + modifier = { + add = 999 + exists = this + exists = character:70512 #Justinian + this = character:70512 #Justinian + } + modifier = { + add = 999 + exists = this + exists = character:205141 #Ceredig + this = character:205141 #Ceredig + } + modifier = { + add = 999 + exists = this + exists = character:vandals_005 #Hilderic + this = character:vandals_005 #Hilderic + } + modifier = { + add = 999 + exists = this + exists = character:vandals_012 #Gelimer + this = character:vandals_012 #Gelimer + } + modifier = { + add = 999 + exists = this + exists = character:992023 #Athalaric + this = character:992023 #Athalaric + } + modifier = { + add = 999 + exists = this + exists = character:70515 #Zeno + this = character:70515 #Zeno + } + modifier = { + add = 999 + exists = this + exists = character:70517 #Leo + this = character:70517 #Leo + } + modifier = { + add = 999 + exists = this + exists = character:70514 #Anastasius + this = character:70514 #Anastasius + } + modifier = { + add = 999 + exists = this + exists = character:armenian_01 #Narses + this = character:armenian_01 #Narses + } + modifier = { + add = 999 + exists = this + exists = character:mauro_roman_kings_02 #Massonas + this = character:mauro_roman_kings_02 #Massonas + } + modifier = { + add = 999 + exists = this + exists = character:samo_01 #Samo + this = character:samo_01 #Samo + } + } + } + + + ### FP1 Beards ### + male_beard_fp1_01 = { # Twin braids with metal rings + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_01 + value = 0.84 # For the randomness to work correctly + } + } + weight = { + base = 0 + } + } + + male_beard_fp1_02 = { # Short low beard + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_01 + value = 0.1 # For the randomness to work correctly + } + } + weight = { + base = 0 + modifier = { + add = 999 + exists = this + exists = character:159117 #Kubrat + this = character:159117 #Kubrat + } + } + } + + male_beard_fp1_03 = { # Wavy pointy beard + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_01 + value = 0.90 # For the randomness to work correctly + } + } + weight = { + base = 0 + + } + } + + male_beard_fp1_04 = { # Huge braid + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_01 + value = 0.94 # For the randomness to work correctly + } + } + weight = { + base = 0 + } + } + + male_beard_fp1_05 = { # Long narrow wavy + dna_modifiers = { + accessory = { + mode = add + gene = beards + template = scripted_character_beards_01 + value = 0.97 # For the randomness to work correctly + } + } + weight = { + base = 0 + modifier = { + add = 999 + exists = this + exists = character:997012 #Childebert + this = character:997012 #Childebert + } + modifier = { + add = 999 + exists = this + exists = character:992003 #Hermanaric + this = character:992003 #Hermanaric + } + } + } } } - - { -start_amalasuntha_coup = { - picture = "gfx/interface/illustrations/decisions/decision_destiny_goal.dds" - major = yes +} - ai_check_interval = 1 +"gfx/portraits/portrait_modifiers/50_headgear_scripted_characters.txt" = { + { +headgear_scripted_characters = { - desc = start_amalasuntha_coup_desc - selection_tooltip = start_amalasuntha_coup_tooltip + usage = game + selection_behavior = max + priority = 10 - is_shown = { - OR = { - has_title = title:e_byzantium - has_title = title:e_roman_empire + no_headgear = { # No headgear + dna_modifiers = { + accessory = { + mode = add + gene = headgear + template = fp2_scripted_headgear_01 + value = 0.1 # For the randomness to work correctly + } + } + weight = { + base = 0 + modifier = { + add = 50 + exists = this + exists = character:73857 + this = character:73857 } - NOT = { - exists = global_var:gothic_war_declared + modifier = { + add = 50 + exists = this + exists = character:108501 + this = character:108501 } - exists = global_var:amalasuntha_coup_unlock - current_date >= 530.1.1 - current_date <= 600.1.1 - NOT = { - is_target_in_global_variable_list = { - name = unavailable_unique_decisions - target = flag:started_gothic_war - } + modifier = { + add = 999 + exists = this + exists = character:900062 #Stilicho + this = character:900062 #Stilicho } - character:992020 = { - is_alive = yes - liege = title:k_ostrogoths.holder + modifier = { + add = 999 + exists = this + exists = character:nuvelan_11 #Gildo + this = character:nuvelan_11 #Gildo } - title:k_ostrogoths.holder = { - has_active_diarchy = yes - diarch = character:992020 + modifier = { + add = 999 + exists = this + exists = character:belisarius_001 #Belisarius + this = character:belisarius_001 #Belisarius } - game_start_date = 532.2.1 - } + } + } - is_valid = { - trigger_if = { - limit = { - is_ai = yes + male_headgear_secular_fp2_iberian_muslim_common_01_low = { + dna_modifiers = { + accessory = { + mode = add + gene = headgear + template = fp2_scripted_headgear_01 + value = 0.5 # For the randomness to work correctly + } + } + weight = { + base = 0 + modifier = { + add = 50 + exists = this + exists = character:73813 # Musa + this = character:73813 } - is_at_war = no } - trigger_if = { - limit = { - is_ai = yes - character:belisarius_001 = { - is_ai = no - } - } - is_target_in_global_variable_list = { - name = unavailable_unique_decisions - target = flag:recall_belisarius + } + + male_headgear_secular_fp2_iberian_muslim_high_nobility_01 = { + dna_modifiers = { + accessory = { + mode = add + gene = headgear + template = fp2_scripted_headgear_01 + value = 1 # For the randomness to work correctly + } + } + weight = { + base = 0 + modifier = { + add = 50 + exists = this + exists = character:danis0005 # Adanis + this = character:danis0005 } } } - - effect = { - root = { - save_scope_as = emperor - trigger_event = { - id = germanic_events.0033 - days = 1 + male_headgear_secular_roman_pannonian_hat_high_nobility = { + dna_modifiers = { + accessory = { + mode = add + gene = headgear + template = roman_pannonian_hat_high + value = 1 } } - custom_tooltip = gothic_war_belisarius_warning - add_to_global_variable_list = { - name = unavailable_unique_decisions - target = flag:started_gothic_war + weight = { + base = 0 + modifier = { + add = 999 + exists = this + exists = character:nepos_02 #Nepos + this = character:nepos_02 #Nepos + } } - } - - cost = { - prestige = { - if = { - limit = { - is_ai = no - } - add = { - value = 250 - } + weight = { + base = 0 + modifier = { + add = 999 + exists = this + exists = character:syagri_06 #Syagrius + this = character:syagri_06 #Syagrius } } } - - ai_potential = { - always = yes - } - ai_will_do = { - base = 100 - } -} - - } - - { -vandalic_war = { - picture = "gfx/interface/illustrations/decisions/decision_vandalic_war.dds" - major = yes - - ai_check_interval = 12 - - desc = vandalic_war_desc - selection_tooltip = vandalic_war_tooltip - - is_shown = { - NOT = { - is_target_in_global_variable_list = { - name = unavailable_unique_decisions - target = flag:vandalic_war + male_headgear_secular_western_high_nobility = { + dna_modifiers = { + accessory = { + mode = add + gene = headgear + template = western_high_nobility + value = 1 } } - exists = title:k_vandals - has_title = title:e_byzantium - current_date >= 530.1.1 - game_start_date = 532.2.1 - OR = { - character:vandals_005 = { - is_alive = yes - } - AND = { - current_date <= 550.1.1 - any_courtier = { - has_claim_on = title:k_vandals - } + weight = { + base = 0 + modifier = { + add = 999 + exists = this + exists = character:900016 #Faramund + this = character:900016 #Faramund } } } - - effect = { - custom_tooltip = vandalic_war_decision_1 - custom_tooltip = vandalic_war_decision_2 - custom_tooltip = vandalic_war_decision_3 - - hidden_effect = { - every_vassal = { - add_opinion = { - modifier = respect_opinion - target = root - opinion = -20 - } - } - add_to_global_variable_list = { - name = unavailable_unique_decisions - target = flag:vandalic_war + male_headgear_secular_roman_diadem = { + dna_modifiers = { + accessory = { + mode = add + gene = headgear + template = roman_diadem + value = 1 } - trigger_event = { - id = western_roman.0039 - days = 1 + } + weight = { + base = 0 + modifier = { + add = 999 + exists = this + exists = character:70515 #Zeno + this = character:70515 #Zeno } } } - - cost = { - prestige = { - if = { - limit = { - is_ai = no - } - add = { - value = 750 - } + male_headgear_secular_sassanid_crown = { + dna_modifiers = { + accessory = { + mode = add + gene = headgear + template = ep1_sassanid_crown + value = 1 } } - gold = { - if = { - limit = { - is_ai = no - } - add = { - value = 250 - } + weight = { + base = 0 + modifier = { + add = 999 + exists = this + exists = character:180628 #Khosrau + this = character:180628 #Khosrau } } } +} + } +} - ai_potential = { - is_at_war = no +"common/dna_data/00_dna_patrons.txt" = { + { +bitcoin_patron ={ + portrait_info={ + genes={ + hair_color={ 13 247 117 230 } + skin_color={ 159 149 199 103 } + eye_color={ 241 76 44 160 } + gene_chin_forward={ "chin_forward_neg" 125 "chin_forward_neg" 125 } + gene_chin_height={ "chin_height_neg" 114 "chin_height_neg" 114 } + gene_chin_width={ "chin_width_pos" 183 "chin_width_pos" 183 } + gene_eye_angle={ "eye_angle_pos" 133 "eye_angle_pos" 133 } + gene_eye_depth={ "eye_depth_neg" 119 "eye_depth_neg" 119 } + gene_eye_height={ "eye_height_pos" 131 "eye_height_pos" 131 } + gene_eye_distance={ "eye_distance_pos" 137 "eye_distance_pos" 137 } + gene_eye_shut={ "eye_shut_pos" 139 "eye_shut_pos" 139 } + gene_forehead_angle={ "forehead_angle_neg" 107 "forehead_angle_neg" 107 } + gene_forehead_brow_height={ "forehead_brow_height_neg" 105 "forehead_brow_height_neg" 105 } + gene_forehead_roundness={ "forehead_roundness_pos" 166 "forehead_roundness_pos" 166 } + gene_forehead_width={ "forehead_width_neg" 114 "forehead_width_neg" 114 } + gene_forehead_height={ "forehead_height_pos" 161 "forehead_height_pos" 161 } + gene_head_height={ "head_height_neg" 112 "head_height_neg" 86 } + gene_head_width={ "head_width_pos" 156 "head_width_pos" 131 } + gene_head_profile={ "head_profile_pos" 177 "head_profile_pos" 134 } + gene_head_top_height={ "head_top_height_pos" 0 "head_top_height_pos" 128 } + gene_head_top_width={ "head_top_width_pos" 125 "head_top_width_pos" 146 } + gene_jaw_angle={ "jaw_angle_neg" 105 "jaw_angle_neg" 105 } + gene_jaw_forward={ "jaw_forward_pos" 139 "jaw_forward_pos" 139 } + gene_jaw_height={ "jaw_height_pos" 129 "jaw_height_pos" 129 } + gene_jaw_width={ "jaw_width_neg" 101 "jaw_width_neg" 101 } + gene_mouth_corner_depth={ "mouth_corner_depth_pos" 130 "mouth_corner_depth_pos" 130 } + gene_mouth_corner_height={ "mouth_corner_height_neg" 127 "mouth_corner_height_neg" 127 } + gene_mouth_forward={ "mouth_forward_pos" 131 "mouth_forward_pos" 131 } + gene_mouth_height={ "mouth_height_neg" 114 "mouth_height_neg" 114 } + gene_mouth_width={ "mouth_width_pos" 137 "mouth_width_pos" 137 } + gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 151 "mouth_upper_lip_size_pos" 151 } + gene_mouth_lower_lip_size={ "mouth_lower_lip_size_neg" 91 "mouth_lower_lip_size_neg" 91 } + gene_mouth_open={ "mouth_open_neg" 115 "mouth_open_neg" 115 } + gene_neck_length={ "neck_length_neg" 141 "neck_length_neg" 76 } + gene_neck_width={ "neck_width_neg" 117 "neck_width_neg" 117 } + gene_bs_cheek_forward={ "cheek_forward_pos" 163 "cheek_forward_pos" 163 } + gene_bs_cheek_height={ "cheek_height_neg" 14 "cheek_height_neg" 14 } + gene_bs_cheek_width={ "cheek_width_neg" 9 "cheek_width_neg" 9 } + gene_bs_ear_angle={ "ear_angle_neg" 112 "ear_angle_neg" 112 } + gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 11 "ear_inner_shape_pos" 11 } + gene_bs_ear_bend={ "ear_upper_bend_pos" 35 "ear_upper_bend_pos" 35 } + gene_bs_ear_outward={ "ear_outward_pos" 7 "ear_outward_pos" 7 } + gene_bs_ear_size={ "ear_size_pos" 119 "ear_size_pos" 119 } + gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 243 "eye_corner_depth_pos" 243 } + gene_bs_eye_fold_shape={ "eye_fold_shape_pos" 149 "eye_fold_shape_pos" 149 } + gene_bs_eye_size={ "eye_size_neg" 37 "eye_size_neg" 37 } + gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 15 "eye_upper_lid_size_pos" 15 } + gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 48 "forehead_brow_curve_neg" 48 } + gene_bs_forehead_brow_forward={ "forehead_brow_forward_neg" 98 "forehead_brow_forward_neg" 98 } + gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_neg" 51 "forehead_brow_inner_height_neg" 51 } + gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 59 "forehead_brow_outer_height_pos" 59 } + gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 30 "forehead_brow_width_pos" 30 } + gene_bs_jaw_def={ "jaw_def_neg" 19 "jaw_def_neg" 19 } + gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 44 "mouth_lower_lip_def_pos" 44 } + gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 60 "mouth_lower_lip_full_pos" 60 } + gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_neg" 2 "mouth_lower_lip_pad_neg" 2 } + gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_pos" 14 "mouth_lower_lip_width_pos" 14 } + gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 51 "mouth_philtrum_def_pos" 51 } + gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_neg" 23 "mouth_philtrum_shape_neg" 23 } + gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_neg" 36 "mouth_philtrum_width_neg" 36 } + gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 33 "mouth_upper_lip_def_pos" 33 } + gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_pos" 24 "mouth_upper_lip_full_pos" 24 } + gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_neg" 99 "mouth_upper_lip_profile_neg" 99 } + gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_neg" 33 "mouth_upper_lip_width_neg" 33 } + gene_bs_nose_forward={ "nose_forward_pos" 255 "nose_forward_neg" 76 } + gene_bs_nose_height={ "nose_height_pos" 115 "nose_height_pos" 14 } + gene_bs_nose_length={ "nose_length_neg" 133 "nose_length_pos" 93 } + gene_bs_nose_nostril_height={ "nose_nostril_height_pos" 34 "nose_nostril_height_pos" 34 } + gene_bs_nose_nostril_width={ "nose_nostril_width_pos" 38 "nose_nostril_width_pos" 38 } + gene_bs_nose_profile={ "nose_profile_hawk" 62 "nose_profile_neg" 62 } + gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 25 "nose_ridge_angle_pos" 25 } + gene_bs_nose_ridge_width={ "nose_ridge_width_neg" 20 "nose_ridge_width_neg" 20 } + gene_bs_nose_size={ "nose_size_pos" 53 "nose_size_pos" 53 } + gene_bs_nose_tip_angle={ "nose_tip_angle_neg" 33 "nose_tip_angle_neg" 33 } + gene_bs_nose_tip_forward={ "nose_tip_forward_neg" 42 "nose_tip_forward_neg" 42 } + gene_bs_nose_tip_width={ "nose_tip_width_pos" 21 "nose_tip_width_pos" 21 } + face_detail_cheek_def={ "cheek_def_01" 39 "cheek_def_01" 39 } + face_detail_cheek_fat={ "cheek_fat_01_pos" 0 "cheek_fat_01_neg" 45 } + face_detail_chin_cleft={ "chin_dimple" 16 "chin_dimple" 16 } + face_detail_chin_def={ "chin_def_neg" 214 "chin_def_neg" 214 } + face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 119 "eye_lower_lid_def" 119 } + face_detail_eye_socket={ "eye_socket_03" 9 "eye_socket_03" 9 } + face_detail_nasolabial={ "nasolabial_01" 0 "nasolabial_01" 17 } + face_detail_nose_ridge_def={ "nose_ridge_def_pos" 1 "nose_ridge_def_pos" 1 } + face_detail_nose_tip_def={ "nose_tip_def" 205 "nose_tip_def" 205 } + face_detail_temple_def={ "temple_def" 244 "temple_def" 244 } + expression_brow_wrinkles={ "brow_wrinkles_02" 50 "brow_wrinkles_02" 50 } + expression_eye_wrinkles={ "eye_wrinkles_02" 175 "eye_wrinkles_02" 175 } + expression_forehead_wrinkles={ "forehead_wrinkles_03" 157 "forehead_wrinkles_03" 157 } + expression_other={ "cheek_wrinkles_both_01" 0 "cheek_wrinkles_both_01" 0 } + complexion={ "complexion_1" 255 "complexion_3" 168 } + gene_height={ "normal_height" 123 "normal_height" 123 } + gene_bs_body_type={ "body_fat_head_fat_full" 92 "body_fat_head_fat_full" 122 } + gene_bs_body_shape={ "body_shape_apple_half" 0 "body_shape_apple_half" 0 } + gene_bs_bust={ "bust_clothes" 204 "bust_shape_3_full" 161 } + gene_age={ "old_1" 225 "old_1" 225 } + gene_eyebrows_shape={ "far_spacing_avg_thickness" 248 "far_spacing_avg_thickness" 248 } + gene_eyebrows_fullness={ "layer_2_low_thickness" 149 "layer_2_low_thickness" 149 } + gene_body_hair={ "body_hair_avg" 95 "body_hair_avg" 95 } + gene_hair_type={ "hair_wavy" 168 "hair_wavy" 168 } + gene_baldness={ "no_baldness" 127 "no_baldness" 127 } + eye_accessory={ "normal_eyes" 18 "normal_eyes" 18 } + teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } + eyelashes_accessory={ "normal_eyelashes" 73 "normal_eyelashes" 73 } + hairstyles={ "western_hairstyles_straight" 42 "all_hairstyles" 0 } + beards={ "no_beard" 255 "no_beard" 0 } + clothes={ "western_bedchamber" 79 "most_clothes" 0 } + } } - ai_will_do = { - base = 100 + enabled = yes +} +cloverskeeper_winner={ + type=male + id=0 + genes={ hair_color={ 135 152 80 76 } + skin_color={ 60 80 60 80 } + eye_color={ 233 129 172 132 } + gene_chin_forward={ "chin_forward_neg" 137 "chin_forward_neg" 124 } + gene_chin_height={ "chin_height_neg" 114 "chin_height_neg" 95 } + gene_chin_width={ "chin_width_pos" 113 "chin_width_pos" 127 } + gene_eye_angle={ "eye_angle_pos" 128 "eye_angle_pos" 128 } + gene_eye_depth={ "eye_depth_neg" 135 "eye_depth_neg" 118 } + gene_eye_height={ "eye_height_neg" 122 "eye_height_neg" 122 } + gene_eye_distance={ "eye_distance_pos" 131 "eye_distance_pos" 131 } + gene_eye_shut={ "eye_shut_pos" 145 "eye_shut_pos" 145 } + gene_forehead_angle={ "forehead_angle_neg" 136 "forehead_angle_neg" 120 } + gene_forehead_brow_height={ "forehead_brow_height_neg" 90 "forehead_brow_height_neg" 120 } + gene_forehead_roundness={ "forehead_roundness_pos" 160 "forehead_roundness_pos" 160 } + gene_forehead_width={ "forehead_width_pos" 125 "forehead_width_pos" 131 } + gene_forehead_height={ "forehead_height_pos" 151 "forehead_height_pos" 132 } + gene_head_height={ "head_height_pos" 165 "head_height_pos" 165 } + gene_head_width={ "head_width_pos" 130 "head_width_pos" 151 } + gene_head_profile={ "head_profile_pos" 166 "head_profile_pos" 166 } + gene_head_top_height={ "head_top_height_pos" 128 "head_top_height_pos" 128 } + gene_head_top_width={ "head_top_width_pos" 122 "head_top_width_pos" 127 } + gene_jaw_angle={ "jaw_angle_pos" 172 "jaw_angle_pos" 128 } + gene_jaw_forward={ "jaw_forward_neg" 105 "jaw_forward_neg" 105 } + gene_jaw_height={ "jaw_height_pos" 126 "jaw_height_pos" 139 } + gene_jaw_width={ "jaw_width_pos" 120 "jaw_width_pos" 175 } + gene_mouth_corner_depth={ "mouth_corner_depth_neg" 116 "mouth_corner_depth_neg" 116 } + gene_mouth_corner_height={ "mouth_corner_height_pos" 160 "mouth_corner_height_pos" 160 } + gene_mouth_forward={ "mouth_forward_neg" 120 "mouth_forward_neg" 120 } + gene_mouth_height={ "mouth_height_pos" 152 "mouth_height_pos" 152 } + gene_mouth_width={ "mouth_width_neg" 121 "mouth_width_neg" 121 } + gene_mouth_upper_lip_size={ "mouth_upper_lip_size_neg" 87 "mouth_upper_lip_size_neg" 87 } + gene_mouth_lower_lip_size={ "mouth_lower_lip_size_neg" 118 "mouth_lower_lip_size_neg" 99 } + gene_mouth_open={ "mouth_open_pos" 152 "mouth_open_pos" 178 } + gene_neck_length={ "neck_length_pos" 134 "neck_length_pos" 134 } + gene_neck_width={ "neck_width_pos" 137 "neck_width_pos" 137 } + gene_bs_cheek_forward={ "cheek_forward_pos" 79 "cheek_forward_pos" 37 } + gene_bs_cheek_height={ "cheek_height_pos" 79 "cheek_height_neg" 35 } + gene_bs_cheek_width={ "cheek_width_neg" 53 "cheek_width_neg" 7 } + gene_bs_ear_angle={ "ear_angle_neg" 197 "ear_angle_neg" 33 } + gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 23 "ear_inner_shape_pos" 23 } + gene_bs_ear_bend={ "ear_both_bend_pos" 4 "ear_upper_bend_pos" 125 } + gene_bs_ear_outward={ "ear_outward_pos" 45 "ear_outward_pos" 34 } + gene_bs_ear_size={ "ear_size_pos" 63 "ear_size_pos" 50 } + gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 51 "eye_corner_depth_pos" 213 } + gene_bs_eye_fold_shape={ "eye_fold_shape_pos" 1 "eye_fold_shape_pos" 1 } + gene_bs_eye_size={ "eye_size_pos" 53 "eye_size_pos" 28 } + gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_neg" 49 "eye_upper_lid_size_pos" 8 } + gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 118 "forehead_brow_curve_neg" 118 } + gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 3 "forehead_brow_forward_pos" 48 } + gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 105 "forehead_brow_inner_height_pos" 121 } + gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 89 "forehead_brow_outer_height_pos" 120 } + gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 63 "forehead_brow_width_pos" 27 } + gene_bs_jaw_def={ "jaw_def_neg" 57 "jaw_def_neg" 2 } + gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 85 "mouth_lower_lip_def_pos" 85 } + gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 81 "mouth_lower_lip_full_pos" 31 } + gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_neg" 47 "mouth_lower_lip_pad_neg" 104 } + gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_neg" 5 "mouth_lower_lip_width_neg" 5 } + gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 27 "mouth_philtrum_def_pos" 27 } + gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 38 "mouth_philtrum_shape_pos" 38 } + gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_neg" 113 "mouth_philtrum_width_neg" 113 } + gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 42 "mouth_upper_lip_def_pos" 42 } + gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_pos" 97 "mouth_upper_lip_full_pos" 22 } + gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 162 "mouth_upper_lip_profile_pos" 162 } + gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_pos" 11 "mouth_upper_lip_width_pos" 11 } + gene_bs_nose_forward={ "nose_forward_pos" 31 "nose_forward_neg" 15 } + gene_bs_nose_height={ "nose_height_pos" 7 "nose_height_neg" 24 } + gene_bs_nose_length={ "nose_length_pos" 47 "nose_length_pos" 122 } + gene_bs_nose_nostril_height={ "nose_nostril_height_neg" 79 "nose_nostril_height_pos" 18 } + gene_bs_nose_nostril_width={ "nose_nostril_width_neg" 141 "nose_nostril_width_neg" 50 } + gene_bs_nose_profile={ "nose_profile_neg" 43 "nose_profile_neg" 58 } + gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 33 "nose_ridge_angle_neg" 37 } + gene_bs_nose_ridge_width={ "nose_ridge_width_neg" 7 "nose_ridge_width_neg" 32 } + gene_bs_nose_size={ "nose_size_pos" 24 "nose_size_pos" 24 } + gene_bs_nose_tip_angle={ "nose_tip_angle_pos" 7 "nose_tip_angle_pos" 7 } + gene_bs_nose_tip_forward={ "nose_tip_forward_neg" 213 "nose_tip_forward_neg" 18 } + gene_bs_nose_tip_width={ "nose_tip_width_neg" 135 "nose_tip_width_neg" 51 } + face_detail_cheek_def={ "cheek_def_02" 173 "cheek_def_01" 10 } + face_detail_cheek_fat={ "cheek_fat_01_neg" 43 "cheek_fat_01_pos" 3 } + face_detail_chin_cleft={ "chin_cleft" 181 "chin_dimple" 13 } + face_detail_chin_def={ "chin_def_neg" 249 "chin_def_neg" 249 } + face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 140 "eye_lower_lid_def" 83 } + face_detail_eye_socket={ "eye_socket_color_01" 25 "eye_socket_color_02" 25 } + face_detail_nasolabial={ "nasolabial_03" 55 "nasolabial_03" 55 } + face_detail_nose_ridge_def={ "nose_ridge_def_neg" 18 "nose_ridge_def_pos" 18 } + face_detail_nose_tip_def={ "nose_tip_def" 60 "nose_tip_def" 60 } + face_detail_temple_def={ "temple_def" 226 "temple_def" 226 } + expression_brow_wrinkles={ "brow_wrinkles_01" 33 "brow_wrinkles_01" 33 } + expression_eye_wrinkles={ "eye_wrinkles_02" 217 "eye_wrinkles_02" 217 } + expression_forehead_wrinkles={ "forehead_wrinkles_03" 172 "forehead_wrinkles_03" 172 } + expression_other={ "cheek_wrinkles_both_01" 0 "cheek_wrinkles_both_01" 0 } + complexion={ "complexion_7" 255 "complexion_5" 201 } + gene_height={ "normal_height" 126 "normal_height" 116 } + gene_bs_body_type={ "body_fat_head_fat_low" 126 "body_fat_head_fat_full" 126 } + gene_bs_body_shape={ "body_shape_hourglass_half" 51 "body_shape_hourglass_half" 0 } + gene_bs_bust={ "bust_clothes" 80 "bust_default" 111 } + gene_age={ "old_3" 123 "old_3" 123 } + gene_eyebrows_shape={ "avg_spacing_lower_thickness" 116 "avg_spacing_avg_thickness" 138 } + gene_eyebrows_fullness={ "layer_2_low_thickness" 91 "layer_2_avg_thickness" 147 } + gene_body_hair={ "body_hair_avg" 167 "body_hair_avg" 167 } + gene_hair_type={ "hair_straight" 117 "hair_straight" 117 } + gene_baldness={ "no_baldness" 127 "no_baldness" 127 } + eye_accessory={ "normal_eyes" 103 "normal_eyes" 103 } + teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } + eyelashes_accessory={ "normal_eyelashes" 201 "normal_eyelashes" 201 } + beards={ "no_beard" 255 "no_beard" 0 } + hairstyles={ "northern_hairstyles_straight" 95 "all_hairstyles" 0 } + clothes={ "western_bedchamber" 79 "most_clothes" 0 } + } + override={ + portrait_modifier_overrides={ + custom_beards=male_empty + custom_hair=male_hair_northern_02 + } } - +  + entity={ 0 0 } } } } - -"common/decisions/tfe_culture_decisions.txt" = { +"common/dna_data/00_dna_ee.txt" = { { -dong_zhuo_culture_decision = { - ai_check_interval = 0 - is_shown = { - has_game_rule = larp_enabled - NOT = { - culture = { - this = culture:soissons - } - } - dynasty = dynasty:syagri - game_start_date = 395.1.17 +2000003 = { + dna = "gIySVE1eTFw2rCWTAaAAfAGDAYMAdgGEAHoBggGkAHMAegB/AHgAbQGHAYABggGfAY0BsgGcAc8AcwGoAbABhAGYAYAAZAHMAFgBoAB2AHIBqgGLAZwBhQBzAHoBfwGAAB8BkQGGAYwAeQGLAYwAdgB2AF0BhAB/AFIBsgBmAF0AJQG3AX8BjwGBAHUALQEnAAEBcAAzAQoABQATAHIArAIWAAwAMwAiATEAMgFDAf4BFgAlARYBKgEwARAAPgEAACgALgAdAQMAPgEpAUkBLwEoASEAPQAyARsBHgA0ACEAZwACACwAEgAMAWUAKgFIACQADgAmAAgATgAVACgBeAAHACIADAEHAFAAMQENAAkBAACcAjMBYAEBAQUAAQEkAAoBMwFhARUBLQAbAG4ARgELAK0BdQAfASsAEAESAQUAIADnAAcFAAIIAZoAHAAfAPAA6wDvAJcDDAJdAKgARgAvAfMCAAIABMUBhAGKAYkBkAN4CwQIAAVkApgDEALABIgIWwR2A28BgQCgAo4BbAB/AH8AcwBzAAAAAAE2ATY=" +} +dna_marshalnsc = { + type = male + id = 0 + genes = { + hair_color={ 88 252 88 252 } + skin_color={ 222 115 222 115 } + eye_color={ 39 245 39 245 } + gene_chin_forward={ "chin_forward_neg" 71 "chin_forward_neg" 71 } + gene_chin_height={ "chin_height_pos" 140 "chin_height_pos" 140 } + gene_chin_width={ "chin_width_neg" 125 "chin_width_neg" 125 } + gene_eye_angle={ "eye_angle_pos" 138 "eye_angle_pos" 138 } + gene_eye_depth={ "eye_depth_pos" 136 "eye_depth_pos" 136 } + gene_eye_height={ "eye_height_neg" 103 "eye_height_neg" 103 } + gene_eye_distance={ "eye_distance_neg" 123 "eye_distance_neg" 123 } + gene_eye_shut={ "eye_shut_pos" 146 "eye_shut_pos" 146 } + gene_forehead_angle={ "forehead_angle_pos" 134 "forehead_angle_pos" 134 } + gene_forehead_brow_height={ "forehead_brow_height_pos" 135 "forehead_brow_height_pos" 135 } + gene_forehead_roundness={ "forehead_roundness_neg" 52 "forehead_roundness_neg" 52 } + gene_forehead_width={ "forehead_width_neg" 107 "forehead_width_neg" 107 } + gene_forehead_height={ "forehead_height_pos" 168 "forehead_height_pos" 168 } + gene_head_height={ "head_height_neg" 104 "head_height_neg" 104 } + gene_head_width={ "head_width_pos" 138 "head_width_pos" 138 } + gene_head_profile={ "head_profile_neg" 96 "head_profile_neg" 96 } + gene_head_top_height={ "head_top_height_pos" 138 "head_top_height_pos" 138 } + gene_head_top_width={ "head_top_width_pos" 142 "head_top_width_pos" 142 } + gene_jaw_angle={ "jaw_angle_neg" 118 "jaw_angle_neg" 118 } + gene_jaw_forward={ "jaw_forward_neg" 125 "jaw_forward_neg" 125 } + gene_jaw_height={ "jaw_height_pos" 152 "jaw_height_pos" 152 } + gene_jaw_width={ "jaw_width_pos" 138 "jaw_width_pos" 138 } + gene_mouth_corner_depth={ "mouth_corner_depth_pos" 135 "mouth_corner_depth_pos" 135 } + gene_mouth_corner_height={ "mouth_corner_height_neg" 120 "mouth_corner_height_neg" 120 } + gene_mouth_forward={ "mouth_forward_neg" 124 "mouth_forward_neg" 124 } + gene_mouth_height={ "mouth_height_neg" 124 "mouth_height_neg" 124 } + gene_mouth_width={ "mouth_width_neg" 41 "mouth_width_neg" 41 } + gene_mouth_upper_lip_size={ "mouth_upper_lip_size_neg" 126 "mouth_upper_lip_size_neg" 126 } + gene_mouth_lower_lip_size={ "mouth_lower_lip_size_neg" 119 "mouth_lower_lip_size_neg" 119 } + gene_mouth_open={ "mouth_open_neg" 96 "mouth_open_neg" 96 } + gene_neck_length={ "neck_length_pos" 128 "neck_length_pos" 128 } + gene_neck_width={ "neck_width_neg" 113 "neck_width_neg" 113 } + gene_bs_cheek_forward={ "cheek_forward_pos" 14 "cheek_forward_pos" 14 } + gene_bs_cheek_height={ "cheek_height_pos" 47 "cheek_height_pos" 47 } + gene_bs_cheek_width={ "cheek_width_neg" 21 "cheek_width_neg" 21 } + gene_bs_ear_angle={ "ear_angle_pos" 122 "ear_angle_pos" 122 } + gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 38 "ear_inner_shape_pos" 38 } + gene_bs_ear_bend={ "ear_both_bend_pos" 6 "ear_both_bend_pos" 6 } + gene_bs_ear_outward={ "ear_outward_neg" 29 "ear_outward_neg" 29 } + gene_bs_ear_size={ "ear_size_pos" 40 "ear_size_pos" 40 } + gene_bs_eye_corner_depth={ "eye_corner_depth_neg" 194 "eye_corner_depth_neg" 194 } + gene_bs_eye_fold_shape={ "eye_fold_shape_pos" 32 "eye_fold_shape_pos" 32 } + gene_bs_eye_size={ "eye_size_pos" 44 "eye_size_pos" 44 } + gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_neg" 217 "eye_upper_lid_size_neg" 217 } + gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 16 "forehead_brow_curve_neg" 16 } + gene_bs_forehead_brow_forward={ "forehead_brow_forward_neg" 49 "forehead_brow_forward_neg" 49 } + gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 14 "forehead_brow_inner_height_pos" 14 } + gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 116 "forehead_brow_outer_height_pos" 116 } + gene_bs_forehead_brow_width={ "forehead_brow_width_neg" 16 "forehead_brow_width_neg" 16 } + gene_bs_jaw_def={ "jaw_def_neg" 195 "jaw_def_neg" 195 } + gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 87 "mouth_lower_lip_def_pos" 87 } + gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 14 "mouth_lower_lip_full_pos" 14 } + gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_neg" 4 "mouth_lower_lip_pad_neg" 4 } + gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_neg" 6 "mouth_lower_lip_width_neg" 6 } + gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 15 "mouth_philtrum_def_pos" 15 } + gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 34 "mouth_philtrum_shape_pos" 34 } + gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_neg" 47 "mouth_philtrum_width_neg" 47 } + gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 114 "mouth_upper_lip_def_pos" 114 } + gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_pos" 32 "mouth_upper_lip_full_pos" 32 } + gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_neg" 11 "mouth_upper_lip_profile_neg" 11 } + gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_neg" 15 "mouth_upper_lip_width_neg" 15 } + gene_bs_nose_forward={ "nose_forward_pos" 22 "nose_forward_pos" 22 } + gene_bs_nose_height={ "nose_height_pos" 72 "nose_height_pos" 72 } + gene_bs_nose_length={ "nose_length_neg" 79 "nose_length_neg" 79 } + gene_bs_nose_nostril_height={ "nose_nostril_height_pos" 11 "nose_nostril_height_pos" 11 } + gene_bs_nose_nostril_width={ "nose_nostril_width_neg" 79 "nose_nostril_width_neg" 79 } + gene_bs_nose_profile={ "nose_profile_pos" 33 "nose_profile_pos" 33 } + gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 10 "nose_ridge_angle_pos" 10 } + gene_bs_nose_ridge_width={ "nose_ridge_width_pos" 48 "nose_ridge_width_pos" 48 } + gene_bs_nose_size={ "nose_size_pos" 59 "nose_size_pos" 59 } + gene_bs_nose_tip_angle={ "nose_tip_angle_neg" 27 "nose_tip_angle_neg" 27 } + gene_bs_nose_tip_forward={ "nose_tip_forward_neg" 175 "nose_tip_forward_neg" 175 } + gene_bs_nose_tip_width={ "nose_tip_width_neg" 8 "nose_tip_width_neg" 8 } + face_detail_cheek_def={ "cheek_def_01" 74 "cheek_def_01" 74 } + face_detail_cheek_fat={ "cheek_fat_01_pos" 152 "cheek_fat_01_pos" 152 } + face_detail_chin_cleft={ "chin_cleft" 22 "chin_cleft" 22 } + face_detail_chin_def={ "chin_def_neg" 55 "chin_def_neg" 55 } + face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 107 "eye_lower_lid_def" 107 } + face_detail_eye_socket={ "eye_socket_03" 6 "eye_socket_03" 6 } + face_detail_nasolabial={ "nasolabial_01" 11 "nasolabial_01" 11 } + face_detail_nose_ridge_def={ "nose_ridge_def_neg" 12 "nose_ridge_def_neg" 12 } + face_detail_nose_tip_def={ "nose_tip_def" 20 "nose_tip_def" 20 } + face_detail_temple_def={ "temple_def" 0 "temple_def" 0 } + expression_brow_wrinkles={ "brow_wrinkles_03" 13 "brow_wrinkles_03" 13 } + expression_eye_wrinkles={ "eye_wrinkles_01" 32 "eye_wrinkles_01" 32 } + expression_forehead_wrinkles={ "forehead_wrinkles_02" 150 "forehead_wrinkles_02" 150 } + expression_other={ "cheek_wrinkles_both_01" 0 "cheek_wrinkles_both_01" 0 } + complexion={ "complexion_2" 137 "complexion_2" 137 } + gene_height={ "normal_height" 126 "normal_height" 126 } + gene_bs_body_type={ "body_fat_head_fat_medium" 134 "body_fat_head_fat_medium" 134 } + gene_bs_body_shape={ "body_shape_rectangle_full" 70 "body_shape_rectangle_full" 19 } + gene_bs_bust={ "bust_clothes" 9 "bust_shape_1_half" 12 } + gene_age={ "old_2" 12 "old_2" 12 } + gene_eyebrows_shape={ "far_spacing_low_thickness" 240 "far_spacing_low_thickness" 240 } + gene_eyebrows_fullness={ "layer_2_low_thickness" 234 "layer_2_low_thickness" 234 } + gene_body_hair={ "body_hair_sparse_low_stubble" 7 "body_hair_sparse_low_stubble" 7 } + gene_hair_type={ "hair_straight_thin_beard" 190 "hair_straight_thin_beard" 190 } + gene_baldness={ "male_pattern_baldness" 239 "male_pattern_baldness" 168 } + eye_accessory={ "normal_eyes" 131 "normal_eyes" 131 } + teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } + eyelashes_accessory={ "normal_eyelashes" 207 "normal_eyelashes" 207 } + hairstyles={ "male_hair_fp1_07" 190 "all_hairstyles" 0 } + beards={ "no_beard" 255 "no_beard" 0 } + clothes={ "western_bedchamber" 79 "most_clothes" 0 } } - is_valid = { - culture = { has_cultural_pillar = heritage_levantine } - custom_description = { - text = soissonstrigger1 - culture = { any_parent_culture_or_above = { this = culture:han } } - } - dynasty = dynasty:syagri - has_title = title:k_israel - custom_description = { - text = soissonstrigger2 - current_date = 690.4.20 + + override = { + portrait_modifier_overrides = { + custom_hair = male_hair_fp1_07 + custom_beards = male_empty } } - effect = { - save_scope_as = soi - #Convert your, and your whole family's, culture - set_culture = culture:soissons - add_prestige = 10000 - hidden_effect = { - if = { - limit = { any_spouse = { is_landed = no } } - every_spouse = { - limit = { - is_landed = no - } - set_culture = culture:soissons - } - } - if = { - limit = { - any_close_family_member = { - is_landed = no - NOT = { is_spouse_of = root } - } - } - every_close_family_member = { - limit = { - is_landed = no - NOT = { is_spouse_of = root } - } - custom = all_unlanded_family_members - set_culture = culture:soissons - } - } - - #Convert appropriate vassals, and their family - if = { - limit = { - any_vassal_or_below = { - is_ai = yes - } - } - every_vassal_or_below = { - limit = { - is_ai = yes - } - set_culture = culture:soissons - } - } - #Flip Counties - every_realm_county = { - set_county_culture = culture:soissons - } - - culture:soissons = { - hidden_effect = { - reset_culture_creation_date = yes - get_all_innovations_from = culture:han - get_all_innovations_from = culture:hebrew - } - } + entity = { 0 0 } +} - trigger_event = tfe_culture.9900 +dna_tazon = { + portrait_info = { + genes = { + hair_color={ 147 249 225 211 } + skin_color={ 56 73 150 107 } + eye_color={ 51 179 17 164 } + gene_chin_forward={ "chin_forward_pos" 143 "chin_forward_pos" 141 } + gene_chin_height={ "chin_height_pos" 149 "chin_height_pos" 153 } + gene_chin_width={ "chin_width_pos" 137 "chin_width_pos" 136 } + gene_eye_angle={ "eye_angle_pos" 82 "eye_angle_pos" 155 } + gene_eye_depth={ "eye_depth_neg" 168 "eye_depth_neg" 123 } + gene_eye_height={ "eye_height_neg" 188 "eye_height_neg" 115 } + gene_eye_distance={ "eye_distance_neg" 150 "eye_distance_neg" 125 } + gene_eye_shut={ "eye_shut_pos" 118 "eye_shut_pos" 134 } + gene_forehead_angle={ "forehead_angle_pos" 143 "forehead_angle_pos" 165 } + gene_forehead_brow_height={ "forehead_brow_height_pos" 114 "forehead_brow_height_pos" 163 } + gene_forehead_roundness={ "forehead_roundness_neg" 162 "forehead_roundness_neg" 117 } + gene_forehead_width={ "forehead_width_pos" 148 "forehead_width_pos" 131 } + gene_forehead_height={ "forehead_height_pos" 144 "forehead_height_pos" 128 } + gene_head_height={ "head_height_neg" 156 "head_height_neg" 108 } + gene_head_width={ "head_width_pos" 97 "head_width_pos" 225 } + gene_head_profile={ "head_profile_neg" 102 "head_profile_neg" 92 } + gene_head_top_height={ "head_top_height_pos" 155 "head_top_height_pos" 157 } + gene_head_top_width={ "head_top_width_pos" 131 "head_top_width_pos" 166 } + gene_jaw_angle={ "jaw_angle_pos" 89 "jaw_angle_pos" 131 } + gene_jaw_forward={ "jaw_forward_pos" 126 "jaw_forward_pos" 139 } + gene_jaw_height={ "jaw_height_neg" 108 "jaw_height_neg" 126 } + gene_jaw_width={ "jaw_width_pos" 136 "jaw_width_pos" 144 } + gene_mouth_corner_depth={ "mouth_corner_depth_pos" 82 "mouth_corner_depth_pos" 127 } + gene_mouth_corner_height={ "mouth_corner_height_pos" 120 "mouth_corner_height_pos" 160 } + gene_mouth_forward={ "mouth_forward_pos" 134 "mouth_forward_pos" 134 } + gene_mouth_height={ "mouth_height_pos" 203 "mouth_height_pos" 138 } + gene_mouth_width={ "mouth_width_pos" 115 "mouth_width_pos" 136 } + gene_mouth_upper_lip_size={ "mouth_upper_lip_size_neg" 121 "mouth_upper_lip_size_neg" 107 } + gene_mouth_lower_lip_size={ "mouth_lower_lip_size_neg" 143 "mouth_lower_lip_size_neg" 117 } + gene_mouth_open={ "mouth_open_neg" 1 "mouth_open_neg" 13 } + gene_neck_length={ "neck_length_neg" 121 "neck_length_neg" 109 } + gene_neck_width={ "neck_width_pos" 120 "neck_width_pos" 144 } + gene_bs_cheek_forward={ "cheek_forward_pos" 17 "cheek_forward_pos" 7 } + gene_bs_cheek_height={ "cheek_height_pos" 55 "cheek_height_pos" 32 } + gene_bs_cheek_width={ "cheek_width_neg" 21 "cheek_width_neg" 7 } + gene_bs_ear_angle={ "ear_angle_pos" 57 "ear_angle_pos" 41 } + gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 22 "ear_inner_shape_pos" 22 } + gene_bs_ear_bend={ "ear_lower_bend_pos" 102 "ear_both_bend_pos" 44 } + gene_bs_ear_outward={ "ear_outward_neg" 99 "ear_outward_pos" 20 } + gene_bs_ear_size={ "ear_size_pos" 9 "ear_size_pos" 33 } + gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 109 "eye_corner_depth_pos" 230 } + gene_bs_eye_fold_shape={ "eye_fold_shape_neg" 33 "eye_fold_shape_pos" 29 } + gene_bs_eye_size={ "eye_size_pos" 59 "eye_size_neg" 26 } + gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 127 "eye_upper_lid_size_neg" 7 } + gene_bs_forehead_brow_curve={ "forehead_brow_curve_pos" 13 "forehead_brow_curve_neg" 108 } + gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 109 "forehead_brow_forward_pos" 38 } + gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 67 "forehead_brow_inner_height_pos" 121 } + gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_neg" 41 "forehead_brow_outer_height_pos" 44 } + gene_bs_forehead_brow_width={ "forehead_brow_width_neg" 39 "forehead_brow_width_neg" 45 } + gene_bs_jaw_def={ "jaw_def_neg" 15 "jaw_def_neg" 51 } + gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 127 "mouth_lower_lip_def_pos" 123 } + gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_neg" 75 "mouth_lower_lip_full_neg" 83 } + gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_neg" 39 "mouth_lower_lip_pad_pos" 23 } + gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_neg" 59 "mouth_lower_lip_width_neg" 32 } + gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 89 "mouth_philtrum_def_pos" 50 } + gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 19 "mouth_philtrum_shape_neg" 1 } + gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 109 "mouth_philtrum_width_neg" 195 } + gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 127 "mouth_upper_lip_def_pos" 34 } + gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_pos" 27 "mouth_upper_lip_full_neg" 3 } + gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_neg" 47 "mouth_upper_lip_profile_pos" 64 } + gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_neg" 43 "mouth_upper_lip_width_pos" 67 } + gene_bs_nose_forward={ "nose_forward_neg" 37 "nose_forward_neg" 20 } + gene_bs_nose_height={ "nose_height_pos" 79 "nose_height_pos" 77 } + gene_bs_nose_length={ "nose_length_pos" 27 "nose_length_pos" 46 } + gene_bs_nose_nostril_height={ "nose_nostril_height_pos" 21 "nose_nostril_height_pos" 125 } + gene_bs_nose_nostril_width={ "nose_nostril_width_neg" 27 "nose_nostril_width_neg" 47 } + gene_bs_nose_profile={ "nose_profile_pos" 31 "nose_profile_pos" 18 } + gene_bs_nose_ridge_angle={ "nose_ridge_angle_neg" 9 "nose_ridge_angle_neg" 10 } + gene_bs_nose_ridge_width={ "nose_ridge_width_pos" 109 "nose_ridge_width_pos" 32 } + gene_bs_nose_size={ "nose_size_neg" 13 "nose_size_neg" 29 } + gene_bs_nose_tip_angle={ "nose_tip_angle_neg" 3 "nose_tip_angle_pos" 39 } + gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 5 "nose_tip_forward_neg" 19 } + gene_bs_nose_tip_width={ "nose_tip_width_neg" 1 "nose_tip_width_pos" 103 } + face_detail_cheek_def={ "cheek_def_01" 47 "cheek_def_02" 56 } + face_detail_cheek_fat={ "cheek_fat_02_pos" 64 "cheek_fat_01_pos" 25 } + face_detail_chin_cleft={ "chin_cleft" 4 "chin_cleft" 18 } + face_detail_chin_def={ "chin_def_neg" 63 "chin_def" 5 } + face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 176 "eye_lower_lid_def" 233 } + face_detail_eye_socket={ "eye_socket_color_01" 150 "eye_socket_color_01" 208 } + face_detail_nasolabial={ "nasolabial_03" 21 "nasolabial_03" 21 } + face_detail_nose_ridge_def={ "nose_ridge_def_neg" 0 "nose_ridge_def_pos" 194 } + face_detail_nose_tip_def={ "nose_tip_def" 30 "nose_tip_def" 74 } + face_detail_temple_def={ "temple_def" 33 "temple_def" 140 } + expression_brow_wrinkles={ "brow_wrinkles_04" 35 "brow_wrinkles_04" 35 } + expression_eye_wrinkles={ "eye_wrinkles_01" 70 "eye_wrinkles_01" 70 } + expression_forehead_wrinkles={ "forehead_wrinkles_01" 90 "forehead_wrinkles_01" 90 } + expression_other={ "cheek_wrinkles_both_01" 0 "cheek_wrinkles_both_01" 0 } + complexion={ "complexion_1" 209 "complexion_2" 129 } + gene_height={ "normal_height" 122 "normal_height" 127 } + gene_bs_body_type={ "body_fat_head_fat_low" 116 "body_fat_head_fat_low" 116 } + gene_bs_body_shape={ "body_shape_hourglass_half" 0 "body_shape_hourglass_half" 0 } + gene_bs_bust={ "bust_clothes" 31 "bust_shape_3_full" 154 } + gene_age={ "old_3" 80 "old_3" 80 } + gene_eyebrows_shape={ "avg_spacing_low_thickness" 143 "far_spacing_low_thickness" 235 } + gene_eyebrows_fullness={ "layer_2_avg_thickness" 151 "layer_2_low_thickness" 174 } + gene_body_hair={ "body_hair_avg" 129 "body_hair_avg" 129 } + gene_hair_type={ "hair_straight" 158 "hair_straight" 158 } + gene_baldness={ "male_pattern_baldness" 94 "male_pattern_baldness" 94 } + eye_accessory={ "normal_eyes" 218 "normal_eyes" 218 } + teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } + eyelashes_accessory={ "normal_eyelashes" 204 "normal_eyelashes" 204 } + beards={ "western_beards_straight" 255 "no_beard" 0 } + hairstyles={ "western_hairstyles_straight" 231 "all_hairstyles" 0 } } } - cost = { gold = 69 } + enabled=yes } } -} +} \ No newline at end of file diff --git a/ImperatorToCK3/Mappers/Technology/InnovationMapper.cs b/ImperatorToCK3/Mappers/Technology/InnovationMapper.cs index cffff186f..90660474f 100644 --- a/ImperatorToCK3/Mappers/Technology/InnovationMapper.cs +++ b/ImperatorToCK3/Mappers/Technology/InnovationMapper.cs @@ -1,7 +1,9 @@ using commonItems; using commonItems.Localization; +using DotLiquid; using ImperatorToCK3.Imperator.Inventions; using System.Collections.Generic; +using System.IO; using System.Linq; namespace ImperatorToCK3.Mappers.Technology; @@ -10,12 +12,20 @@ internal sealed class InnovationMapper { private readonly List innovationLinks = []; private readonly List innovationBonuses = []; - public void LoadLinksAndBonuses(string configurablePath) { + public void LoadLinksAndBonuses(string configurablePath, OrderedDictionary ck3ModFlags) { + // The file used the Liquid templating language, so convert it to text before parsing. + var convertedModFlags = ck3ModFlags.ToDictionary(kv => kv.Key, kv => (object)kv.Value); + var context = Hash.FromDictionary(convertedModFlags); + + var liquidText = File.ReadAllText(configurablePath); + var template = Template.Parse(liquidText); + var result = template.Render(context); + var parser = new Parser(); parser.RegisterKeyword("link", reader => innovationLinks.Add(new InnovationLink(reader))); parser.RegisterKeyword("bonus", reader => innovationBonuses.Add(new InnovationBonus(reader))); parser.IgnoreAndLogUnregisteredItems(); - parser.ParseFile(configurablePath); + parser.ParseStream(new BufferedReader(result)); } public List GetInnovations(IEnumerable irInventions) { diff --git a/ImperatorToCK3/Mappers/Trait/TraitMapper.cs b/ImperatorToCK3/Mappers/Trait/TraitMapper.cs index 263de70d4..a6fdeb2da 100644 --- a/ImperatorToCK3/Mappers/Trait/TraitMapper.cs +++ b/ImperatorToCK3/Mappers/Trait/TraitMapper.cs @@ -10,6 +10,8 @@ internal class TraitMapper { protected IDictionary ImperatorToCK3TraitMap = new Dictionary(); protected IdObjectCollection CK3Traits = []; + public IEnumerable ValidCK3TraitIDs => CK3Traits.Select(t => t.Id); + // TODO: add a method for logging all unmapped I:R traits public TraitMapper() { }