tiger_lib/ck3/data/
flavorization.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::validator::Validator;
8
9#[derive(Clone, Debug)]
10pub struct Flavorization {}
11
12inventory::submit! {
13 ItemLoader::Normal(GameFlags::Ck3, Item::Flavorization, Flavorization::add)
14}
15
16impl Flavorization {
17 pub fn add(db: &mut Db, key: Token, block: Block) {
18 db.add(Item::Flavorization, key, block, Box::new(Self {}));
19 }
20}
21
22impl DbKind for Flavorization {
23 fn validate(&self, key: &Token, block: &Block, data: &Everything) {
24 let mut vd = Validator::new(block, data);
25
26 data.verify_exists(Item::Localization, key);
27
28 vd.req_field("type");
29 vd.field_choice("type", &["character", "title", "domicile"]);
30 let flavor_type = block.get_field_value("type").map_or("none", Token::as_str);
31 if flavor_type == "character" {
32 vd.field_choice("gender", &["male", "female"]);
33 vd.field_choice(
34 "special",
35 &[
36 "ruler_child",
37 "holder",
38 "queen_mother",
39 "head_of_faith",
40 "councillor",
41 "domicile",
42 ],
43 );
44 } else {
45 vd.ban_field("gender", || "type = character");
46 vd.ban_field("special", || "type = character");
47 }
48 if flavor_type == "character" || flavor_type == "title" {
49 vd.field_choice(
50 "tier",
51 &["hegemony", "empire", "kingdom", "duchy", "county", "barony", "none"],
52 );
53 } else {
54 vd.ban_field("tier", || "type = character or title");
55 }
56 vd.field_integer("priority");
57 vd.advice_field("flavorization_rules", "Should be `flavourization_rules`");
58 vd.field_validated_block("flavourization_rules", |block, data| {
59 let mut vd = Validator::new(block, data);
60 vd.field_bool("faction");
61 vd.field_bool("only_independent");
62 vd.field_bool("spouse_takes_title");
63 vd.field_bool("only_holder");
64 vd.field_bool("top_liege");
65 vd.field_bool("only_vassals");
66 vd.field_bool("ignore_top_liege_government");
67 });
68 vd.field_value("flag");
69 vd.field_list_items("governments", Item::GovernmentType);
70 vd.field_item("domicile_type", Item::DomicileType);
71 vd.field_list_items("name_lists", Item::NameList);
72 vd.field_list_items("heritages", Item::CultureHeritage);
73 vd.field_list_items("faiths", Item::Faith);
74 vd.field_list_items("religions", Item::Religion);
75 vd.field_item("council_position", Item::CouncilPosition);
76 vd.field_list_items("de_jure_liege", Item::Title);
77 vd.field_item("holding", Item::HoldingType);
78 vd.field_list_items("titles", Item::Title);
79 vd.field_list("subject_contract_obligation_flags");
81
82 vd.advice_field("top_liege", "moved into flavorization_rules");
83 vd.advice_field("only_holder", "moved into flavorization_rules");
84 vd.advice_field("only_independent", "moved into flavorization_rules");
85 vd.advice_field("faction", "moved into flavorization_rules");
86 }
87}