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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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
431pub 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
454const 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
1223const SPECIAL_MODIF_LOC_TABLE: &[(&str, &str)] = &[
1226 ("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 ("pursue_efficiency", "MOD_COMBAT_PURSUE_EFFICIENCY"),
1236 ("counter_efficiency", "MOD_COMBAT_COUNTER_EFFICIENCY"),
1237 ("counter_resistance", "MOD_COMBAT_COUNTER_RESISTANCE"),
1238 ("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 ("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", "MOD_HOLDING_FORT_LEVEL"),
1252 ("additional_fort_level", "MOD_ADDITIONAL_HOLDING_FORT_LEVEL"),
1253 ("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_add", "MOD_NUM_BUILDING_SLOTS"),
1264 ("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 ("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"), ("court_grandeur_baseline_add", "MOD_COURT_GRANDEUR_BASELINE"),
1305 ("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];