tiger_lib/ck3/tables/
localization.rs

1use std::sync::LazyLock;
2
3use crate::helpers::{TigerHashMap, TigerHashSet};
4use crate::item::Item;
5
6pub(crate) static BUILTIN_MACROS_CK3: LazyLock<TigerHashSet<&'static str>> =
7    LazyLock::new(|| BUILTIN_MACROS.iter().copied().collect());
8
9// LAST UPDATED CK3 VERSION 1.12.3
10// The table entries were collected by analyzing tiger's own output.
11const BUILTIN_MACROS: &[&str] = &[
12    "1",
13    "2",
14    "3",
15    "ACCEPTANCE",
16    "ACCOLADE_ID",
17    "ACTION",
18    "ACTIVITY_PROVINCE_DESCRIPTION",
19    "ACTUAL_NEGATION",
20    "ACTUAL_POS",
21    "ADJECTIVE",
22    "ADJUSTMENTS",
23    "ADVANTAGE",
24    "ADVANTAGE_DAMAGE_FACTOR",
25    "AGE",
26    "ALPHA",
27    "AMOUNT",
28    "AMOUNT_ALLOWED",
29    "APTITUDE",
30    "ARMY_SIZE",
31    "ARTIFACT_NAME",
32    "BACKEND",
33    "BALANCE",
34    "BASELINE",
35    "BASE_NAME",
36    "BATTLENAME",
37    "BIRTH",
38    "BLOCK_REASON",
39    "BLUE",
40    "BRANCH",
41    "BUDGET_CATEGORY",
42    "BUDGET_GOLD",
43    "BUDGET_MAXIMUM",
44    "BUILDING",
45    "BUILDING_NAME",
46    "BULDING",
47    "CAP",
48    "CASUALTIES",
49    "CASUS_BELLI",
50    "CATALYST_INFO",
51    "CATALYST_NAME",
52    "CATALYST_VALUE",
53    "CATEGORY",
54    "CATEGORY_NAME",
55    "CAUSE",
56    "CHANCE",
57    "CHAR01",
58    "CHAR02",
59    "CHARACTER",
60    "CHARACTER_ID",
61    "CHARACTER_LIST",
62    "CHARACTER_POSITION",
63    "CHARACTER_TOOLTIP",
64    "CHARACTER_TOOLTIP_INSTRUCTIONS",
65    "CHECK_VALUE",
66    "CLAIM",
67    "CLOTHES",
68    "COAT_OF_ARMS",
69    "COA_CLICK_INFO",
70    "COA_DE_JURE_TITLE",
71    "COA_HOLDER",
72    "COA_TITLE",
73    "COMBAT_RELATION_FAVOR",
74    "COMBAT_RELATION_POSSESIVE", // sic
75    "COMMIT_COUNT",
76    "COMPANIONS",
77    "COMPARATOR",
78    "COMPARISON",
79    "CONTRACT_LEVEL_NAME",
80    "CONTRACT_TYPE",
81    "CONTROLLER",
82    "COOLDOWN",
83    "COST",
84    "COSTS",
85    "COUNCIL_TITLE",
86    "COUNT",
87    "COUNTED",
88    "COURTS",
89    "COURT_AMENITY",
90    "COURT_AMENITY_CATEGORY",
91    "COURT_AMENITY_SETTING",
92    "COURT_POSITION",
93    "CULTURE_CURRENT_PERC",
94    "CULTURE_ID",
95    "CULTURE_NAME",
96    "CULTURE_PERC",
97    "CURRENT",
98    "CURRENT_GOLD",
99    "CURRENT_VALUE",
100    "DATE",
101    "DATE_MAX",
102    "DATE_MIN",
103    "DAY",
104    "DAYS_LEFT",
105    "DAYS_UNTIL_TRANSITION",
106    "DEAD",
107    "DECISION_NAME",
108    "DECLINING_GUESTS",
109    "DEFAULT_SETTING",
110    "DESC",
111    "DESCRIPTION",
112    "DESCRIPTION_AND_EFFECT",
113    "DESC_KEY",
114    "DIARCHY_TYPE",
115    "DISABLED",
116    "DISBANDED",
117    "DISCONTENT",
118    "DLC_NAME",
119    "DOCTRINE",
120    "DURABILITY",
121    "DURATION",
122    "DURATION_MAX",
123    "DURATION_MIN",
124    "EFFECT",
125    "EFFECTIVENESS",
126    "EFFECTS",
127    "EFFECT_DESC_KEY",
128    "EMPLOYEE",
129    "EMPLOYER",
130    "ENTRIES",
131    "EPIDEMIC_NAMES",
132    "ERA",
133    "ERA_INDEX",
134    "ERA_TYPE",
135    "ERROR",
136    "ERRORS",
137    "ERROR_ACTION",
138    "ETA",
139    "EVENT",
140    "EVENT_NAME",
141    "EVENT_TIMEOUT_EFFECTS",
142    "EVENT_TITLE",
143    "EXAMPLE",
144    "EXPENSE_DESC",
145    "EXPIRES",
146    "EXTORTIONATE_RANSOM_COST",
147    "EXTRA_REASON",
148    "FACTOR",
149    "FEATURE_FLAG",
150    "FERVOR",
151    "FILTER",
152    "FILTERS",
153    "FILTER_GROUP",
154    "FILTER_TYPE",
155    "FIRST",
156    "FLAG",
157    "FOCUSTYPE",
158    "FOLDER",
159    "FROM",
160    "FULL_SUPPLY",
161    "GARRISON",
162    "GLORY",
163    "GOVERNMENT",
164    "GREEN",
165    "GREETING",
166    "GROUP",
167    "HASH_LONG",
168    "HASH_SHORT",
169    "HISTORY",
170    "HOLDER",
171    "HOLDING",
172    "HOLDING_NAME",
173    "HOOK",
174    "HOOK_NAME",
175    "HOSTILITY_CATEGORY",
176    "HOUSE",
177    "HOUSE_UNITY_STAGE_NAME",
178    "ICON",
179    "ICONKEY",
180    "ID",
181    "INCOME_DESC",
182    "INCREASE",
183    "INITIAL",
184    "INNOVATION_INDEX",
185    "INNOVATION_TYPE",
186    "INPUT_ACTION",
187    "INPUT_NAME",
188    "INTENSITY",
189    "INTERACTION",
190    "INTERACTION_NAME",
191    "INVALID_SETTING",
192    "JOINED",
193    "KEY",
194    "KEY_LOC",
195    "KNIGHTS",
196    "LAST_REASON",
197    "LAW",
198    "LAWS",
199    "LEFT",
200    "LEGEND_NAMES",
201    "LEGITIMACY",
202    "LESSON",
203    "LEVEL",
204    "LEVIES_CHANGE",
205    "LEVY",
206    "LIMIT",
207    "LIST",
208    "LIVING",
209    "LOCATION",
210    "LONG_REIGN",
211    "MAIN_DESC_KEY",
212    "MANDATE_TYPE",
213    "MARRIAGE",
214    "MAX",
215    "MAXVALUE",
216    "MAX_CHARACTERS",
217    "MAX_DURABILITY",
218    "MAX_LEVIES",
219    "MAX_MEN",
220    "MAX_MEN_AT_ARMS",
221    "MAX_NEGATION",
222    "MAX_SUPPLY",
223    "MAX_VALUE",
224    "MEN",
225    "MEN_AT_ARMS",
226    "MEN_AT_ARMS_TYPE",
227    "MESSAGE",
228    "MIN",
229    "MINIMUM",
230    "MINUTES",
231    "MINVALUE",
232    "MIN_REGION",
233    "MISSING_HOLDING",
234    "MOD",
235    "MODIFIER",
236    "MODIFIER_DESC",
237    "MODS",
238    "MODULE",
239    "MONTH",
240    "MONTHLY_TEXT",
241    "MONTHS",
242    "MONTH_SHORT",
243    "MORALE",
244    "MORE_RELATIONS",
245    "MULT",
246    "MULTIPLIER",
247    "NAME",
248    "NAMES",
249    "NAME_LIST",
250    "NEW_DURABILITY",
251    "NEW_HOLDING_TYPE_NAME",
252    "NEW_MODIFIER",
253    "NEW_NAME",
254    "NEW_RARITY",
255    "NEW_STATE",
256    "NEW_TEMPLATE",
257    "NEW_TYPE",
258    "NEW_VALUE",
259    "NEXT",
260    "NEXT_SPEED",
261    "NICK",
262    "NICKNAME",
263    "NOUN",
264    "NUM",
265    "NUMBER",
266    "NUM_ACTED",
267    "NUM_MISSING",
268    "NUM_OTHER_FAITHS",
269    "OBLIGATION_LEVEL",
270    "OBLIGATION_LEVEL_INDEX",
271    "OBLIGATION_TYPE",
272    "OBLIGATION_TYPE_0",
273    "OBLIGATION_TYPE_1",
274    "OLD_TYPE",
275    "ONLY",
276    "ON_ACCEPT",
277    "ON_DECLINE",
278    "ON_SEND",
279    "OPERATOR",
280    "OPINION",
281    "OPINIONMODIFIER",
282    "OPINION_CHANGE",
283    "OPTION",
284    "OPTION_1",
285    "OPTION_2",
286    "OPTION_3",
287    "OPTION_4",
288    "OPTION_5",
289    "OPTION_NAME",
290    "ORDER",
291    "OTHER",
292    "OTHER_TRAIT",
293    "OUR",
294    "OVERFLOW",
295    "OWNED",
296    "PARAMETERS",
297    "PARAMETER_NAME",
298    "PARTICIPANT_LIST",
299    "PATH_DURATION_DIFF",
300    "PATRONYM",
301    "PENALTY",
302    "PERC",
303    "PERCENT",
304    "PERCENTAGE",
305    "PERK",
306    "PERSONALITY",
307    "PHASE",
308    "PIETY_XP_PENALTY",
309    "PING",
310    "PLAYER",
311    "PLAYER_AMOUNT",
312    "PLAYER_TYPE",
313    "POSITION",
314    "POSITION_NAME",
315    "POWER",
316    "POWER_DIFF",
317    "PREDICTION",
318    "PRESET_NAME",
319    "PRESTIEGE_XP_PENALTY",
320    "PRESTIGE_MULT",
321    "PREVIOUS_NAME",
322    "PREV_SPEED",
323    "PROG",
324    "PROGRESS",
325    "PROPOSED_LEVEL_NAME",
326    "PROVINCE",
327    "PUNISHMENT",
328    "RAISE_MAX",
329    "RANK",
330    "RANSOM_COST",
331    "RARITY",
332    "REASON",
333    "REASONS",
334    "RED",
335    "REGIMENTS",
336    "REGIMENT_NAME",
337    "REGION",
338    "REINFORCE",
339    "REINFORCEMENTS",
340    "REINFORCE_INFO",
341    "REJECTION",
342    "RELATION",
343    "RELATION01",
344    "RELATION02",
345    "RELIGION",
346    "REMAINING_NAME",
347    "REPLACEMENT",
348    "REPLACE_ARTIFACT",
349    "REQUIRED",
350    "REQUIRED_POS",
351    "RESISTANCE",
352    "RESOURCES",
353    "RESPONSE",
354    "RESULT",
355    "REVOKE_COST",
356    "REVOKE_EFFECT",
357    "ROLE",
358    "RULE",
359    "SCHEME_NAME",
360    "SCORE",
361    "SCORE_PERCENT",
362    "SECOND",
363    "SECRECY",
364    "SECRET",
365    "SEXUALITY",
366    "SHORTCUT",
367    "SIZE",
368    "SKILL",
369    "SKILL_CHALLENGE",
370    "SKILL_ICON",
371    "SKILL_LIST",
372    "SLOT",
373    "SOLDIERS",
374    "SPREAD_CHANCE",
375    "SPREAD_DEBUG_BREAKDOWN",
376    "STATUS",
377    "STRENGTH",
378    "STRING",
379    "STRUGGLE_NAME",
380    "STRUGGLE_PHASE",
381    "STRUGGLE_PHASE_ICON",
382    "STRUGGLE_PHASE_ICON_NEXT",
383    "STRUGGLE_PHASE_NEXT",
384    "SUBJECT_TYPE",
385    "SUCCESSION_LAWS",
386    "SUCCESS_CHANCE",
387    "SUGGESTION",
388    "SUPPLY",
389    "SURVIVING",
390    "TARGET",
391    "TARGET_POSITION",
392    "TASK",
393    "TASK_LOCATION",
394    "TASK_NAME",
395    "TAX",
396    "TAX_CHANGE",
397    "TERRAIN",
398    "TERRAIN_TYPE",
399    "TEXT",
400    "THEIR",
401    "THRESHOLD",
402    "TIER",
403    "TIERNAME",
404    "TIER_KEY",
405    "TIME",
406    "TIMESTAMP",
407    "TIME_LEFT",
408    "TITLE",
409    "TO",
410    "TOTAL",
411    "TOTAL_AMOUNT",
412    "TRACK_NAME",
413    "TRAIT",
414    "TRAIT_AGE",
415    "TRAIT_SEX",
416    "TRAVEL_OPTION",
417    "TUTORIAL_NAME",
418    "TYPE",
419    "TYPES",
420    "UNIT",
421    "UNRAISED",
422    "VAL",
423    "VALUE",
424    "VARIABLE",
425    "VASSAL_CONVERSION_TEXT",
426    "VIEW_NAME",
427    "WAR",
428    "WARSCORE",
429    "WAR_NAME",
430    "WHAT",
431    "WHEN",
432    "WHO",
433    "WINLOSE",
434    "X",
435    "Y",
436    "YEAR",
437    "YEARS",
438];
439
440pub(crate) static COMPLEX_TOOLTIPS_CK3: LazyLock<TigerHashMap<&'static str, Option<Item>>> =
441    LazyLock::new(|| COMPLEX_TOOLTIPS.iter().copied().collect());
442
443/// Handling of `#TOOLTIP:tag:value` formatting in localization. The table contains the tag strings
444/// and the corresponding item type of the value. If the item type is `None`, it means the value is
445/// a runtime id which cannot be validated statically.
446// LAST UPDATED CK3 VERSION 1.12.3
447// The list of tag types can be found in localization/english/tooltip_structs_l_english.yml
448// The table entries were verified by deleting the `#TOOLTIP:` part of the entries and viewing
449// examples of them in-game.
450const COMPLEX_TOOLTIPS: &[(&str, Option<Item>)] = &[
451    ("accolade", None),
452    ("accolade_type", Some(Item::AccoladeType)),
453    ("activity", None),
454    ("activity_type", Some(Item::ActivityType)),
455    ("ai_personality", None),
456    ("army", None),
457    ("artifact", None),
458    ("building", Some(Item::Building)),
459    ("character", None),
460    ("court_amenities_setting", Some(Item::AmenitySetting)),
461    ("court_position_type", Some(Item::CourtPosition)),
462    ("court_type", Some(Item::CourtType)),
463    ("culture", None),
464    ("culture_era", None),
465    ("culture_innovation", None),
466    ("culture_pillar", Some(Item::CulturePillar)),
467    ("culture_tradition", Some(Item::CultureTradition)),
468    ("decision", Some(Item::Decision)),
469    ("dynasty", None),
470    ("dynasty_house", None),
471    ("dynasty_perk", Some(Item::DynastyPerk)),
472    ("epidemic", None),
473    ("faction", None),
474    ("faith", Some(Item::Faith)),
475    ("focus", Some(Item::Focus)),
476    ("game_concept", Some(Item::GameConcept)),
477    ("game_faith_doctrine", Some(Item::Doctrine)),
478    ("game_trait", Some(Item::Trait)),
479    ("geographical_region", Some(Item::Region)),
480    ("government_type", Some(Item::GovernmentType)),
481    ("holding", None),
482    ("house_unity_stage", Some(Item::HouseUnityStage)),
483    ("inspiration", None),
484    ("landed_title", None),
485    ("law", Some(Item::Law)),
486    ("legend", None),
487    ("lifestyle", Some(Item::Lifestyle)),
488    ("men_at_arms_type", Some(Item::MenAtArms)),
489    ("nickname", Some(Item::Nickname)),
490    ("obligation_level", Some(Item::SubjectContract)),
491    ("perk", Some(Item::Perk)),
492    ("province", Some(Item::Province)),
493    ("religion", Some(Item::Religion)),
494    ("religion_family", Some(Item::ReligionFamily)),
495    // TODO This tooltip takes five tokens while ComplexTooltip handles up to three.
496    ("scaled_static_modifier", Some(Item::Modifier)),
497    ("scheme", None),
498    ("scheme_type", Some(Item::Scheme)),
499    ("secret", None),
500    ("secret_type", Some(Item::Secret)),
501    ("specific_men_at_arms_type", None),
502    ("static_modifier", Some(Item::Modifier)),
503    ("struggle", None),
504    ("struggle_phase", Some(Item::StrugglePhase)),
505    ("tax_slot_obligation", Some(Item::TaxSlotObligation)),
506    ("terrain", Some(Item::Terrain)),
507    ("travel_option", Some(Item::TravelOption)),
508    ("travel_plan", None),
509    ("vassal_stance", Some(Item::VassalStance)),
510];