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
14pub 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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
428pub 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
451const 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
1226const SPECIAL_MODIF_LOC_TABLE: &[(&str, &str)] = &[
1229 ("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 ("pursue_efficiency", "MOD_COMBAT_PURSUE_EFFICIENCY"),
1239 ("counter_efficiency", "MOD_COMBAT_COUNTER_EFFICIENCY"),
1240 ("counter_resistance", "MOD_COMBAT_COUNTER_RESISTANCE"),
1241 ("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 ("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", "MOD_HOLDING_FORT_LEVEL"),
1255 ("additional_fort_level", "MOD_ADDITIONAL_HOLDING_FORT_LEVEL"),
1256 ("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_add", "MOD_NUM_BUILDING_SLOTS"),
1267 ("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 ("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"), ("court_grandeur_baseline_add", "MOD_COURT_GRANDEUR_BASELINE"),
1308 ("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];