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
9const 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", "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
443const 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 ("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];