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