Skip to main content

tiger_lib/ck3/tables/
modifs.rs

1#![allow(non_upper_case_globals)]
2
3use std::borrow::Cow;
4use std::sync::LazyLock;
5
6use crate::ck3::modif::ModifKinds;
7use crate::everything::Everything;
8use crate::helpers::TigerHashMap;
9use crate::item::Item;
10use crate::lowercase::Lowercase;
11use crate::report::{ErrorKey, Severity, report};
12use crate::token::Token;
13
14/// Returns Some(kinds) if the token is a valid modif or *could* be a valid modif if the appropriate item existed.
15/// Returns None otherwise.
16// LAST UPDATED CK3 VERSION 1.15.0
17pub fn lookup_modif(name: &Token, data: &Everything, warn: Option<Severity>) -> Option<ModifKinds> {
18    let name_lc = Lowercase::new(name.as_str());
19
20    if let result @ Some(_) = MODIF_MAP.get(&name_lc).copied() {
21        return result;
22    }
23
24    if let Some(info) = MODIF_REMOVED_MAP.get(&name_lc).copied() {
25        if let Some(sev) = warn {
26            let msg = format!("{name} has been removed");
27            report(ErrorKey::Removed, sev).msg(msg).info(info).loc(name).push();
28        }
29        return Some(ModifKinds::all());
30    }
31
32    // Look up generated modifs, in a careful order because of possibly overlapping suffixes.
33
34    // Vassal stance opinions
35    for sfx in [
36        "_ai_boldness",
37        "_ai_compassion",
38        "_ai_energy",
39        "_ai_greed",
40        "_ai_honor",
41        "_ai_rationality",
42        "_ai_sociability",
43        "_ai_vengefulness",
44        "_ai_zeal",
45        "_different_culture_opinion",
46        "_different_faith_opinion",
47        "_same_culture_opinion",
48        "_same_faith_opinion",
49    ] {
50        if let Some(s) = name_lc.strip_suffix_unchecked(sfx) {
51            return modif_check(name, &s, Item::VassalStance, ModifKinds::Character, data, warn);
52        }
53    }
54
55    // government type opinions
56    for &sfx in &["_vassal_opinion", "_opinion_same_faith", "_tributary_opinion"] {
57        if let Some(s) = name_lc.strip_suffix_unchecked(sfx) {
58            return modif_check(name, &s, Item::GovernmentType, ModifKinds::Character, data, warn);
59        }
60    }
61
62    // other opinions
63    if let Some(s) = name_lc.strip_suffix_unchecked("_opinion") {
64        if let Some(sev) = warn
65            && !data.item_exists_lc(Item::Culture, &s)
66            && !data.item_exists_lc(Item::Faith, &s)
67            && !data.item_exists_lc(Item::Religion, &s)
68            && !data.item_exists_lc(Item::ReligionFamily, &s)
69            && !data.item_exists_lc(Item::GovernmentType, &s)
70            && !data.item_exists_lc(Item::VassalStance, &s)
71        {
72            let msg = format!("could not find any {s}");
73            let info = "Could be a culture, faith, religion, religion family, government type, or vassal stance";
74            report(ErrorKey::MissingItem, sev).msg(msg).info(info).loc(name).push();
75        }
76        return Some(ModifKinds::Character);
77    }
78
79    // levy, tax, and prestige contributions
80    for &sfx in &[
81        "_levy_contribution_add",
82        "_levy_contribution_mult",
83        "_tax_contribution_add",
84        "_tax_contribution_mult",
85        "_prestige_contribution_add",
86        "_prestige_contribution_mult",
87    ] {
88        if let Some(s) = name_lc.strip_suffix_unchecked(sfx) {
89            if let Some(sev) = warn
90                && !data.item_exists_lc(Item::GovernmentType, &s)
91                && !data.item_exists_lc(Item::VassalStance, &s)
92            {
93                let msg = format!("could not find any {s}");
94                let info = "Could be a government type or vassal stance";
95                report(ErrorKey::MissingItem, sev).msg(msg).info(info).loc(name).push();
96            }
97            return Some(ModifKinds::Character);
98        }
99    }
100
101    // $GOVERNMENT_TYPE$_herd_contribution_add
102    // $GOVERNMENT_TYPE$_herd_contribution_mult
103    for &sfx in &["_herd_contribution_add", "_herd_contribution_mult"] {
104        if let Some(s) = name_lc.strip_suffix_unchecked(sfx) {
105            return modif_check(name, &s, Item::GovernmentType, ModifKinds::Character, data, warn);
106        }
107    }
108
109    // men-at-arms types
110    for &sfx in &[
111        "_damage_add",
112        "_damage_mult",
113        "_pursuit_add",
114        "_pursuit_mult",
115        "_screen_add",
116        "_screen_mult",
117        "_siege_value_add",
118        "_siege_value_mult",
119        "_toughness_add",
120        "_toughness_mult",
121    ] {
122        if let Some(s) = name_lc.strip_suffix_unchecked(sfx) {
123            if let Some(s) = s.strip_prefix_unchecked("stationed_") {
124                return modif_check(
125                    name,
126                    &s,
127                    Item::MenAtArmsBase,
128                    ModifKinds::Province,
129                    data,
130                    warn,
131                );
132            }
133            return modif_check(name, &s, Item::MenAtArmsBase, ModifKinds::Character, data, warn);
134        }
135    }
136
137    // men-at-arms types, non-stationed
138    for &sfx in &["_maintenance_mult", "_max_size_add", "_max_size_mult", "_recruitment_cost_mult"]
139    {
140        if let Some(s) = name_lc.strip_suffix_unchecked(sfx) {
141            return modif_check(name, &s, Item::MenAtArmsBase, ModifKinds::Character, data, warn);
142        }
143    }
144
145    // old scheme types
146    for &sfx in &[
147        "_scheme_power_add",
148        "_scheme_power_mult",
149        "_scheme_resistance_add",
150        "_scheme_resistance_mult",
151    ] {
152        if name_lc.strip_suffix_unchecked(sfx).is_some() {
153            if let Some(sev) = warn {
154                let msg = format!("{name} has been removed in 1.13");
155                report(ErrorKey::Removed, sev).msg(msg).loc(name).push();
156            }
157            return Some(ModifKinds::all());
158        }
159    }
160
161    // new scheme modifs
162    for &sfx in &["_enemy_scheme_phase_duration_add", "_scheme_phase_duration_add"] {
163        if let Some(s) = name_lc.strip_suffix_unchecked(sfx) {
164            return modif_check(name, &s, Item::Scheme, ModifKinds::Character, data, warn);
165        }
166    }
167
168    // terrain
169    for &sfx in &[
170        "_advantage",
171        "_attrition_mult",
172        "_cancel_negative_supply",
173        "_max_combat_roll",
174        "_min_combat_roll",
175    ] {
176        if let Some(s) = name_lc.strip_suffix_unchecked(sfx) {
177            return modif_check(name, &s, Item::Terrain, ModifKinds::Character, data, warn);
178        }
179    }
180    if let Some(s) = name_lc.strip_suffix_unchecked("_provisions_use_mult") {
181        return modif_check(
182            name,
183            &s,
184            Item::Terrain,
185            ModifKinds::Character | ModifKinds::Province | ModifKinds::County,
186            data,
187            warn,
188        );
189    }
190
191    // monthly_$LIFESTYLE$_xp_gain_add
192    // monthly_$LIFESTYLE$_xp_gain_mult
193    if let Some(s) = name_lc.strip_prefix_unchecked("monthly_") {
194        for &sfx in &["_xp_gain_add", "_xp_gain_mult"] {
195            if let Some(s) = s.strip_suffix_unchecked(sfx) {
196                return modif_check(name, &s, Item::Lifestyle, ModifKinds::Character, data, warn);
197            }
198        }
199    }
200
201    // The names of individual tracks in a multi-track trait start with `trait_track_` before the track name.
202    // It's also possible to use the names of traits that have one or more tracks directly, without the trait_track_.
203    // Presumably it applies to all of a trait's tracks in that case.
204    // $LIFESTYLE$_xp_gain_mult needs to be handled here too.
205    for &sfx in &["_xp_degradation_mult", "_xp_gain_mult", "_xp_loss_mult"] {
206        if let Some(s) = name_lc.strip_suffix_unchecked(sfx) {
207            if let Some(s) = s.strip_prefix_unchecked("trait_track_") {
208                return modif_check(name, &s, Item::TraitTrack, ModifKinds::Character, data, warn);
209            }
210            // It can be a lifestyle or a trait.
211            if let Some(sev) = warn {
212                if !data.item_exists_lc(Item::Lifestyle, &s)
213                    && !data.item_exists_lc(Item::Trait, &s)
214                {
215                    let msg = "`{s}` was not found as a trait or lifestyle";
216                    let info = format!("so the modifier {name} does not exist");
217                    report(ErrorKey::MissingItem, sev).msg(msg).info(info).loc(name).push();
218                } else if data.item_exists_lc(Item::Trait, &s) && !data.traits.has_track_lc(&s) {
219                    let msg = format!("trait {s} does not have an xp track");
220                    let info = format!("so the modifier {name} does not exist");
221                    report(ErrorKey::MissingItem, sev).msg(msg).info(info).loc(name).push();
222                }
223            }
224            return Some(ModifKinds::Character);
225        }
226    }
227
228    // $LIFESTYLE_xp_gain_add
229    if let Some(s) = name_lc.strip_suffix_unchecked("_xp_gain_add") {
230        return modif_check(name, &s, Item::Lifestyle, ModifKinds::Character, data, warn);
231    }
232
233    // max_$SCHEME_TYPE$_schemes_add
234    if let Some(s) = name_lc.strip_prefix_unchecked("max_")
235        && let Some(s) = s.strip_suffix_unchecked("_schemes_add")
236    {
237        return modif_check(name, &s, Item::Scheme, ModifKinds::Character, data, warn);
238    }
239
240    // scheme power against scripted relation
241    if let Some(s) = name_lc.strip_prefix_unchecked("scheme_power_against_") {
242        for &sfx in &["_add", "_mult"] {
243            if s.strip_suffix_unchecked(sfx).is_some() {
244                if let Some(sev) = warn {
245                    let msg = format!("{name} has been removed in 1.13");
246                    report(ErrorKey::Removed, sev).msg(msg).loc(name).push();
247                }
248                return Some(ModifKinds::all());
249            }
250        }
251    }
252    // scheme phase duration against scripted relation
253    if let Some(s) = name_lc.strip_prefix_unchecked("scheme_phase_duration_against_")
254        && let Some(s) = s.strip_suffix_unchecked("_add")
255    {
256        return modif_check(name, &s, Item::Relation, ModifKinds::Character, data, warn);
257    }
258
259    // $SITUATION_TYPE$_supply_limit_add
260    if let Some(s) = name_lc.strip_suffix_unchecked("_supply_limit_add") {
261        return modif_check(name, &s, Item::Situation, ModifKinds::Character, data, warn);
262    }
263
264    // $SITUATION_TYPE$_supply_limit_mult
265    // $TERRAIN_TYPE$_supply_limit_mult
266    if let Some(s) = name_lc.strip_suffix_unchecked("_supply_limit_mult") {
267        if let Some(sev) = warn
268            && !data.item_exists_lc(Item::Situation, &s)
269            && !data.item_exists_lc(Item::Terrain, &s)
270        {
271            let msg = format!("`{s}` not found as situation or terrain");
272            let info = format!("so the modifier `{name}` does not exist");
273            report(ErrorKey::MissingItem, sev).msg(msg).info(info).loc(name).push();
274        }
275        return Some(ModifKinds::Character | ModifKinds::Province | ModifKinds::County);
276    }
277
278    // geographical region or terrain
279    for &sfx in &["_development_growth", "_development_growth_factor"] {
280        if let Some(s) = name_lc.strip_suffix_unchecked(sfx) {
281            if data.item_exists_lc(Item::Region, &s) {
282                if let Some(sev) = warn
283                    && !data.item_lc_has_property(Item::Region, &s, "generates_modifiers")
284                {
285                    let msg = format!("region {s} does not have `generates_modifiers = yes`");
286                    let info = format!("so the modifier {name} does not exist");
287                    report(ErrorKey::MissingItem, sev)
288                        .strong()
289                        .msg(msg)
290                        .info(info)
291                        .loc(name)
292                        .push();
293                }
294            } else if let Some(sev) = warn
295                && !data.item_exists_lc(Item::Terrain, &s)
296            {
297                let msg = format!("could not find any {s}");
298                let info = "Could be a geographical region or terrain";
299                report(ErrorKey::MissingItem, sev).msg(msg).info(info).loc(name).push();
300            }
301            return Some(ModifKinds::Character | ModifKinds::Province | ModifKinds::County);
302        }
303    }
304
305    // holding type
306    for &sfx in &["_build_gold_cost", "_build_piety_cost", "_build_prestige_cost", "_build_speed"] {
307        if let Some(s) = name_lc.strip_suffix_unchecked(sfx) {
308            if data.item_exists_lc(Item::HoldingType, &s) {
309                return Some(ModifKinds::Character | ModifKinds::Province | ModifKinds::County);
310            }
311            if let Some(s) = s.strip_suffix_unchecked("_holding")
312                && data.item_exists_lc(Item::HoldingType, &s)
313            {
314                return Some(ModifKinds::Character | ModifKinds::Province | ModifKinds::County);
315            }
316            if let Some(sev) = warn {
317                let msg = format!("could not find holding type {s}");
318                let info = format!("so the modifier {name} does not exist");
319                report(ErrorKey::MissingItem, sev).msg(msg).info(info).loc(name).push();
320            }
321            return Some(ModifKinds::Character | ModifKinds::Province | ModifKinds::County);
322        }
323    }
324
325    // terrain type
326    for &sfx in &[
327        "_holding_construction_gold_cost",
328        "_holding_construction_piety_cost",
329        "_holding_construction_prestige_cost",
330        "_construction_gold_cost",
331        "_construction_piety_cost",
332        "_construction_prestige_cost",
333        "_fertility_decline_add",
334        "_fertility_decline_mult",
335        "_fertility_growth_add",
336        "_fertility_growth_mult",
337        "_levy_size",
338        "_supply_limit",
339        "_tax_mult",
340        "_travel_danger",
341        "_barter_goods_mult",
342    ] {
343        if let Some(s) = name_lc.strip_suffix_unchecked(sfx) {
344            return modif_check(
345                name,
346                &s,
347                Item::Terrain,
348                ModifKinds::Character | ModifKinds::Province | ModifKinds::County,
349                data,
350                warn,
351            );
352        }
353    }
354
355    for &pfx in &[
356        "subject_salary_expense_barter_goods_",
357        "subject_salary_expense_gold_",
358        "subject_salary_expense_herd_",
359        "subject_salary_expense_influence_",
360        "subject_salary_expense_merit_",
361        "subject_salary_expense_piety_",
362        "subject_salary_expense_prestige_",
363        "subject_salary_expense_renown_",
364        "subject_salary_expense_treasury_or_gold_",
365        "subject_salary_expense_treasury_",
366        "subject_salary_expense_",
367        "subject_salary_income_barter_goods_",
368        "subject_salary_income_gold_",
369        "subject_salary_income_herd_",
370        "subject_salary_income_influence_",
371        "subject_salary_income_merit_",
372        "subject_salary_income_piety_",
373        "subject_salary_income_prestige_",
374        "subject_salary_income_renown_",
375        "subject_salary_income_treasury_or_gold_",
376        "subject_salary_income_treasury_",
377        "subject_salary_income_",
378    ] {
379        if let Some(s) = name_lc.strip_prefix_unchecked(pfx) {
380            for &sfx in &["_add", "_mult"] {
381                if let Some(s) = s.strip_suffix_unchecked(sfx) {
382                    if let Some(sev) = warn
383                        && !&["county", "duchy", "kingdom", "empire", "hegemony"]
384                            .contains(&s.as_str())
385                    {
386                        let msg = format!("could not find salary tier {s}");
387                        let info = format!("so the modifier {name} does not exist");
388                        report(ErrorKey::MissingItem, sev)
389                            .strong()
390                            .msg(msg)
391                            .info(info)
392                            .loc(name)
393                            .push();
394                    }
395                    return Some(ModifKinds::Character);
396                }
397            }
398        }
399    }
400
401    // $TAX_SLOT_TYPE$_add
402    if let Some(s) = name_lc.strip_suffix_unchecked("_add") {
403        return modif_check(name, &s, Item::TaxSlotType, ModifKinds::Character, data, warn);
404    }
405
406    None
407}
408
409#[allow(clippy::unnecessary_wraps)]
410fn modif_check(
411    name: &Token,
412    s: &Lowercase,
413    itype: Item,
414    mk: ModifKinds,
415    data: &Everything,
416    warn: Option<Severity>,
417) -> Option<ModifKinds> {
418    if let Some(sev) = warn
419        && !data.item_exists_lc(itype, s)
420    {
421        let msg = format!("could not find {itype} {s}");
422        let info = format!("so the modifier {name} does not exist");
423        report(ErrorKey::MissingItem, sev).strong().msg(msg).info(info).loc(name).push();
424    }
425    Some(mk)
426}
427
428/// Return the modifier localization. If the modifier is static,
429/// i.e. a code defined modifier, it begins with `MOD_` and may have a different body in special cases.
430/// If the modifier is dynamic, i.e. generated from script defined items, then its name is returned unchanged.
431pub fn modif_loc(name: &Token) -> Cow<'static, str> {
432    let name_lc = Lowercase::new(name.as_str());
433
434    if let Some(body) = SPECIAL_MODIF_LOC_MAP.get(&name_lc).copied() {
435        Cow::Borrowed(body)
436    } else if MODIF_MAP.contains_key(&name_lc) {
437        Cow::Owned(format!("MOD_{}", name_lc.to_uppercase()))
438    } else {
439        name_lc.into_cow()
440    }
441}
442
443static MODIF_MAP: LazyLock<TigerHashMap<Lowercase<'static>, ModifKinds>> = LazyLock::new(|| {
444    let mut hash = TigerHashMap::default();
445    for (s, kind) in MODIF_TABLE.iter().copied() {
446        hash.insert(Lowercase::new_unchecked(s), kind);
447    }
448    hash
449});
450
451/// LAST UPDATED CK3 VERSION 1.15.0
452/// See `modifiers.log` from the game data dumps.
453/// A `modif` is my name for the things that modifiers modify.
454const MODIF_TABLE: &[(&str, ModifKinds)] = &[
455    ("accolade_glory_gain_mult", ModifKinds::Character),
456    ("accolades", ModifKinds::Character),
457    (
458        "additional_fort_level",
459        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
460    ),
461    ("advantage", ModifKinds::Character),
462    ("advantage_against_coreligionists", ModifKinds::Character),
463    ("adult_health", ModifKinds::Character),
464    ("ai_amenity_spending", ModifKinds::Character),
465    ("ai_amenity_target_baseline", ModifKinds::Character),
466    ("ai_boldness", ModifKinds::Character),
467    ("ai_compassion", ModifKinds::Character),
468    ("ai_energy", ModifKinds::Character),
469    ("ai_greed", ModifKinds::Character),
470    ("ai_honor", ModifKinds::Character),
471    ("ai_rationality", ModifKinds::Character),
472    ("ai_sociability", ModifKinds::Character),
473    ("ai_vengefulness", ModifKinds::Character),
474    ("ai_war_chance", ModifKinds::Character),
475    ("ai_war_cooldown", ModifKinds::Character),
476    ("ai_zeal", ModifKinds::Character),
477    ("army_damage_mult", ModifKinds::Character),
478    ("army_maintenance_mult", ModifKinds::Character),
479    ("army_pursuit_mult", ModifKinds::Character),
480    ("army_screen_mult", ModifKinds::Character),
481    ("army_siege_value_mult", ModifKinds::Character),
482    ("army_toughness_mult", ModifKinds::Character),
483    (
484        "artifact_decay_reduction_mult",
485        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
486    ),
487    ("attacker_advantage", ModifKinds::Character),
488    ("attraction_opinion", ModifKinds::Character),
489    ("blood_brother_piety_mult", ModifKinds::Character),
490    ("blood_brother_prestige_mult", ModifKinds::Character),
491    ("blood_brother_renown_mult", ModifKinds::Character),
492    (
493        "build_gold_cost",
494        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
495    ),
496    (
497        "build_herd_cost",
498        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
499    ),
500    (
501        "build_piety_cost",
502        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
503    ),
504    (
505        "build_prestige_cost",
506        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
507    ),
508    (
509        "building_slot_add",
510        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
511    ),
512    ("build_speed", ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County)),
513    ("can_vassals_be_attacked", ModifKinds::Character),
514    (
515        "capital_additional_fort_level",
516        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
517    ),
518    (
519        "capital_fort_level",
520        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
521    ),
522    ("character_capital_county_monthly_control_add", ModifKinds::Character),
523    ("character_capital_county_monthly_development_growth_add", ModifKinds::Character),
524    ("character_capital_monthly_county_fertility_decline_add", ModifKinds::Character),
525    ("character_capital_monthly_county_fertility_growth_add", ModifKinds::Character),
526    ("character_innovation_progress_chance_from_fascination_add", ModifKinds::Character),
527    ("character_max_influence_level_add", ModifKinds::Character),
528    ("character_max_merit_level_add", ModifKinds::Character),
529    ("character_max_piety_level_add", ModifKinds::Character),
530    ("character_max_prestige_level_add", ModifKinds::Character),
531    ("character_opinion_from_high_prowess_add", ModifKinds::Character),
532    ("character_opinion_from_low_prowess_add", ModifKinds::Character),
533    ("character_travel_safety", ModifKinds::Character),
534    ("character_travel_safety_mult", ModifKinds::Character),
535    ("character_travel_speed", ModifKinds::Character),
536    ("character_travel_speed_mult", ModifKinds::Character),
537    ("child_except_player_heir_opinion", ModifKinds::Character),
538    ("child_health", ModifKinds::Character),
539    ("child_opinion", ModifKinds::Character),
540    ("clergy_opinion", ModifKinds::Character),
541    ("close_relative_opinion", ModifKinds::Character),
542    ("coastal_advantage", ModifKinds::Character),
543    ("contract_scheme_phase_duration_add", ModifKinds::Character),
544    ("controlled_province_advantage", ModifKinds::Character),
545    ("councillor_opinion", ModifKinds::Character),
546    ("counter_efficiency", ModifKinds::Character.union(ModifKinds::Terrain)),
547    ("counter_resistance", ModifKinds::Character.union(ModifKinds::Terrain)),
548    (
549        "county_fertility_decline_add",
550        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
551    ),
552    (
553        "county_fertility_decline_mult",
554        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
555    ),
556    (
557        "county_fertility_growth_add",
558        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
559    ),
560    (
561        "county_fertility_growth_mult",
562        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
563    ),
564    (
565        "county_opinion_add",
566        ModifKinds::Character.union(ModifKinds::County).union(ModifKinds::Province),
567    ),
568    ("county_opinion_add_even_if_baron", ModifKinds::Character),
569    ("court_grandeur_baseline_add", ModifKinds::Character),
570    ("courtier_and_guest_opinion", ModifKinds::Character),
571    ("courtier_opinion", ModifKinds::Character),
572    ("cowed_vassal_barter_goods_contribution_add", ModifKinds::Character),
573    ("cowed_vassal_barter_goods_contribution_mult", ModifKinds::Character),
574    ("cowed_vassal_herd_contribution_add", ModifKinds::Character),
575    ("cowed_vassal_herd_contribution_mult", ModifKinds::Character),
576    ("cowed_vassal_levy_contribution_add", ModifKinds::Character),
577    ("cowed_vassal_levy_contribution_mult", ModifKinds::Character),
578    ("cowed_vassal_piety_contribution_add", ModifKinds::Character),
579    ("cowed_vassal_piety_contribution_mult", ModifKinds::Character),
580    ("cowed_vassal_prestige_contribution_add", ModifKinds::Character),
581    ("cowed_vassal_prestige_contribution_mult", ModifKinds::Character),
582    ("cowed_vassal_tax_contribution_add", ModifKinds::Character),
583    ("cowed_vassal_tax_contribution_mult", ModifKinds::Character),
584    ("cultural_acceptance_gain_mult", ModifKinds::Culture),
585    ("cultural_head_acceptance_gain_mult", ModifKinds::Character),
586    ("cultural_head_fascination_add", ModifKinds::Character),
587    ("cultural_head_fascination_mult", ModifKinds::Character),
588    ("culture_innovation_progress_chance_from_spread_add", ModifKinds::Culture),
589    ("culture_tradition_max_add", ModifKinds::Culture),
590    ("defender_advantage", ModifKinds::Character),
591    (
592        "defender_holding_advantage",
593        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
594    ),
595    ("defender_winter_advantage", ModifKinds::Province),
596    (
597        "development_decline",
598        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
599    ),
600    (
601        "development_decline_factor",
602        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
603    ),
604    (
605        "development_growth",
606        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
607    ),
608    (
609        "development_growth_factor",
610        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
611    ),
612    ("different_culture_opinion", ModifKinds::Character),
613    ("different_faith_county_opinion_mult", ModifKinds::Character),
614    ("different_faith_county_opinion_mult_even_if_baron", ModifKinds::Character),
615    ("different_faith_liege_opinion", ModifKinds::Character),
616    ("different_faith_opinion", ModifKinds::Character),
617    ("different_faith_suzerain_opinion", ModifKinds::Character),
618    ("diplomacy", ModifKinds::Character),
619    ("diplomacy_mult", ModifKinds::Character),
620    ("diplomacy_per_influence_level", ModifKinds::Character),
621    ("diplomacy_per_merit_level", ModifKinds::Character),
622    ("diplomacy_per_piety_level", ModifKinds::Character),
623    ("diplomacy_per_prestige_level", ModifKinds::Character),
624    ("diplomacy_per_stress_level", ModifKinds::Character),
625    ("diplomacy_scheme_phase_duration", ModifKinds::Character),
626    ("diplomacy_scheme_resistance", ModifKinds::Character),
627    ("diplomatic_range_mult", ModifKinds::Character),
628    ("direct_vassal_opinion", ModifKinds::Character),
629    ("domain_limit", ModifKinds::Character),
630    ("domain_limit_max", ModifKinds::Character),
631    ("domain_limit_min", ModifKinds::Character),
632    ("domain_tax_different_faith_mult", ModifKinds::Character),
633    ("domain_tax_different_faith_mult_even_if_baron", ModifKinds::Character),
634    ("domain_tax_mult", ModifKinds::Character),
635    ("domain_tax_mult_even_if_baron", ModifKinds::Character),
636    ("domain_tax_same_faith_mult", ModifKinds::Character),
637    ("domain_tax_same_faith_mult_even_if_baron", ModifKinds::Character),
638    ("domicile_build_gold_cost", ModifKinds::Character),
639    ("domicile_build_speed", ModifKinds::Character),
640    ("domicile_external_slots_capacity_add", ModifKinds::Character),
641    ("domicile_monthly_gold_add", ModifKinds::Character),
642    ("domicile_monthly_gold_mult", ModifKinds::Character),
643    ("domicile_monthly_herd_add", ModifKinds::Character),
644    ("domicile_monthly_herd_mult", ModifKinds::Character),
645    ("domicile_monthly_influence_add", ModifKinds::Character),
646    ("domicile_monthly_influence_mult", ModifKinds::Character),
647    ("domicile_monthly_piety_add", ModifKinds::Character),
648    ("domicile_monthly_piety_mult", ModifKinds::Character),
649    ("domicile_monthly_prestige_add", ModifKinds::Character),
650    ("domicile_monthly_prestige_mult", ModifKinds::Character),
651    ("domicile_travel_speed", ModifKinds::Character),
652    ("dread_baseline_add", ModifKinds::Character),
653    ("dread_decay_add", ModifKinds::Character),
654    ("dread_decay_mult", ModifKinds::Character),
655    ("dread_gain_mult", ModifKinds::Character),
656    ("dread_loss_mult", ModifKinds::Character),
657    ("dread_per_tyranny_add", ModifKinds::Character),
658    ("dread_per_tyranny_mult", ModifKinds::Character),
659    ("dynasty_house_opinion", ModifKinds::Character),
660    ("dynasty_opinion", ModifKinds::Character),
661    ("elderly_health", ModifKinds::Character),
662    ("eligible_child_except_player_heir_opinion", ModifKinds::Character),
663    ("eligible_child_opinion", ModifKinds::Character),
664    ("embarkation_cost_mult", ModifKinds::Character),
665    ("enemy_contract_scheme_phase_duration_add", ModifKinds::Character),
666    ("enemy_contract_scheme_success_chance_add", ModifKinds::Character),
667    ("enemy_contract_scheme_success_chance_growth_add", ModifKinds::Character),
668    ("enemy_contract_scheme_success_chance_max_add", ModifKinds::Character),
669    ("enemy_hard_casualty_modifier", ModifKinds::Character.union(ModifKinds::Terrain)),
670    ("enemy_hostile_scheme_phase_duration_add", ModifKinds::Character),
671    ("enemy_hostile_scheme_success_chance_add", ModifKinds::Character),
672    ("enemy_hostile_scheme_success_chance_growth_add", ModifKinds::Character),
673    ("enemy_hostile_scheme_success_chance_max_add", ModifKinds::Character),
674    ("enemy_personal_scheme_phase_duration_add", ModifKinds::Character),
675    ("enemy_personal_scheme_success_chance_add", ModifKinds::Character),
676    ("enemy_personal_scheme_success_chance_growth_add", ModifKinds::Character),
677    ("enemy_personal_scheme_success_chance_max_add", ModifKinds::Character),
678    ("enemy_political_scheme_phase_duration_add", ModifKinds::Character),
679    ("enemy_political_scheme_success_chance_add", ModifKinds::Character),
680    ("enemy_political_scheme_success_chance_growth_add", ModifKinds::Character),
681    ("enemy_political_scheme_success_chance_max_add", ModifKinds::Character),
682    ("enemy_scheme_secrecy_add", ModifKinds::Character),
683    ("enemy_terrain_advantage", ModifKinds::Character),
684    (
685        "epidemic_resistance",
686        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
687    ),
688    (
689        "epidemic_travel_danger",
690        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
691    ),
692    ("faith_conversion_piety_cost_add", ModifKinds::Character),
693    ("faith_conversion_piety_cost_mult", ModifKinds::Character),
694    ("faith_creation_piety_cost_add", ModifKinds::Character),
695    ("faith_creation_piety_cost_mult", ModifKinds::Character),
696    ("fellow_confederation_member_opinion", ModifKinds::Character),
697    ("fellow_tributary_opinion", ModifKinds::Character),
698    ("fellow_vassal_opinion", ModifKinds::Character),
699    ("fertility", ModifKinds::Character),
700    ("fort_level", ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County)),
701    ("garrison_size", ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County)),
702    ("general_opinion", ModifKinds::Character),
703    ("genetic_trait_strengthen_chance", ModifKinds::Character),
704    ("great_project_build_speed", ModifKinds::Character),
705    ("guest_opinion", ModifKinds::Character),
706    ("happy_powerful_vassal_barter_goods_contribution_add", ModifKinds::Character),
707    ("happy_powerful_vassal_barter_goods_contribution_mult", ModifKinds::Character),
708    ("happy_powerful_vassal_herd_contribution_add", ModifKinds::Character),
709    ("happy_powerful_vassal_herd_contribution_mult", ModifKinds::Character),
710    ("happy_powerful_vassal_levy_contribution_add", ModifKinds::Character),
711    ("happy_powerful_vassal_levy_contribution_mult", ModifKinds::Character),
712    ("happy_powerful_vassal_piety_contribution_add", ModifKinds::Character),
713    ("happy_powerful_vassal_piety_contribution_mult", ModifKinds::Character),
714    ("happy_powerful_vassal_prestige_contribution_add", ModifKinds::Character),
715    ("happy_powerful_vassal_prestige_contribution_mult", ModifKinds::Character),
716    ("happy_powerful_vassal_tax_contribution_add", ModifKinds::Character),
717    ("happy_powerful_vassal_tax_contribution_mult", ModifKinds::Character),
718    ("hard_casualty_modifier", ModifKinds::Character.union(ModifKinds::Terrain)),
719    ("hard_casualty_winter", ModifKinds::Province),
720    ("health", ModifKinds::Character),
721    ("herd_capacity_add", ModifKinds::Character),
722    ("herd_capacity_mult", ModifKinds::Character),
723    ("herd_conversion", ModifKinds::Character),
724    ("herd_gain_mult", ModifKinds::Character),
725    (
726        "holding_build_gold_cost",
727        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
728    ),
729    (
730        "holding_build_piety_cost",
731        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
732    ),
733    (
734        "holding_build_prestige_cost",
735        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
736    ),
737    (
738        "holding_build_speed",
739        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
740    ),
741    ("holy_order_hire_cost_add", ModifKinds::Character),
742    ("holy_order_hire_cost_mult", ModifKinds::Character),
743    ("horde_conversion_cost", ModifKinds::Character),
744    ("hostage_income_mult", ModifKinds::Character),
745    ("hostage_piety_mult", ModifKinds::Character),
746    ("hostage_prestige_mult", ModifKinds::Character),
747    ("hostage_renown_mult", ModifKinds::Character),
748    ("hostile_county_attrition", ModifKinds::Character),
749    ("hostile_county_attrition_raiding", ModifKinds::Character),
750    (
751        "hostile_raid_time",
752        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
753    ),
754    ("hostile_scheme_phase_duration_add", ModifKinds::Character),
755    ("house_relation_change_mult", ModifKinds::Character),
756    ("ignore_different_faith_opinion", ModifKinds::Character),
757    ("ignore_negative_culture_opinion", ModifKinds::Character),
758    ("ignore_negative_opinion_of_culture", ModifKinds::Character),
759    ("ignore_opinion_of_different_faith", ModifKinds::Character),
760    ("inbreeding_chance", ModifKinds::Character),
761    ("independent_primary_attacker_advantage_add", ModifKinds::Character),
762    ("independent_primary_defender_advantage_add", ModifKinds::Character),
763    ("independent_ruler_opinion", ModifKinds::Character),
764    ("influence_level_impact_mult", ModifKinds::Character),
765    ("intimidated_vassal_barter_goods_contribution_add", ModifKinds::Character),
766    ("intimidated_vassal_barter_goods_contribution_mult", ModifKinds::Character),
767    ("intimidated_vassal_herd_contribution_add", ModifKinds::Character),
768    ("intimidated_vassal_herd_contribution_mult", ModifKinds::Character),
769    ("intimidated_vassal_levy_contribution_add", ModifKinds::Character),
770    ("intimidated_vassal_levy_contribution_mult", ModifKinds::Character),
771    ("intimidated_vassal_piety_contribution_add", ModifKinds::Character),
772    ("intimidated_vassal_piety_contribution_mult", ModifKinds::Character),
773    ("intimidated_vassal_prestige_contribution_add", ModifKinds::Character),
774    ("intimidated_vassal_prestige_contribution_mult", ModifKinds::Character),
775    ("intimidated_vassal_tax_contribution_add", ModifKinds::Character),
776    ("intimidated_vassal_tax_contribution_mult", ModifKinds::Character),
777    ("intrigue", ModifKinds::Character),
778    ("intrigue_mult", ModifKinds::Character),
779    ("intrigue_per_influence_level", ModifKinds::Character),
780    ("intrigue_per_merit_level", ModifKinds::Character),
781    ("intrigue_per_piety_level", ModifKinds::Character),
782    ("intrigue_per_prestige_level", ModifKinds::Character),
783    ("intrigue_per_stress_level", ModifKinds::Character),
784    ("intrigue_scheme_phase_duration", ModifKinds::Character),
785    ("intrigue_scheme_resistance", ModifKinds::Character),
786    ("knight_effectiveness_mult", ModifKinds::Character),
787    ("knight_effectiveness_per_diplomacy", ModifKinds::Character),
788    ("knight_effectiveness_per_dread", ModifKinds::Character),
789    ("knight_effectiveness_per_intrigue", ModifKinds::Character),
790    ("knight_effectiveness_per_learning", ModifKinds::Character),
791    ("knight_effectiveness_per_martial", ModifKinds::Character),
792    ("knight_effectiveness_per_prowess", ModifKinds::Character),
793    ("knight_effectiveness_per_stewardship", ModifKinds::Character),
794    ("knight_effectiveness_per_tyranny", ModifKinds::Character),
795    ("knight_limit", ModifKinds::Character),
796    ("learning", ModifKinds::Character),
797    ("learning_mult", ModifKinds::Character),
798    ("learning_per_influence_level", ModifKinds::Character),
799    ("learning_per_merit_level", ModifKinds::Character),
800    ("learning_per_piety_level", ModifKinds::Character),
801    ("learning_per_prestige_level", ModifKinds::Character),
802    ("learning_per_stress_level", ModifKinds::Character),
803    ("learning_scheme_phase_duration", ModifKinds::Character),
804    ("learning_scheme_resistance", ModifKinds::Character),
805    ("led_by_owner_extra_advantage_add", ModifKinds::Character),
806    ("legitimacy_gain_mult", ModifKinds::Character),
807    ("legitimacy_loss_mult", ModifKinds::Character),
808    ("levy_attack", ModifKinds::Character),
809    ("levy_maintenance", ModifKinds::Character),
810    ("levy_pursuit", ModifKinds::Character),
811    (
812        "levy_reinforcement_rate",
813        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
814    ),
815    ("levy_reinforcement_rate_different_faith", ModifKinds::Character),
816    ("levy_reinforcement_rate_different_faith_even_if_baron", ModifKinds::Character),
817    ("levy_reinforcement_rate_even_if_baron", ModifKinds::Character),
818    (
819        "levy_reinforcement_rate_friendly_territory",
820        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
821    ),
822    ("levy_reinforcement_rate_same_faith", ModifKinds::Character),
823    ("levy_reinforcement_rate_same_faith_even_if_baron", ModifKinds::Character),
824    ("levy_screen", ModifKinds::Character),
825    ("levy_siege", ModifKinds::Character),
826    ("levy_size", ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County)),
827    ("levy_toughness", ModifKinds::Character),
828    ("liege_opinion", ModifKinds::Character),
829    ("life_expectancy", ModifKinds::Character),
830    ("long_reign_bonus_mult", ModifKinds::Character),
831    ("maa_damage_add", ModifKinds::Character),
832    ("maa_damage_mult", ModifKinds::Character),
833    ("maa_pursuit_add", ModifKinds::Character),
834    ("maa_pursuit_mult", ModifKinds::Character),
835    ("maa_screen_add", ModifKinds::Character),
836    ("maa_screen_mult", ModifKinds::Character),
837    ("maa_siege_value_add", ModifKinds::Character),
838    ("maa_siege_value_mult", ModifKinds::Character),
839    ("maa_toughness_add", ModifKinds::Character),
840    ("maa_toughness_mult", ModifKinds::Character),
841    ("martial", ModifKinds::Character),
842    ("martial_mult", ModifKinds::Character),
843    ("martial_per_influence_level", ModifKinds::Character),
844    ("martial_per_merit_level", ModifKinds::Character),
845    ("martial_per_piety_level", ModifKinds::Character),
846    ("martial_per_prestige_level", ModifKinds::Character),
847    ("martial_per_stress_level", ModifKinds::Character),
848    ("martial_scheme_phase_duration", ModifKinds::Character),
849    ("martial_scheme_resistance", ModifKinds::Character),
850    ("max_combat_roll", ModifKinds::Character),
851    ("max_contract_schemes_add", ModifKinds::Character),
852    ("max_hostile_schemes_add", ModifKinds::Character),
853    ("max_loot_mult", ModifKinds::Character),
854    ("max_migration_distance_mult", ModifKinds::Character),
855    ("max_personal_schemes_add", ModifKinds::Character),
856    ("max_political_schemes_add", ModifKinds::Character),
857    ("men_at_arms_cap", ModifKinds::Character),
858    ("men_at_arms_limit", ModifKinds::Character),
859    ("men_at_arms_maintenance", ModifKinds::Character),
860    ("men_at_arms_maintenance_per_dread_mult", ModifKinds::Character),
861    ("men_at_arms_recruitment_cost", ModifKinds::Character),
862    ("men_at_arms_title_cap", ModifKinds::Character),
863    ("men_at_arms_title_limit", ModifKinds::Character),
864    ("mercenary_count_mult", ModifKinds::Culture),
865    ("mercenary_hire_cost_add", ModifKinds::Character),
866    ("mercenary_hire_cost_mult", ModifKinds::Character),
867    ("mercenary_hire_time_mult", ModifKinds::Character),
868    ("merit_level_impact_mult", ModifKinds::Character),
869    ("min_combat_roll", ModifKinds::Character),
870    (
871        "monthly_barter_goods",
872        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
873    ),
874    (
875        "monthly_barter_goods_mult",
876        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
877    ),
878    (
879        "monthly_county_control_decline_add",
880        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
881    ),
882    ("monthly_county_control_decline_add_even_if_baron", ModifKinds::Character),
883    (
884        "monthly_county_control_decline_at_war_add",
885        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
886    ),
887    (
888        "monthly_county_control_decline_at_war_factor",
889        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
890    ),
891    (
892        "monthly_county_control_decline_factor",
893        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
894    ),
895    ("monthly_county_control_decline_factor_even_if_baron", ModifKinds::Character),
896    (
897        "monthly_county_control_growth_add",
898        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
899    ),
900    ("monthly_county_control_growth_add_even_if_baron", ModifKinds::Character),
901    (
902        "monthly_county_control_growth_at_war_add",
903        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
904    ),
905    (
906        "monthly_county_control_growth_at_war_factor",
907        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
908    ),
909    (
910        "monthly_county_control_growth_factor",
911        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
912    ),
913    ("monthly_county_control_growth_factor_even_if_baron", ModifKinds::Character),
914    ("monthly_court_grandeur_change_add", ModifKinds::Character),
915    ("monthly_court_grandeur_change_mult", ModifKinds::Character),
916    ("monthly_dread", ModifKinds::Character),
917    ("monthly_dynasty_prestige", ModifKinds::Character),
918    ("monthly_dynasty_prestige_mult", ModifKinds::Character),
919    ("monthly_income", ModifKinds::Character.union(ModifKinds::Province)),
920    ("monthly_income_from_herd_mult", ModifKinds::Character),
921    ("monthly_income_mult", ModifKinds::Character),
922    ("monthly_income_per_piety_level", ModifKinds::Province),
923    ("monthly_income_per_stress_level_add", ModifKinds::Character),
924    ("monthly_income_per_stress_level_mult", ModifKinds::Character),
925    ("monthly_influence", ModifKinds::Character),
926    ("monthly_influence_mult", ModifKinds::Character),
927    ("monthly_legitimacy_add", ModifKinds::Character),
928    ("monthly_lifestyle_xp_gain_add", ModifKinds::Character),
929    ("monthly_lifestyle_xp_gain_mult", ModifKinds::Character),
930    ("monthly_merit", ModifKinds::Character),
931    ("monthly_merit_mult", ModifKinds::Character),
932    ("monthly_merit_per_liege_tax", ModifKinds::Character),
933    ("monthly_merit_per_title_maa_value", ModifKinds::Character),
934    ("monthly_piety", ModifKinds::Character),
935    ("monthly_piety_from_buildings_mult", ModifKinds::Character),
936    ("monthly_piety_gain_mult", ModifKinds::Character),
937    ("monthly_piety_gain_per_court_position_add", ModifKinds::Character),
938    ("monthly_piety_gain_per_court_position_mult", ModifKinds::Character),
939    ("monthly_piety_gain_per_dread_add", ModifKinds::Character),
940    ("monthly_piety_gain_per_dread_mult", ModifKinds::Character),
941    ("monthly_piety_gain_per_happy_powerful_vassal_add", ModifKinds::Character),
942    ("monthly_piety_gain_per_happy_powerful_vassal_mult", ModifKinds::Character),
943    ("monthly_piety_gain_per_legitimacy_level_add", ModifKinds::Character),
944    ("monthly_piety_gain_per_legitimacy_level_mult", ModifKinds::Character),
945    ("monthly_piety_gain_per_knight_add", ModifKinds::Character),
946    ("monthly_piety_gain_per_knight_mult", ModifKinds::Character),
947    ("monthly_prestige", ModifKinds::Character),
948    ("monthly_prestige_from_buildings_mult", ModifKinds::Character),
949    ("monthly_prestige_gain_mult", ModifKinds::Character),
950    ("monthly_prestige_gain_per_court_position_add", ModifKinds::Character),
951    ("monthly_prestige_gain_per_court_position_mult", ModifKinds::Character),
952    ("monthly_prestige_gain_per_dread_add", ModifKinds::Character),
953    ("monthly_prestige_gain_per_dread_mult", ModifKinds::Character),
954    ("monthly_prestige_gain_per_happy_powerful_vassal_add", ModifKinds::Character),
955    ("monthly_prestige_gain_per_happy_powerful_vassal_mult", ModifKinds::Character),
956    ("monthly_prestige_gain_per_legitimacy_level_add", ModifKinds::Character),
957    ("monthly_prestige_gain_per_legitimacy_level_mult", ModifKinds::Character),
958    ("monthly_prestige_gain_per_knight_add", ModifKinds::Character),
959    ("monthly_prestige_gain_per_knight_mult", ModifKinds::Character),
960    ("monthly_treasury_from_liege_add", ModifKinds::Character),
961    ("monthly_treasury_from_liege_mult", ModifKinds::Character),
962    ("monthly_treasury_from_military_budget_base", ModifKinds::Character),
963    ("monthly_treasury_from_military_budget_mult", ModifKinds::Character),
964    ("monthly_treasury_from_ministry_budget_base", ModifKinds::Character),
965    ("monthly_treasury_from_ministry_budget_mult", ModifKinds::Character),
966    ("monthly_treasury_from_non_vassals", ModifKinds::Character),
967    ("monthly_treasury_from_non_vassals_mult", ModifKinds::Character),
968    ("monthly_treasury_from_salary_budget_base", ModifKinds::Character),
969    ("monthly_treasury_from_salary_budget_mult", ModifKinds::Character),
970    ("monthly_treasury_from_vassals", ModifKinds::Character),
971    ("monthly_treasury_from_vassals_mult", ModifKinds::Character),
972    ("monthly_tyranny", ModifKinds::Character),
973    (
974        "monthly_war_barter_goods_income_add",
975        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
976    ),
977    (
978        "monthly_war_barter_goods_income_mult",
979        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
980    ),
981    ("monthly_war_income_add", ModifKinds::Character),
982    ("monthly_war_income_mult", ModifKinds::Character),
983    ("monthly_war_influence_income_add", ModifKinds::Character),
984    ("monthly_war_influence_income_mult", ModifKinds::Character),
985    ("monthly_war_merit_income_add", ModifKinds::Character),
986    ("monthly_war_merit_income_mult", ModifKinds::Character),
987    ("monthly_war_piety_income_add", ModifKinds::Character),
988    ("monthly_war_piety_income_mult", ModifKinds::Character),
989    ("monthly_war_prestige_income_add", ModifKinds::Character),
990    ("monthly_war_prestige_income_mult", ModifKinds::Character),
991    ("movement_speed", ModifKinds::Character),
992    ("movement_speed_land_raiding", ModifKinds::Character),
993    ("naval_movement_speed_mult", ModifKinds::Character),
994    ("negate_diplomacy_penalty_add", ModifKinds::Character),
995    ("negate_fertility_penalty_add", ModifKinds::Character),
996    ("negate_health_penalty_add", ModifKinds::Character),
997    ("negate_intrigue_penalty_add", ModifKinds::Character),
998    ("negate_learning_penalty_add", ModifKinds::Character),
999    ("negate_martial_penalty_add", ModifKinds::Character),
1000    ("negate_prowess_penalty_add", ModifKinds::Character),
1001    ("negate_stewardship_penalty_add", ModifKinds::Character),
1002    ("negative_inactive_inheritance_chance", ModifKinds::Character),
1003    ("negative_random_genetic_chance", ModifKinds::Character),
1004    ("no_disembark_penalty", ModifKinds::Character),
1005    ("no_prowess_loss_from_age", ModifKinds::Character),
1006    ("no_water_crossing_penalty", ModifKinds::Character),
1007    ("opinion_of_different_culture", ModifKinds::Character),
1008    ("opinion_of_different_faith", ModifKinds::Character),
1009    ("opinion_of_different_faith_liege", ModifKinds::Character),
1010    ("opinion_of_different_faith_suzerain", ModifKinds::Character),
1011    ("opinion_of_female_rulers", ModifKinds::Character),
1012    ("opinion_of_liege", ModifKinds::Character),
1013    ("opinion_of_male_rulers", ModifKinds::Character),
1014    ("opinion_of_parents", ModifKinds::Character),
1015    ("opinion_of_same_culture", ModifKinds::Character),
1016    ("opinion_of_same_faith", ModifKinds::Character),
1017    ("opinion_of_suzerain", ModifKinds::Character),
1018    ("opinion_of_tributary", ModifKinds::Character),
1019    ("opinion_of_vassal", ModifKinds::Character),
1020    ("owned_contract_scheme_success_chance_add", ModifKinds::Character),
1021    ("owned_contract_scheme_success_chance_growth_add", ModifKinds::Character),
1022    ("owned_contract_scheme_success_chance_max_add", ModifKinds::Character),
1023    ("owned_hostile_scheme_success_chance_add", ModifKinds::Character),
1024    ("owned_hostile_scheme_success_chance_growth_add", ModifKinds::Character),
1025    ("owned_hostile_scheme_success_chance_max_add", ModifKinds::Character),
1026    ("owned_legend_spread_add", ModifKinds::Character),
1027    ("owned_legend_spread_mult", ModifKinds::Character),
1028    ("owned_personal_scheme_success_chance_add", ModifKinds::Character),
1029    ("owned_personal_scheme_success_chance_growth_add", ModifKinds::Character),
1030    ("owned_personal_scheme_success_chance_max_add", ModifKinds::Character),
1031    ("owned_political_scheme_success_chance_add", ModifKinds::Character),
1032    ("owned_political_scheme_success_chance_growth_add", ModifKinds::Character),
1033    ("owned_political_scheme_success_chance_max_add", ModifKinds::Character),
1034    ("owned_scheme_secrecy_add", ModifKinds::Character),
1035    ("personal_scheme_phase_duration_add", ModifKinds::Character),
1036    ("piety_level_impact_mult", ModifKinds::Character),
1037    ("player_heir_opinion", ModifKinds::Character),
1038    ("political_scheme_phase_duration_add", ModifKinds::Character),
1039    ("positive_inactive_inheritance_chance", ModifKinds::Character),
1040    ("positive_random_genetic_chance", ModifKinds::Character),
1041    ("powerful_vassal_opinion", ModifKinds::Character),
1042    ("prestige_level_impact_mult", ModifKinds::Character),
1043    ("prisoner_opinion", ModifKinds::Character),
1044    ("provisions_capacity_add", ModifKinds::Character.union(ModifKinds::Terrain)),
1045    ("provisions_capacity_mult", ModifKinds::Character.union(ModifKinds::Terrain)),
1046    ("provisions_gain_mult", ModifKinds::Character.union(ModifKinds::Terrain)),
1047    ("provisions_loss_mult", ModifKinds::Character.union(ModifKinds::Terrain)),
1048    (
1049        "provisions_use_mult",
1050        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
1051    ),
1052    ("prowess", ModifKinds::Character),
1053    ("prowess_mult", ModifKinds::Character),
1054    ("prowess_no_portrait", ModifKinds::Character),
1055    ("prowess_per_influence_level", ModifKinds::Character),
1056    ("prowess_per_merit_level", ModifKinds::Character),
1057    ("prowess_per_piety_level", ModifKinds::Character),
1058    ("prowess_per_prestige_level", ModifKinds::Character),
1059    ("prowess_per_stress_level", ModifKinds::Character),
1060    ("prowess_scheme_phase_duration", ModifKinds::Character),
1061    ("prowess_scheme_resistance", ModifKinds::Character),
1062    ("pursue_efficiency", ModifKinds::Character.union(ModifKinds::Terrain)),
1063    ("raid_speed", ModifKinds::Character),
1064    ("realm_priest_opinion", ModifKinds::Character),
1065    ("religious_head_opinion", ModifKinds::Character),
1066    ("religious_vassal_opinion", ModifKinds::Character),
1067    ("retreat_losses", ModifKinds::Character.union(ModifKinds::Terrain)),
1068    ("revolting_siege_morale_loss_add", ModifKinds::Character),
1069    ("revolting_siege_morale_loss_mult", ModifKinds::Character),
1070    ("same_culture_holy_order_hire_cost_add", ModifKinds::Character),
1071    ("same_culture_holy_order_hire_cost_mult", ModifKinds::Character),
1072    ("same_culture_mercenary_hire_cost_add", ModifKinds::Character),
1073    ("same_culture_mercenary_hire_cost_mult", ModifKinds::Character),
1074    ("same_culture_opinion", ModifKinds::Character),
1075    ("same_faith_opinion", ModifKinds::Character),
1076    ("same_heritage_county_advantage_add", ModifKinds::Character),
1077    ("scheme_discovery_chance_mult", ModifKinds::Character),
1078    ("scheme_phase_duration", ModifKinds::Scheme),
1079    ("scheme_resistance", ModifKinds::Scheme),
1080    ("scheme_secrecy", ModifKinds::Scheme),
1081    ("scheme_success_chance", ModifKinds::Scheme),
1082    ("scheme_success_chance_growth", ModifKinds::Scheme),
1083    ("scheme_success_chance_max", ModifKinds::Scheme),
1084    ("short_reign_duration_mult", ModifKinds::Character),
1085    ("siege_morale_loss", ModifKinds::Character),
1086    ("siege_phase_time", ModifKinds::Character.union(ModifKinds::Province)),
1087    ("spouse_opinion", ModifKinds::Character),
1088    ("stationed_maa_damage_add", ModifKinds::Province),
1089    ("stationed_maa_damage_mult", ModifKinds::Province),
1090    ("stationed_maa_damage_mult_per_piety_level", ModifKinds::Province),
1091    ("stationed_maa_pursuit_add", ModifKinds::Province),
1092    ("stationed_maa_pursuit_mult", ModifKinds::Province),
1093    ("stationed_maa_screen_add", ModifKinds::Province),
1094    ("stationed_maa_screen_mult", ModifKinds::Province),
1095    ("stationed_maa_siege_value_add", ModifKinds::Province),
1096    ("stationed_maa_siege_value_mult", ModifKinds::Province),
1097    ("stationed_maa_toughness_add", ModifKinds::Province),
1098    ("stationed_maa_toughness_mult", ModifKinds::Province),
1099    ("stationed_maa_toughness_mult_per_piety_level", ModifKinds::Province),
1100    ("stewardship", ModifKinds::Character),
1101    ("stewardship_mult", ModifKinds::Character),
1102    ("stewardship_per_influence_level", ModifKinds::Character),
1103    ("stewardship_per_merit_level", ModifKinds::Character),
1104    ("stewardship_per_piety_level", ModifKinds::Character),
1105    ("stewardship_per_prestige_level", ModifKinds::Character),
1106    ("stewardship_per_stress_level", ModifKinds::Character),
1107    ("stewardship_scheme_phase_duration", ModifKinds::Character),
1108    ("stewardship_scheme_resistance", ModifKinds::Character),
1109    ("stress_gain_mult", ModifKinds::Character),
1110    ("stress_loss_mult", ModifKinds::Character),
1111    ("stress_loss_per_piety_level", ModifKinds::Character),
1112    ("stress_loss_per_prestige_level", ModifKinds::Character),
1113    ("strife_opinion_gain_mult", ModifKinds::Character),
1114    ("strife_opinion_loss_mult", ModifKinds::Character),
1115    ("subject_salary_expense_barter_goods_add", ModifKinds::Character),
1116    ("subject_salary_expense_barter_goods_mult", ModifKinds::Character),
1117    ("subject_salary_expense_gold_add", ModifKinds::Character),
1118    ("subject_salary_expense_gold_mult", ModifKinds::Character),
1119    ("subject_salary_expense_herd_add", ModifKinds::Character),
1120    ("subject_salary_expense_herd_mult", ModifKinds::Character),
1121    ("subject_salary_expense_influence_add", ModifKinds::Character),
1122    ("subject_salary_expense_influence_mult", ModifKinds::Character),
1123    ("subject_salary_expense_merit_add", ModifKinds::Character),
1124    ("subject_salary_expense_merit_mult", ModifKinds::Character),
1125    ("subject_salary_expense_piety_add", ModifKinds::Character),
1126    ("subject_salary_expense_piety_mult", ModifKinds::Character),
1127    ("subject_salary_expense_prestige_add", ModifKinds::Character),
1128    ("subject_salary_expense_prestige_mult", ModifKinds::Character),
1129    ("subject_salary_expense_renown_add", ModifKinds::Character),
1130    ("subject_salary_expense_renown_mult", ModifKinds::Character),
1131    ("subject_salary_expense_treasury_or_gold_add", ModifKinds::Character),
1132    ("subject_salary_expense_treasury_or_gold_mult", ModifKinds::Character),
1133    ("subject_salary_expense_treasury_add", ModifKinds::Character),
1134    ("subject_salary_expense_treasury_mult", ModifKinds::Character),
1135    ("subject_salary_expense_add", ModifKinds::Character),
1136    ("subject_salary_expense_mult", ModifKinds::Character),
1137    ("subject_salary_income_barter_goods_add", ModifKinds::Character),
1138    ("subject_salary_income_barter_goods_mult", ModifKinds::Character),
1139    ("subject_salary_income_gold_add", ModifKinds::Character),
1140    ("subject_salary_income_gold_mult", ModifKinds::Character),
1141    ("subject_salary_income_herd_add", ModifKinds::Character),
1142    ("subject_salary_income_herd_mult", ModifKinds::Character),
1143    ("subject_salary_income_influence_add", ModifKinds::Character),
1144    ("subject_salary_income_influence_mult", ModifKinds::Character),
1145    ("subject_salary_income_merit_add", ModifKinds::Character),
1146    ("subject_salary_income_merit_mult", ModifKinds::Character),
1147    ("subject_salary_income_piety_add", ModifKinds::Character),
1148    ("subject_salary_income_piety_mult", ModifKinds::Character),
1149    ("subject_salary_income_prestige_add", ModifKinds::Character),
1150    ("subject_salary_income_prestige_mult", ModifKinds::Character),
1151    ("subject_salary_income_renown_add", ModifKinds::Character),
1152    ("subject_salary_income_renown_mult", ModifKinds::Character),
1153    ("subject_salary_income_treasury_or_gold_add", ModifKinds::Character),
1154    ("subject_salary_income_treasury_or_gold_mult", ModifKinds::Character),
1155    ("subject_salary_income_treasury_add", ModifKinds::Character),
1156    ("subject_salary_income_treasury_mult", ModifKinds::Character),
1157    ("subject_salary_income_add", ModifKinds::Character),
1158    ("subject_salary_income_mult", ModifKinds::Character),
1159    ("supply_capacity_add", ModifKinds::Character),
1160    ("supply_capacity_mult", ModifKinds::Character),
1161    ("supply_duration", ModifKinds::Character),
1162    ("supply_limit", ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County)),
1163    (
1164        "supply_limit_mult",
1165        ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County),
1166    ),
1167    ("supply_loss_winter", ModifKinds::Province),
1168    ("suzerain_opinion", ModifKinds::Character),
1169    ("tax_mult", ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County)),
1170    ("tax_per_piety_level", ModifKinds::Province),
1171    ("tax_slot_add", ModifKinds::Character),
1172    ("title_creation_cost", ModifKinds::Character),
1173    ("title_creation_cost_mult", ModifKinds::Character),
1174    ("title_creation_piety_cost", ModifKinds::Character),
1175    ("title_creation_piety_cost_mult", ModifKinds::Character),
1176    ("tolerance_advantage_mod", ModifKinds::Character),
1177    ("travel_companion_opinion", ModifKinds::Character),
1178    ("travel_danger", ModifKinds::Character.union(ModifKinds::Province).union(ModifKinds::County)),
1179    ("travel_safety_mult", ModifKinds::TravelPlan),
1180    ("travel_safety", ModifKinds::TravelPlan),
1181    ("travel_speed_mult", ModifKinds::TravelPlan),
1182    ("travel_speed", ModifKinds::TravelPlan),
1183    ("treasury_military_budget_allocation", ModifKinds::Character),
1184    ("treasury_ministry_budget_allocation", ModifKinds::Character),
1185    ("treasury_salary_budget_allocation", ModifKinds::Character),
1186    ("tributary_opinion", ModifKinds::Character),
1187    ("tributary_piety_contribution_mult", ModifKinds::Character),
1188    ("tributary_tax_mult", ModifKinds::Character),
1189    ("twin_opinion", ModifKinds::Character),
1190    ("tyranny_gain_mult", ModifKinds::Character),
1191    ("tyranny_loss_mult", ModifKinds::Character),
1192    ("uncontrolled_province_advantage", ModifKinds::Character),
1193    ("vassal_herd_contribution_add", ModifKinds::Character),
1194    ("vassal_herd_contribution_mult", ModifKinds::Character),
1195    ("vassal_herder_contribution_add", ModifKinds::Character),
1196    ("vassal_herder_contribution_mult", ModifKinds::Character),
1197    ("vassal_levy_contribution_add", ModifKinds::Character),
1198    ("vassal_levy_contribution_mult", ModifKinds::Character),
1199    ("vassal_limit", ModifKinds::Character),
1200    ("vassal_limit_max", ModifKinds::Character),
1201    ("vassal_limit_min", ModifKinds::Character),
1202    ("vassal_opinion", ModifKinds::Character),
1203    ("vassal_barter_goods_contribution_add", ModifKinds::Character),
1204    ("vassal_barter_goods_contribution_mult", ModifKinds::Character),
1205    ("vassal_piety_contribution_add", ModifKinds::Character),
1206    ("vassal_piety_contribution_mult", ModifKinds::Character),
1207    ("vassal_prestige_contribution_add", ModifKinds::Character),
1208    ("vassal_prestige_contribution_mult", ModifKinds::Character),
1209    ("vassal_tax_contribution_add", ModifKinds::Character),
1210    ("vassal_tax_contribution_mult", ModifKinds::Character),
1211    ("vassal_tax_mult", ModifKinds::Character),
1212    ("winter_advantage", ModifKinds::Character),
1213    ("winter_movement_speed", ModifKinds::Character),
1214    ("years_of_fertility", ModifKinds::Character),
1215];
1216
1217static SPECIAL_MODIF_LOC_MAP: LazyLock<TigerHashMap<Lowercase<'static>, &'static str>> =
1218    LazyLock::new(|| {
1219        let mut hash = TigerHashMap::default();
1220        for (s, loc) in SPECIAL_MODIF_LOC_TABLE.iter().copied() {
1221            hash.insert(Lowercase::new_unchecked(s), loc);
1222        }
1223        hash
1224    });
1225
1226/// LAST UPDATED CK3 VERSION 1.15.0
1227/// Special cases for static modifs defined in `modifiers/modifiers_l_english.yml`
1228const SPECIAL_MODIF_LOC_TABLE: &[(&str, &str)] = &[
1229    // Negate penalty
1230    ("negate_diplomacy_penalty_add", "MOD_DIPLOMACY_NEGATE_PENALTY"),
1231    ("negate_intrigue_penalty_add", "MOD_INTRIGUE_NEGATE_PENALTY"),
1232    ("negate_learning_penalty_add", "MOD_LEARNING_NEGATE_PENALTY"),
1233    ("negate_martial_penalty_add", "MOD_MARTIAL_NEGATE_PENALTY"),
1234    ("negate_prowess_penalty_add", "MOD_PROWESS_NEGATE_PENALTY"),
1235    ("negate_stewardship_penalty_add", "MOD_STEWARDSHIP_NEGATE_PENALTY"),
1236    ("negate_fertility_penalty_add", "MOD_FERTILITY_NEGATE_PENALTY"),
1237    // Combat
1238    ("pursue_efficiency", "MOD_COMBAT_PURSUE_EFFICIENCY"),
1239    ("counter_efficiency", "MOD_COMBAT_COUNTER_EFFICIENCY"),
1240    ("counter_resistance", "MOD_COMBAT_COUNTER_RESISTANCE"),
1241    // Scheme
1242    ("scheme_success_chance", "MOD_SCHEME_SUCCESS"),
1243    ("owned_hostile_scheme_success_chance_add", "MOD_OWNED_HOSTILE_SCHEME_SUCCESS_ADD"),
1244    ("enemy_hostile_scheme_success_chance_add", "MOD_ENEMY_HOSTILE_SCHEME_SUCCESS_ADD"),
1245    ("owned_personal_scheme_success_chance_add", "MOD_OWNED_PERSONAL_SCHEME_SUCCESS_ADD"),
1246    ("enemy_personal_scheme_success_chance_add", "MOD_ENEMY_PERSONAL_SCHEME_SUCCESS_ADD"),
1247    // Advantage
1248    ("tolerance_advantage_mod", "MOD_FAITH_HOSTILITY_ADVANTAGE_MOD"),
1249    ("advantage_against_coreligionists", "MOD_CORELIGIONIST_ADVANTAGE_MOD"),
1250    ("led_by_owner_extra_advantage_add", "MOD_LEAD_BY_OWNER_ADVANTAGE"),
1251    ("same_heritage_county_advantage_add", "MOD_SAME_HERITAGE_COUNTY_ADVANTAGE"),
1252    ("independent_primary_defender_advantage_add", "MOD_INDEPENDENT_PRIMARY_DEFENDER_ADVANTAGE"),
1253    // Fort level
1254    ("fort_level", "MOD_HOLDING_FORT_LEVEL"),
1255    ("additional_fort_level", "MOD_ADDITIONAL_HOLDING_FORT_LEVEL"),
1256    // Construction
1257    ("build_speed", "MOD_CONSTRUCTION_SPEED"),
1258    ("build_gold_cost", "MOD_CONSTRUCTION_GOLD_COST"),
1259    ("build_piety_cost", "MOD_CONSTRUCTION_PIETY_COST"),
1260    ("build_prestige_cost", "MOD_CONSTRUCTION_PRESTIGE_COST"),
1261    ("holding_build_speed", "MOD_HOLDING_CONSTRUCTION_SPEED"),
1262    ("holding_build_gold_cost", "MOD_HOLDING_CONSTRUCTION_GOLD_COST"),
1263    ("holding_build_piety_cost", "MOD_HOLDING_CONSTRUCTION_PIETY_COST"),
1264    ("holding_build_prestige_cost", "MOD_HOLDING_CONSTRUCTION_PRESTIGE_COST"),
1265    // Building Slot
1266    ("building_slot_add", "MOD_NUM_BUILDING_SLOTS"),
1267    // County
1268    ("development_decline_factor", "MOD_MONTHLY_DEVELOPMENT_DECLINE_FACTOR"),
1269    ("development_decline", "MOD_MONTHLY_DEVELOPMENT_DECLINE"),
1270    ("development_growth_factor", "MOD_MONTHLY_DEVELOPMENT_GROWTH_FACTOR"),
1271    ("development_growth", "MOD_MONTHLY_DEVELOPMENT_GROWTH"),
1272    (
1273        "character_capital_county_monthly_development_growth_add",
1274        "MOD_CHARACTER_CAPITAL_MONTHLY_DEVELOPMENT_GROWTH_ADD",
1275    ),
1276    ("monthly_county_control_decline_add", "MOD_MONTHLY_COUNTY_CONTROL_DECLINE"),
1277    ("monthly_county_control_growth_add", "MOD_MONTHLY_COUNTY_CONTROL_GROWTH"),
1278    (
1279        "monthly_county_control_decline_add_even_if_baron",
1280        "MOD_MONTHLY_COUNTY_CONTROL_DECLINE_EVEN_IF_BARON",
1281    ),
1282    (
1283        "monthly_county_control_growth_add_even_if_baron",
1284        "MOD_MONTHLY_COUNTY_CONTROL_GROWTH_EVEN_IF_BARON",
1285    ),
1286    ("monthly_county_control_decline_at_war_add", "MOD_MONTHLY_COUNTY_CONTROL_DECLINE_AT_WAR"),
1287    ("monthly_county_control_growth_at_war_add", "MOD_MONTHLY_COUNTY_CONTROL_GROWTH_AT_WAR"),
1288    (
1289        "monthly_county_control_decline_at_war_factor",
1290        "MOD_MONTHLY_COUNTY_CONTROL_DECLINE_FACTOR_AT_WAR",
1291    ),
1292    (
1293        "monthly_county_control_growth_at_war_factor",
1294        "MOD_MONTHLY_COUNTY_CONTROL_GROWTH_FACTOR_AT_WAR",
1295    ),
1296    ("different_faith_county_opinion_mult", "MOD_COUNTY_OPINION_DIFFERENT_FAITH_MULT"),
1297    (
1298        "different_faith_county_opinion_mult_even_if_baron",
1299        "MOD_COUNTY_OPINION_DIFFERENT_FAITH_MULT_EVEN_IF_BARON",
1300    ),
1301    // Culture
1302    ("mercenary_count_mult", "MOD_CULTURE_MERCENARY_MULT"),
1303    ("cultural_head_fascination_add", "MOD_CULTURAL_FASCINATION_INNOVATION_ADD"),
1304    ("cultural_head_fascination_mult", "MOD_CULTURAL_FASCINATION_INNOVATION_MULT"),
1305    ("culture_tradition_max_add", "MODE_CULTURE_TRADITION_MAX_ADD"), // sic
1306    // Court
1307    ("court_grandeur_baseline_add", "MOD_COURT_GRANDEUR_BASELINE"),
1308    // Tax Slot
1309    ("tax_slot_add", "MOD_NUM_TAX_SLOTS"),
1310];
1311
1312static MODIF_REMOVED_MAP: LazyLock<TigerHashMap<Lowercase<'static>, &'static str>> =
1313    LazyLock::new(|| {
1314        let mut hash = TigerHashMap::default();
1315        for (s, info) in MODIF_REMOVED_TABLE.iter().copied() {
1316            hash.insert(Lowercase::new_unchecked(s), info);
1317        }
1318        hash
1319    });
1320
1321const MODIF_REMOVED_TABLE: &[(&str, &str)] = &[
1322    (
1323        "monthly_county_control_change_add_even_if_baron",
1324        "replaced with monthly_county_control_decline_add_even_if_baron and monthly_county_control_growth_add_even_if_baron",
1325    ),
1326    (
1327        "monthly_county_control_change_factor_even_if_baron",
1328        "replaced with monthly_county_control_decline_factor_even_if_baron and monthly_county_control_growth_factor_even_if_baron",
1329    ),
1330    (
1331        "monthly_county_control_change_add",
1332        "replaced with monthly_county_control_decline_add and monthly_county_control_growth_add",
1333    ),
1334    (
1335        "monthly_county_control_change_factor",
1336        "replaced with monthly_county_control_decline_factor and monthly_county_control_growth_factor",
1337    ),
1338    (
1339        "monthly_county_control_change_at_war_add",
1340        "replaced with monthly_county_control_decline_at_war_add and monthly_county_control_growth_at_war_add",
1341    ),
1342    (
1343        "monthly_county_control_change_at_war_mult",
1344        "replaced with monthly_county_control_decline_at_war_factor and monthly_county_control_growth_at_war_factor",
1345    ),
1346    ("diplomacy_scheme_power", "replaced with diplomacy_scheme_phase_duration"),
1347    ("intrigue_scheme_power", "replaced with intrigue_scheme_phase_duration"),
1348    ("learning_scheme_power", "replaced with learning_scheme_phase_duration"),
1349    ("martial_scheme_power", "replaced with martial_scheme_phase_duration"),
1350    ("prowess_scheme_power", "replaced with prowess_scheme_phase_duration"),
1351    ("stewardship_scheme_power", "replaced with stewardship_scheme_phase_duration"),
1352    ("scheme_power", "replaced with scheme_phase_duration"),
1353    ("hostile_scheme_power_add", "replaced with hostile_scheme_phase_duration_add"),
1354    ("hostile_scheme_power_mult", "removed in 1.13"),
1355    ("hostile_scheme_resistance_add", "removed in 1.13"),
1356    ("hostile_scheme_resistance_mult", "removed in 1.13"),
1357    ("legitimacy_baseline_add", "removed in 1.13"),
1358    ("personal_scheme_power_add", "replaced with personal_scheme_phase_duration_add"),
1359    ("personal_scheme_power_mult", "removed in 1.13"),
1360    ("personal_scheme_resistance_add", "removed in 1.13"),
1361    ("personal_scheme_resistance_mult", "removed in 1.13"),
1362    ("random_advantage", "removed in 1.13"),
1363    ("siege_phase_time", "removed in 1.18"),
1364];