tiger_lib/vic3/data/
cultures.rs1use crate::block::Block;
2use crate::db::{Db, DbKind};
3use crate::everything::Everything;
4use crate::game::GameFlags;
5use crate::item::{Item, ItemLoader};
6use crate::token::Token;
7use crate::validate::validate_possibly_named_color;
8use crate::validator::Validator;
9use crate::vic3::tables::modifs::maybe_warn_modifiable_capitalization;
10
11#[derive(Clone, Debug)]
12pub struct Culture {}
13
14inventory::submit! {
15 ItemLoader::Normal(GameFlags::Vic3, Item::Culture, Culture::add)
16}
17
18impl Culture {
19 pub fn add(db: &mut Db, key: Token, block: Block) {
20 db.add(Item::Culture, key, block, Box::new(Self {}));
21 }
22}
23
24impl DbKind for Culture {
25 fn validate(&self, key: &Token, block: &Block, data: &Everything) {
26 maybe_warn_modifiable_capitalization(key);
27
28 let mut vd = Validator::new(block, data);
29
30 data.verify_exists(Item::Localization, key);
31
32 let modif = format!("{key}_standard_of_living_modifier_positive");
34 data.verify_exists_implied(Item::Modifier, &modif, key);
35 let modif = format!("{key}_standard_of_living_modifier_negative");
36 data.verify_exists_implied(Item::Modifier, &modif, key);
37 let modif = format!("{key}_cultural_acceptance_modifier_positive");
38 data.verify_exists_implied(Item::Modifier, &modif, key);
39 let modif = format!("{key}_cultural_acceptance_modifier_negative");
40 data.verify_exists_implied(Item::Modifier, &modif, key);
41 let modif = format!("{key}_fervor_target_modifier_positive");
42 data.verify_exists_implied(Item::Modifier, &modif, key);
43 let modif = format!("{key}_fervor_target_modifier_negative");
44 data.verify_exists_implied(Item::Modifier, &modif, key);
45
46 vd.field_validated("color", validate_possibly_named_color);
47 vd.field_item("religion", Item::Religion);
48 vd.advice_field("traits", "replaced with language, heritage, and traditions");
49 vd.field_item("language", Item::LanguageTrait);
50 vd.field_item("heritage", Item::HeritageTrait);
51 vd.multi_field_list_items("traditions", Item::TraditionTrait);
52
53 vd.multi_field_list_items("male_common_first_names", Item::Localization);
54 vd.multi_field_list_items("female_common_first_names", Item::Localization);
55 vd.multi_field_list_items("male_noble_first_names", Item::Localization);
56 vd.multi_field_list_items("female_noble_first_names", Item::Localization);
57 vd.multi_field_list_items("male_regal_first_names", Item::Localization);
58 vd.multi_field_list_items("female_regal_first_names", Item::Localization);
59 vd.multi_field_list_items("common_last_names", Item::Localization);
60 vd.multi_field_list_items("noble_last_names", Item::Localization);
61 vd.multi_field_list_items("regal_last_names", Item::Localization);
62
63 vd.multi_field_list_items("obsessions", Item::Goods);
64 vd.multi_field_list_items("taboos", Item::Goods);
65
66 vd.field_item("graphics", Item::CultureGraphics);
67 vd.multi_field_validated_block("ethnicities", |block, data| {
68 let mut vd = Validator::new(block, data);
69 vd.numeric_keys(|_, bv| {
70 if let Some(token) = bv.expect_value() {
71 data.verify_exists(Item::Ethnicity, token);
72 }
73 });
74 });
75
76 vd.field_value("name_format"); }
80}
81
82#[derive(Clone, Debug)]
83pub struct CultureGraphics {}
84
85inventory::submit! {
86 ItemLoader::Normal(GameFlags::Vic3, Item::CultureGraphics, CultureGraphics::add)
87}
88
89impl CultureGraphics {
90 pub fn add(db: &mut Db, key: Token, block: Block) {
91 db.add(Item::CultureGraphics, key, block, Box::new(Self {}));
92 }
93}
94
95impl DbKind for CultureGraphics {
96 fn validate(&self, _key: &Token, block: &Block, data: &Everything) {
97 Validator::new(block, data);
99 }
100}