tiger_lib/
item.rs

1//! Giant enum for all the [`Item`] types in the game.
2
3use std::fmt::{Display, Formatter};
4
5use strum_macros::{EnumCount, EnumIter, IntoStaticStr};
6
7use crate::block::Block;
8use crate::db::Db;
9#[cfg(doc)]
10use crate::everything::Everything;
11use crate::game::{Game, GameFlags};
12use crate::pdxfile::PdxEncoding;
13use crate::report::{Confidence, Severity};
14use crate::token::Token;
15
16/// "items" are all the things that can be looked up in the game databases.
17/// Anything that can be looked up in script with a literal string key, or that's loaded into
18/// tiger's database and needs a unique key, is an `Item`.
19///
20/// There is some overlap with scopes, for example "culture" is both an `Item` and a scope type,
21/// but the difference is that scopes are runtime values while items are always strings.
22///
23/// For example if a trigger takes a culture *scope*, you could supply either `culture:german` or
24/// `scope:target_culture`, while if a trigger takes a culture *item*, you would have to supply just
25/// `german` and don't have the option of supplying something determined at runtime.
26#[derive(Copy, Clone, Debug, PartialEq, Eq, IntoStaticStr, Hash, PartialOrd, Ord, EnumCount, EnumIter)]
27#[strum(serialize_all = "snake_case")]
28#[non_exhaustive]
29// The item table is in several alphabetized sections. First the generic items, then items used by
30// multiple games, then a section for each game.
31//
32// Each item is marked with a cfg clause for its game. This is not strictly necessary, but it helps
33// prevent "leakage" between the games, where they accidentally use each other's item types.
34#[rustfmt::skip] // having cfg and the variant on the same line is much more readable
35pub enum Item {
36    // Generic items used by all games and assumed to be there by the validators in
37    // non-game-specific `data` modules.
38    #[cfg(feature = "jomini")]
39    Accessory,
40    #[cfg(feature = "jomini")]
41    AccessoryTag,
42    #[cfg(feature = "jomini")]
43    AccessoryVariation,
44    #[cfg(feature = "jomini")]
45    AccessoryVariationLayout,
46    #[cfg(feature = "jomini")]
47    AccessoryVariationTextures,
48    Achievement,
49    #[cfg(feature = "jomini")]
50    AchievementGroup,
51    Asset,
52    BlendShape,
53    #[cfg(feature = "jomini")]
54    CharacterInteraction,
55    #[cfg(feature = "jomini")]
56    Coa,
57    #[cfg(feature = "jomini")]
58    CoaColorList,
59    #[cfg(feature = "jomini")]
60    CoaColoredEmblemList,
61    #[cfg(feature = "ck3")]
62    CoaDesignerColorPalette,
63    #[cfg(feature = "jomini")]
64    CoaDesignerColoredEmblem,
65    #[cfg(feature = "ck3")]
66    CoaDesignerEmblemLayout,
67    #[cfg(feature = "jomini")]
68    CoaDesignerPattern,
69    #[cfg(feature = "jomini")]
70    CoaPatternList,
71    #[cfg(feature = "jomini")]
72    CoaTemplate,
73    #[cfg(feature = "jomini")]
74    CoaTemplateList,
75    #[cfg(feature = "jomini")]
76    CoaTexturedEmblemList,
77    #[cfg(feature = "jomini")]
78    Culture,
79    #[cfg(feature = "jomini")]
80    CustomLocalization,
81    Decision,
82    Define,
83    Directory,
84    Dlc,
85    DlcFeature,
86    DlcName,
87    #[cfg(feature = "jomini")]
88    EffectLocalization,
89    Entity,
90    Entry,
91    #[cfg(feature = "jomini")]
92    Ethnicity,
93    Event,
94    EventNamespace,
95    File,
96    Font,
97    Fontfiles,
98    #[cfg(feature = "jomini")]
99    GameConcept,
100    GameRule,
101    GameRuleSetting,
102    #[cfg(feature = "jomini")]
103    GeneAgePreset,
104    #[cfg(feature = "jomini")]
105    GeneAttribute,
106    #[cfg(feature = "jomini")]
107    GeneCategory,
108    #[cfg(feature = "jomini")]
109    GovernmentType,
110    GuiLayer,
111    GuiTemplate,
112    GuiType,
113    #[cfg(any(feature = "ck3", feature = "vic3", feature = "imperator"))]
114    LawGroup,
115    Localization,
116    MapEnvironment,
117    MapMode,
118    Modifier,
119    Music,
120    #[cfg(feature = "jomini")]
121    MusicPlayerCategory,
122    #[cfg(feature = "jomini")]
123    NamedColor,
124    OnAction,
125    Pdxmesh,
126    #[cfg(feature = "jomini")]
127    PortraitAnimation,
128    #[cfg(feature = "jomini")]
129    PortraitCamera,
130    #[cfg(feature = "jomini")]
131    PortraitEnvironment,
132    #[cfg(feature = "jomini")]
133    PortraitModifierGroup,
134    #[cfg(feature = "jomini")]
135    PortraitModifierPack,
136    Province,
137    #[cfg(feature = "jomini")]
138    Religion,
139    ScriptedEffect,
140    ScriptedGui,
141    #[cfg(feature = "jomini")]
142    ScriptedList,
143    #[cfg(feature = "jomini")]
144    ScriptedModifier,
145    #[cfg(feature = "jomini")]
146    ScriptedRule,
147    ScriptedTrigger,
148    #[cfg(feature = "jomini")]
149    ScriptValue,
150    Shortcut,
151    Sound,
152    Terrain,
153    TextFormat,
154    TextIcon,
155    TextureFile,
156    #[cfg(feature = "jomini")]
157    TriggerLocalization,
158    WidgetName,
159
160    // Items shared by more than one game
161    #[cfg(any(feature = "vic3", feature = "hoi4"))]
162    AiStrategy,
163    #[cfg(any(feature = "ck3", feature = "imperator", feature = "hoi4"))]
164    Building,
165    #[cfg(any(feature = "vic3", feature = "eu5"))]
166    BuildingType,
167    #[cfg(any(feature = "ck3", feature = "eu5"))]
168    CasusBelli,
169    #[cfg(any(feature = "ck3", feature = "hoi4"))]
170    Character,
171    #[cfg(any(feature = "ck3", feature = "vic3"))]
172    CharacterTemplate,
173    #[cfg(any(feature = "vic3", feature = "imperator"))]
174    CharacterTrait,
175    #[cfg(any(feature = "ck3", feature = "eu5"))]
176    Climate,
177    #[cfg(any(feature = "imperator", feature = "hoi4"))]
178    CombatTactic,
179    #[cfg(any(feature = "vic3", feature = "imperator", feature = "hoi4"))]
180    Country,
181    #[cfg(any(feature = "vic3", feature = "eu5"))]
182    CountryRank,
183    #[cfg(any(feature = "imperator", feature = "eu5"))]
184    CultureGroup,
185    #[cfg(any(feature = "ck3", feature = "imperator", feature = "eu5"))]
186    DeathReason,
187    #[cfg(any(feature = "ck3", feature = "vic3", feature = "eu5"))]
188    Dna,
189    #[cfg(any(feature = "ck3", feature = "imperator"))]
190    EventTheme,
191    #[cfg(any(feature = "ck3", feature = "eu5"))]
192    HolySite,
193    #[cfg(any(feature = "imperator", feature = "hoi4"))]
194    Idea,
195    #[cfg(any(feature = "vic3", feature = "hoi4"))]
196    Ideology,
197    #[cfg(any(feature = "vic3", feature = "eu5"))]
198    Institution,
199    #[cfg(any(feature = "ck3", feature = "eu5"))]
200    Language,
201    #[cfg(any(feature = "ck3", feature = "imperator", feature = "eu5"))]
202    Law,
203    #[cfg(any(feature = "ck3", feature = "vic3"))]
204    Message,
205    #[cfg(any(feature = "imperator", feature = "hoi4", feature = "eu5"))]
206    Mission,
207    #[cfg(any(feature = "vic3", feature = "eu5"))]
208    ModifierTypeDefinition,
209    #[cfg(any(feature = "vic3", feature = "imperator", feature = "eu5"))]
210    PopType,
211    #[cfg(any(feature = "imperator", feature = "eu5"))]
212    Price,
213    #[cfg(any(feature = "vic3", feature = "eu5"))]
214    ProductionMethod,
215    #[cfg(any(feature = "ck3", feature = "imperator"))]
216    Region,
217    #[cfg(any(feature = "ck3", feature = "eu5"))]
218    Situation,
219    #[cfg(any(feature = "vic3", feature = "hoi4"))] 
220    StrategicRegion,
221    #[cfg(any(feature = "vic3", feature = "imperator", feature = "eu5"))]
222    SubjectType,
223    #[cfg(any(feature = "vic3", feature = "hoi4"))]
224    Technology,
225    #[cfg(any(feature = "ck3", feature = "eu5"))]
226    Trait,
227    #[cfg(any(feature = "ck3", feature = "vic3", feature = "eu5"))]
228    TutorialLesson,
229    #[cfg(any(feature = "ck3", feature = "vic3", feature = "eu5"))]
230    TutorialLessonChain,
231    #[cfg(any(feature = "ck3", feature = "vic3", feature = "eu5"))]
232    TutorialLessonStep,
233    #[cfg(any(feature = "imperator", feature = "eu5"))]
234    UnitAbility,
235    #[cfg(any(feature = "imperator", feature = "eu5"))]
236    Wargoal,
237
238    // Items for ck3
239    #[cfg(feature = "ck3")] AccoladeCategory,
240    #[cfg(feature = "ck3")] AccoladeIcon,
241    #[cfg(feature = "ck3")] AccoladeName,
242    #[cfg(feature = "ck3")] AccoladeParameter,
243    #[cfg(feature = "ck3")] AccoladeType,
244    #[cfg(feature = "ck3")] ActivityGroupType,
245    #[cfg(feature = "ck3")] ActivityIntent,
246    #[cfg(feature = "ck3")] ActivityLocale,
247    #[cfg(feature = "ck3")] ActivityOption,
248    #[cfg(feature = "ck3")] ActivityOptionCategory,
249    #[cfg(feature = "ck3")] ActivityPhase,
250    #[cfg(feature = "ck3")] ActivityPulseAction,
251    #[cfg(feature = "ck3")] ActivityState,
252    #[cfg(feature = "ck3")] ActivityType,
253    #[cfg(feature = "ck3")] AiWarStance,
254    #[cfg(feature = "ck3")] AgentType,
255    #[cfg(feature = "ck3")] Amenity,
256    #[cfg(feature = "ck3")] AmenitySetting,
257    #[cfg(feature = "ck3")] ArtifactBlueprint,
258    #[cfg(feature = "ck3")] ArtifactFeature,
259    #[cfg(feature = "ck3")] ArtifactFeatureGroup,
260    #[cfg(feature = "ck3")] ArtifactHistory,
261    #[cfg(feature = "ck3")] ArtifactRarity,
262    #[cfg(feature = "ck3")] ArtifactSlot,
263    #[cfg(feature = "ck3")] ArtifactSlotType,
264    #[cfg(feature = "ck3")] ArtifactTemplate,
265    #[cfg(feature = "ck3")] ArtifactType,
266    #[cfg(feature = "ck3")] ArtifactVisual,
267    #[cfg(feature = "ck3")] Bookmark,
268    #[cfg(feature = "ck3")] BookmarkGroup,
269    #[cfg(feature = "ck3")] BookmarkPortrait,
270    #[cfg(feature = "ck3")] BooleanHouseHeadParameter,
271    #[cfg(feature = "ck3")] BooleanHousePowerParameter,
272    #[cfg(feature = "ck3")] BooleanHouseRelationParameter,
273    #[cfg(feature = "ck3")] BuildingFlag,
274    #[cfg(feature = "ck3")] BuildingGfx,
275    #[cfg(feature = "ck3")] CasusBelliGroup,
276    #[cfg(feature = "ck3")] Catalyst,
277    #[cfg(feature = "ck3")] ChallengeCharacter,
278    #[cfg(feature = "ck3")] CharacterBackground,
279    #[cfg(feature = "ck3")] CharacterInteractionCategory,
280    #[cfg(feature = "ck3")] ClothingGfx,
281    #[cfg(feature = "ck3")] CoaGfx,
282    #[cfg(feature = "ck3")] CoaDynamicDefinition,
283    #[cfg(feature = "ck3")] CohesionLevelParameter,
284    #[cfg(feature = "ck3")] CombatEffect,
285    #[cfg(feature = "ck3")] CombatPhaseEvent,
286    #[cfg(feature = "ck3")] ConfederationType,
287    #[cfg(feature = "ck3")] ConnectionArrow,
288    #[cfg(feature = "ck3")] CouncilPosition,
289    #[cfg(feature = "ck3")] CouncilTask,
290    #[cfg(feature = "ck3")] Countermeasure,
291    #[cfg(feature = "ck3")] CountermeasureParameter,
292    #[cfg(feature = "ck3")] CourtPosition,
293    #[cfg(feature = "ck3")] CourtPositionTask,
294    #[cfg(feature = "ck3")] CourtSceneCulture,
295    #[cfg(feature = "ck3")] CourtSceneGroup,
296    #[cfg(feature = "ck3")] CourtSceneRole,
297    #[cfg(feature = "ck3")] CourtSceneSetting,
298    #[cfg(feature = "ck3")] CourtType,
299    #[cfg(feature = "ck3")] CourtierGuestManagement,
300    #[cfg(feature = "ck3")] CultureAesthetic,
301    #[cfg(feature = "ck3")] CultureCreationName,
302    #[cfg(feature = "ck3")] CultureEra,
303    #[cfg(feature = "ck3")] CultureEthos,
304    #[cfg(feature = "ck3")] CultureHeritage,
305    #[cfg(feature = "ck3")] CultureHistory,
306    #[cfg(feature = "ck3")] CultureParameter,
307    #[cfg(feature = "ck3")] CulturePillar,
308    #[cfg(feature = "ck3")] CultureTradition,
309    #[cfg(feature = "ck3")] CultureTraditionCategory,
310    #[cfg(feature = "ck3")] DangerType,
311    #[cfg(feature = "ck3")] DecisionGroup,
312    #[cfg(feature = "ck3")] DiarchyMandate,
313    #[cfg(feature = "ck3")] DiarchyParameter,
314    #[cfg(feature = "ck3")] DiarchyType,
315    #[cfg(feature = "ck3")] Doctrine,
316    #[cfg(feature = "ck3")] DoctrineBooleanParameter,
317    #[cfg(feature = "ck3")] DoctrineCategory,
318    #[cfg(feature = "ck3")] DoctrineParameter,
319    #[cfg(feature = "ck3")] DomicileBuilding,
320    #[cfg(feature = "ck3")] DomicileParameter,
321    #[cfg(feature = "ck3")] DomicileType,
322    #[cfg(feature = "ck3")] Dynasty,
323    #[cfg(feature = "ck3")] DynastyLegacy,
324    #[cfg(feature = "ck3")] DynastyPerk,
325    #[cfg(feature = "ck3")] EpidemicType,
326    #[cfg(feature = "ck3")] EpidemicDeathReason,
327    #[cfg(feature = "ck3")] EventBackground,
328    #[cfg(feature = "ck3")] EventEffect2d,
329    #[cfg(feature = "ck3")] EventTransition,
330    #[cfg(feature = "ck3")] Faction,
331    #[cfg(feature = "ck3")] Faith,
332    #[cfg(feature = "ck3")] FaithIcon,
333    #[cfg(feature = "ck3")] FervorModifier,
334    #[cfg(feature = "ck3")] FlatMapStyle,
335    #[cfg(feature = "ck3")] Flavorization,
336    #[cfg(feature = "ck3")] Focus,
337    #[cfg(feature = "ck3")] GeneticConstraint,
338    #[cfg(feature = "ck3")] GovernmentFlag,
339    #[cfg(feature = "ck3")] GraphicalFaith,
340    #[cfg(feature = "ck3")] GraphicalUnitType,
341    #[cfg(feature = "ck3")] GreatProjectType,
342    #[cfg(feature = "ck3")] GuestInviteRule,
343    #[cfg(feature = "ck3")] GuestSubset,
344    #[cfg(feature = "ck3")] GuestSystem,
345    #[cfg(feature = "ck3")] HeadDetermination,
346    #[cfg(feature = "ck3")] HoldingParameter,
347    #[cfg(feature = "ck3")] HoldingType,
348    #[cfg(feature = "ck3")] HolySiteFlag,
349    #[cfg(feature = "ck3")] Hook,
350    #[cfg(feature = "ck3")] House,
351    #[cfg(feature = "ck3")] HouseAspiration,
352    #[cfg(feature = "ck3")] HouseRelationLevel,
353    #[cfg(feature = "ck3")] HouseRelationType,
354    #[cfg(feature = "ck3")] HouseUnity,
355    #[cfg(feature = "ck3")] HouseUnityParameter,
356    #[cfg(feature = "ck3")] HouseUnityStage,
357    #[cfg(feature = "ck3")] ImportantAction,
358    #[cfg(feature = "ck3")] Innovation,
359    #[cfg(feature = "ck3")] InnovationFlag,
360    #[cfg(feature = "ck3")] InnovationParameter,
361    #[cfg(feature = "ck3")] Inspiration,
362    #[cfg(feature = "ck3")] LawFlag,
363    #[cfg(feature = "ck3")] LeaseContract,
364    #[cfg(feature = "ck3")] LegendChapter,
365    #[cfg(feature = "ck3")] LegendChronicle,
366    #[cfg(feature = "ck3")] LegendProperty,
367    #[cfg(feature = "ck3")] LegendSeed,
368    #[cfg(feature = "ck3")] LegendType,
369    #[cfg(feature = "ck3")] LegitimacyFlag,
370    #[cfg(feature = "ck3")] LegitimacyType,
371    #[cfg(feature = "ck3")] Lifestyle,
372    #[cfg(feature = "ck3")] LineType,
373    #[cfg(feature = "ck3")] MartialCustom,
374    #[cfg(feature = "ck3")] MemoryCategory,
375    #[cfg(feature = "ck3")] MemoryType,
376    #[cfg(feature = "ck3")] MenAtArms,
377    #[cfg(feature = "ck3")] MenAtArmsBase,
378    #[cfg(feature = "ck3")] MessageFilterType,
379    #[cfg(feature = "ck3")] MessageGroupType,
380    #[cfg(feature = "ck3")] ModifierFormat,
381    #[cfg(feature = "ck3")] MottoInsert,
382    #[cfg(feature = "ck3")] Motto,
383    #[cfg(feature = "ck3")] NameEquivalency,
384    #[cfg(feature = "ck3")] NameList,
385    #[cfg(feature = "ck3")] Nickname,
386    #[cfg(feature = "ck3")] OpinionModifier,
387    #[cfg(feature = "ck3")] Perk,
388    #[cfg(feature = "ck3")] PerkTree,
389    #[cfg(feature = "ck3")] PlayableDifficultyInfo,
390    #[cfg(feature = "ck3")] PointOfInterest,
391    #[cfg(feature = "ck3")] PoolSelector,
392    #[cfg(feature = "ck3")] PortraitType,
393    #[cfg(feature = "ck3")] PrisonType,
394    #[cfg(feature = "ck3")] ProjectContribution,
395    #[cfg(feature = "ck3")] ProvinceEffect,
396    #[cfg(feature = "ck3")] ProvinceMapping,
397    #[cfg(feature = "ck3")] RaidIntent,
398    #[cfg(feature = "ck3")] Relation,
399    #[cfg(feature = "ck3")] RelationFlag,
400    #[cfg(feature = "ck3")] ReligionFamily,
401    #[cfg(feature = "ck3")] RewardItem,
402    #[cfg(feature = "ck3")] RulerObjectiveType,
403    #[cfg(feature = "ck3")] Scheme,
404    #[cfg(feature = "ck3")] SchemePulseAction,
405    #[cfg(feature = "ck3")] ScriptedAnimation,
406    #[cfg(feature = "ck3")] ScriptedCost,
407    #[cfg(feature = "ck3")] ScriptedIllustration,
408    #[cfg(feature = "ck3")] Secret,
409    #[cfg(feature = "ck3")] Sexuality,
410    #[cfg(feature = "ck3")] SituationCatalyst,
411    #[cfg(feature = "ck3")] SituationGroupType,
412    #[cfg(feature = "ck3")] SituationHistory,
413    #[cfg(feature = "ck3")] SituationParticipantGroup,
414    #[cfg(feature = "ck3")] SituationParticipantGroupParameter,
415    #[cfg(feature = "ck3")] SituationPhase,
416    #[cfg(feature = "ck3")] SituationPhaseParameter,
417    #[cfg(feature = "ck3")] SituationSubRegion,
418    #[cfg(feature = "ck3")] Skill,
419    #[cfg(feature = "ck3")] SpecialBuilding,
420    #[cfg(feature = "ck3")] SpecialGuest,
421    #[cfg(feature = "ck3")] Story,
422    #[cfg(feature = "ck3")] Struggle,
423    #[cfg(feature = "ck3")] StruggleHistory,
424    #[cfg(feature = "ck3")] StrugglePhase,
425    #[cfg(feature = "ck3")] StrugglePhaseParameter,
426    #[cfg(feature = "ck3")] SubjectContract,
427    #[cfg(feature = "ck3")] SubjectContractFlag,
428    #[cfg(feature = "ck3")] SubjectContractGroup,
429    #[cfg(feature = "ck3")] SubjectContractObligationLevel,
430    #[cfg(feature = "ck3")] SuccessionAppointment,
431    #[cfg(feature = "ck3")] SuccessionElection,
432    #[cfg(feature = "ck3")] Suggestion,
433    #[cfg(feature = "ck3")] TableStyle,
434    #[cfg(feature = "ck3")] TaskContractGroup,
435    #[cfg(feature = "ck3")] TaskContractReward,
436    #[cfg(feature = "ck3")] TaskContractType,
437    #[cfg(feature = "ck3")] TaxSlotObligation,
438    #[cfg(feature = "ck3")] TaxSlotType,
439    #[cfg(feature = "ck3")] Title,
440    #[cfg(feature = "ck3")] TitleHistory,
441    #[cfg(feature = "ck3")] TraitCategory,
442    #[cfg(feature = "ck3")] TraitFlag,
443    #[cfg(feature = "ck3")] TraitPortraitModifier,
444    #[cfg(feature = "ck3")] TraitTrack,
445    #[cfg(feature = "ck3")] TravelOption,
446    #[cfg(feature = "ck3")] UnitGfx,
447    #[cfg(feature = "ck3")] VassalStance,
448
449    // Items specific to vic3
450    #[cfg(feature = "vic3")] AcceptanceStatus,
451    #[cfg(feature = "vic3")] AirGraphics,
452    #[cfg(feature = "vic3")] Alert,
453    #[cfg(feature = "vic3")] AlertGroup,
454    #[cfg(feature = "vic3")] Amendment,
455    #[cfg(feature = "vic3")] Approval,
456    #[cfg(feature = "vic3")] ArmyDiorama,
457    #[cfg(feature = "vic3")] Attitude,
458    #[cfg(feature = "vic3")] BattleCondition,
459    #[cfg(feature = "vic3")] BuildingGroup,
460    #[cfg(feature = "vic3")] BuyPackage,
461    #[cfg(feature = "vic3")] CanalType,
462    #[cfg(feature = "vic3")] CharacterRole,
463    #[cfg(feature = "vic3")] CityBuildingVfx,
464    #[cfg(feature = "vic3")] CityCenterpiece,
465    #[cfg(feature = "vic3")] CityGraphicsType,
466    #[cfg(feature = "vic3")] CityVfx,
467    #[cfg(feature = "vic3")] CombatUnit,
468    #[cfg(feature = "vic3")] CombatUnitExperienceLevel,
469    #[cfg(feature = "vic3")] CombatUnitGroup,
470    #[cfg(feature = "vic3")] CommanderOrder,
471    #[cfg(feature = "vic3")] CommanderRank,
472    #[cfg(feature = "vic3")] CompanyType,
473    #[cfg(feature = "vic3")] CompanyCharterType,
474    #[cfg(feature = "vic3")] CohesionLevel,
475    #[cfg(feature = "vic3")] CountryCreation,
476    #[cfg(feature = "vic3")] CountryFormation,
477    #[cfg(feature = "vic3")] CountryTier,
478    #[cfg(feature = "vic3")] CountryType,
479    #[cfg(feature = "vic3")] CultureGraphics,
480    #[cfg(feature = "vic3")] Decree,
481    #[cfg(feature = "vic3")] DiplomaticAction,
482    #[cfg(feature = "vic3")] DiplomaticCatalyst,
483    #[cfg(feature = "vic3")] DiplomaticCatalystCategory,
484    #[cfg(feature = "vic3")] DiplomaticPlay,
485    #[cfg(feature = "vic3")] DiscriminationTrait,
486    #[cfg(feature = "vic3")] DiscriminationTraitGroup,
487    #[cfg(feature = "vic3")] DynamicCompanyName,
488    #[cfg(feature = "vic3")] DynamicCountryMapColor,
489    #[cfg(feature = "vic3")] DynamicCountryName,
490    #[cfg(feature = "vic3")] DynamicTreatyName,
491    #[cfg(feature = "vic3")] EventCategory,
492    #[cfg(feature = "vic3")] FlagDefinition,
493    #[cfg(feature = "vic3")] FleetDiorama,
494    #[cfg(feature = "vic3")] FrontGraphics,
495    #[cfg(feature = "vic3")] GeographicRegion,
496    #[cfg(feature = "vic3")] GeographicRegionShortKey,
497    #[cfg(feature = "vic3")] Goods,
498    #[cfg(feature = "vic3")] GradientBorderSettings,
499    #[cfg(feature = "vic3")] HarvestConditionType,
500    #[cfg(feature = "vic3")] HeritageTrait,
501    #[cfg(feature = "vic3")] InfamyThreshold,
502    #[cfg(feature = "vic3")] InterestGroup,
503    #[cfg(feature = "vic3")] InterestGroupTrait,
504    #[cfg(feature = "vic3")] JournalEntry,
505    #[cfg(feature = "vic3")] JournalEntryGroup,
506    #[cfg(feature = "vic3")] LanguageTrait,
507    #[cfg(feature = "vic3")] LawType,
508    #[cfg(feature = "vic3")] LegitimacyLevel,
509    #[cfg(feature = "vic3")] Level,
510    #[cfg(feature = "vic3")] LibertyDesireLevel,
511    #[cfg(feature = "vic3")] MapLayer,
512    #[cfg(feature = "vic3")] MapInteractionType,
513    #[cfg(feature = "vic3")] MapNotificationType,
514    #[cfg(feature = "vic3")] MediaAlias,
515    #[cfg(feature = "vic3")] MilitaryFormationFlag,
516    #[cfg(feature = "vic3")] MobilizationOption,
517    #[cfg(feature = "vic3")] MobilizationOptionGroup,
518    #[cfg(feature = "vic3")] Objective,
519    #[cfg(feature = "vic3")] ObjectiveSubgoal,
520    #[cfg(feature = "vic3")] ObjectiveSubgoalCategory,
521    #[cfg(feature = "vic3")] Party,
522    #[cfg(feature = "vic3")] PoliticalLobby,
523    #[cfg(feature = "vic3")] PoliticalLobbyAppeasement,
524    #[cfg(feature = "vic3")] PoliticalMovement,
525    #[cfg(feature = "vic3")] PoliticalMovementCategory,
526    #[cfg(feature = "vic3")] PoliticalMovementPopSupport,
527    #[cfg(feature = "vic3")] PopNeed,
528    #[cfg(feature = "vic3")] PowerBlocCoaPiece,
529    #[cfg(feature = "vic3")] PowerBlocIdentity,
530    #[cfg(feature = "vic3")] PowerBlocMapTexture,
531    #[cfg(feature = "vic3")] PowerBlocName,
532    #[cfg(feature = "vic3")] PrestigeGoods,
533    #[cfg(feature = "vic3")] Principle,
534    #[cfg(feature = "vic3")] PrincipleGroup,
535    #[cfg(feature = "vic3")] ProductionMethodGroup,
536    #[cfg(feature = "vic3")] ProposalType,
537    #[cfg(feature = "vic3")] RelationsThreshold,
538    #[cfg(feature = "vic3")] ScriptedButton,
539    #[cfg(feature = "vic3")] ScriptedProgressBar,
540    #[cfg(feature = "vic3")] ScriptedTest,
541    #[cfg(feature = "vic3")] SecretGoal,
542    #[cfg(feature = "vic3")] Skin,
543    #[cfg(feature = "vic3")] SocialClass,
544    #[cfg(feature = "vic3")] SocialHierarchy,
545    #[cfg(feature = "vic3")] StateRegion,
546    #[cfg(feature = "vic3")] StateTrait,
547    #[cfg(feature = "vic3")] Strata,
548    #[cfg(feature = "vic3")] TechnologyEra,
549    #[cfg(feature = "vic3")] TerrainKey,
550    #[cfg(feature = "vic3")] TerrainLabel,
551    #[cfg(feature = "vic3")] TerrainManipulator,
552    #[cfg(feature = "vic3")] TerrainMask,
553    #[cfg(feature = "vic3")] TerrainMaterial,
554    #[cfg(feature = "vic3")] Theme,
555    #[cfg(feature = "vic3")] TraditionTrait,
556    #[cfg(feature = "vic3")] TransferOfPower,
557    #[cfg(feature = "vic3")] TreatyArticle,
558    #[cfg(feature = "vic3")] WarGoalType,
559
560    // Items specific to imperator
561    #[cfg(feature = "imperator")] Ambition,
562    #[cfg(feature = "imperator")] AiPlanGoals,
563    #[cfg(feature = "imperator")] Area,
564    #[cfg(feature = "imperator")] Deity,
565    #[cfg(feature = "imperator")] DeityCategory,
566    #[cfg(feature = "imperator")] DiplomaticStance,
567    #[cfg(feature = "imperator")] EconomicPolicy,
568    #[cfg(feature = "imperator")] EventPicture,
569    #[cfg(feature = "imperator")] GovernorPolicy,
570    #[cfg(feature = "imperator")] GraphicalCultureType,
571    #[cfg(feature = "imperator")] GreatWorkEffectTier,
572    #[cfg(feature = "imperator")] GreatWorkEffect,
573    #[cfg(feature = "imperator")] GreatWorkCategory,
574    #[cfg(feature = "imperator")] GreatWorkMaterial,
575    #[cfg(feature = "imperator")] GreatWorkModule,
576    #[cfg(feature = "imperator")] GreatWorkTemplate,
577    #[cfg(feature = "imperator")] Heritage,
578    #[cfg(feature = "imperator")] Invention,
579    #[cfg(feature = "imperator")] InventionGroup,
580    #[cfg(feature = "imperator")] LegionDistinction,
581    #[cfg(feature = "imperator")] LevyTemplate,
582    #[cfg(feature = "imperator")] Loyalty,
583    #[cfg(feature = "imperator")] MilitaryTraditionTree,
584    #[cfg(feature = "imperator")] MilitaryTradition,
585    #[cfg(feature = "imperator")] MissionTask,
586    #[cfg(feature = "imperator")] Office,
587    #[cfg(feature = "imperator")] Opinion,
588    #[cfg(feature = "imperator")] PartyAgenda,
589    #[cfg(feature = "imperator")] PartyType,
590    #[cfg(feature = "imperator")] PostSetupCharacters,
591    #[cfg(feature = "imperator")] ProvinceRank,
592    #[cfg(feature = "imperator")] SetupCharacters,
593    #[cfg(feature = "imperator")] SetupProvinces,
594    #[cfg(feature = "imperator")] TechnologyTable,
595    #[cfg(feature = "imperator")] TradeGood,
596    #[cfg(feature = "imperator")] Treasure,
597    #[cfg(feature = "imperator")] Unit,
598
599    #[cfg(feature = "hoi4")] Ability,
600    #[cfg(feature = "hoi4")] Acclimatation,
601    #[cfg(feature = "hoi4")] AceModifier,
602    #[cfg(feature = "hoi4")] AdjacencyRule,
603    #[cfg(feature = "hoi4")] AiArea,
604    #[cfg(feature = "hoi4")] AiStrategyType,
605    #[cfg(feature = "hoi4")] AdvisorSlot,
606    #[cfg(feature = "hoi4")] CharacterIdeaToken,
607    #[cfg(feature = "hoi4")] CombatTacticPhase,
608    #[cfg(feature = "hoi4")] Continent,
609    #[cfg(feature = "hoi4")] CountryLeaderTrait,
610    #[cfg(feature = "hoi4")] CountryHistory,
611    #[cfg(feature = "hoi4")] CountryTag,
612    #[cfg(feature = "hoi4")] CountryTagAlias,
613    #[cfg(feature = "hoi4")] DecisionCategory,
614    #[cfg(feature = "hoi4")] DivisionNamesGroup,
615    #[cfg(feature = "hoi4")] DivisionTemplate,
616    #[cfg(feature = "hoi4")] DynamicModifier,
617    #[cfg(feature = "hoi4")] Equipment,
618    #[cfg(feature = "hoi4")] EquipmentBonusType,
619    #[cfg(feature = "hoi4")] EquipmentCategory,
620    #[cfg(feature = "hoi4")] EquipmentGroup,
621    #[cfg(feature = "hoi4")] EquipmentModule,
622    #[cfg(feature = "hoi4")] EquipmentModuleCategory,
623    #[cfg(feature = "hoi4")] EquipmentSearchFilter,
624    #[cfg(feature = "hoi4")] EquipmentStat,
625    #[cfg(feature = "hoi4")] EquipmentUpgrade,
626    #[cfg(feature = "hoi4")] GraphicalTerrain,
627    #[cfg(feature = "hoi4")] IdeaCategory,
628    #[cfg(feature = "hoi4")] IdeologyGroup,
629    #[cfg(feature = "hoi4")] IndustrialOrg,
630    #[cfg(feature = "hoi4")] IndustrialOrgBonusWeight,
631    #[cfg(feature = "hoi4")] IndustrialOrgPolicy,
632    #[cfg(feature = "hoi4")] IndustrialOrgTrait,
633    #[cfg(feature = "hoi4")] IntelligenceAgencyBranch,
634    #[cfg(feature = "hoi4")] IntelligenceAgencyUpgrade,
635    #[cfg(feature = "hoi4")] MusicAsset,
636    #[cfg(feature = "hoi4")] NationalFocus,
637    #[cfg(feature = "hoi4")] NationalFocusStyle,
638    #[cfg(feature = "hoi4")] NationalFocusTree,
639    #[cfg(feature = "hoi4")] Operation,
640    #[cfg(feature = "hoi4")] OperationPhase,
641    #[cfg(feature = "hoi4")] OperationToken,
642    #[cfg(feature = "hoi4")] PowerBalance,
643    #[cfg(feature = "hoi4")] PowerBalanceSide,
644    #[cfg(feature = "hoi4")] ProductionStat,
645    #[cfg(feature = "hoi4")] PrototypeReward,
646    #[cfg(feature = "hoi4")] RailwayGunNames,
647    #[cfg(feature = "hoi4")] Resource,
648    #[cfg(feature = "hoi4")] ScriptEnum,
649    #[cfg(feature = "hoi4")] ScriptedConstant,
650    #[cfg(feature = "hoi4")] ScriptedLocalisation,
651    #[cfg(feature = "hoi4")] ShipNames,
652    #[cfg(feature = "hoi4")] SoundEffect,
653    #[cfg(feature = "hoi4")] SoundFalloff,
654    #[cfg(feature = "hoi4")] SpawnPoint,
655    #[cfg(feature = "hoi4")] Specialization,
656    #[cfg(feature = "hoi4")] SpecialProject,
657    #[cfg(feature = "hoi4")] SpecialProjectTag,
658    #[cfg(feature = "hoi4")] ScientistTrait,
659    #[cfg(feature = "hoi4")] ShipName,
660    #[cfg(feature = "hoi4")] Sprite,
661    #[cfg(feature = "hoi4")] State,
662    #[cfg(feature = "hoi4")] StateCategory,
663    #[cfg(feature = "hoi4")] SubUnit,
664    #[cfg(feature = "hoi4")] SubUnitCategory,
665    #[cfg(feature = "hoi4")] SupplyArea,
666    #[cfg(feature = "hoi4")] TechnologyCategory,
667    #[cfg(feature = "hoi4")] TechnologyFolder,
668    #[cfg(feature = "hoi4")] TechnologySharing,
669    #[cfg(feature = "hoi4")] UnitHistory,
670    #[cfg(feature = "hoi4")] UnitLeaderSkill,
671    #[cfg(feature = "hoi4")] UnitLeaderTrait,
672    #[cfg(feature = "hoi4")] UnitNames,
673
674    #[cfg(feature = "eu5")] Advance,
675    #[cfg(feature = "eu5")] Age,
676    #[cfg(feature = "eu5")] AiDiplochance,
677    #[cfg(feature = "eu5")] AlertDescription,
678    #[cfg(feature = "eu5")] ArtistType,
679    #[cfg(feature = "eu5")] ArtistWork,
680    #[cfg(feature = "eu5")] AttributeColumn,
681    #[cfg(feature = "eu5")] AutoModifier,
682    #[cfg(feature = "eu5")] Avatar,
683    #[cfg(feature = "eu5")] Bias,
684    #[cfg(feature = "eu5")] BuildingCategory,
685    #[cfg(feature = "eu5")] CabinetAction,
686    #[cfg(feature = "eu5")] CharacterTraitCategory,
687    #[cfg(feature = "eu5")] ChildEducation,
688    #[cfg(feature = "eu5")] CountryDescriptionCategory,
689    #[cfg(feature = "eu5")] CountryInteraction,
690    #[cfg(feature = "eu5")] Currency,
691    #[cfg(feature = "eu5")] DesignatedHeirReason,
692    #[cfg(feature = "eu5")] DiplomaticCost,
693    #[cfg(feature = "eu5")] Disaster,
694    #[cfg(feature = "eu5")] Disease,
695    #[cfg(feature = "eu5")] EmploymentSystem,
696    #[cfg(feature = "eu5")] EstatePrivilege,
697    #[cfg(feature = "eu5")] Estate,
698    #[cfg(feature = "eu5")] FormableCountry,
699    #[cfg(feature = "eu5")] GenericActionAiList,
700    #[cfg(feature = "eu5")] GenericAction,
701    #[cfg(feature = "eu5")] God,
702    #[cfg(feature = "eu5")] Good,
703    #[cfg(feature = "eu5")] GoodsDemand,
704    #[cfg(feature = "eu5")] GoodsDemandCategory,
705    #[cfg(feature = "eu5")] GovernmentReform,
706    #[cfg(feature = "eu5")] Hegemon,
707    #[cfg(feature = "eu5")] HeirSelection,
708    #[cfg(feature = "eu5")] HistoricalScore,
709    #[cfg(feature = "eu5")] HolySiteType,
710    #[cfg(feature = "eu5")] Insult,
711    #[cfg(feature = "eu5")] InternationalOrganizationLandOwnershipRule,
712    #[cfg(feature = "eu5")] InternationalOrganizationPayment,
713    #[cfg(feature = "eu5")] InternationalOrganizationSpecialStatus,
714    #[cfg(feature = "eu5")] InternationalOrganization,
715    #[cfg(feature = "eu5")] JoinWarRule,
716    #[cfg(feature = "eu5")] LanguageFamily,
717    #[cfg(feature = "eu5")] Levy,
718    #[cfg(feature = "eu5")] LocationRank,
719    #[cfg(feature = "eu5")] MusicPlayerTrack,
720    #[cfg(feature = "eu5")] ParliamentAgenda,
721    #[cfg(feature = "eu5")] ParliamentIssue,
722    #[cfg(feature = "eu5")] ParliamentType,
723    #[cfg(feature = "eu5")] PeaceTreaty,
724    #[cfg(feature = "eu5")] Policy,
725    #[cfg(feature = "eu5")] RecruitmentMethod,
726    #[cfg(feature = "eu5")] Regency,
727    #[cfg(feature = "eu5")] ReligionGroup,
728    #[cfg(feature = "eu5")] ReligiousAspect,
729    #[cfg(feature = "eu5")] ReligiousFaction,
730    #[cfg(feature = "eu5")] ReligiousFigure,
731    #[cfg(feature = "eu5")] ReligiousFocus,
732    #[cfg(feature = "eu5")] ReligiousSchools,
733    #[cfg(feature = "eu5")] Resolution,
734    #[cfg(feature = "eu5")] RivalCriteria,
735    #[cfg(feature = "eu5")] RoadType,
736    #[cfg(feature = "eu5")] ScriptableHint,
737    #[cfg(feature = "eu5")] ScriptedCountryName,
738    #[cfg(feature = "eu5")] ScriptedDiplomaticObjective,
739    #[cfg(feature = "eu5")] ScriptedGeography,
740    #[cfg(feature = "eu5")] ScriptedModifiers,
741    #[cfg(feature = "eu5")] ScriptedRelations,
742    #[cfg(feature = "eu5")] SocietalValue,
743    #[cfg(feature = "eu5")] SubjectMilitaryStance,
744    #[cfg(feature = "eu5")] Test,
745    #[cfg(feature = "eu5")] Topography,
746    #[cfg(feature = "eu5")] TownSetup,
747    #[cfg(feature = "eu5")] TraitFlavor,
748    #[cfg(feature = "eu5")] UnitCategory,
749    #[cfg(feature = "eu5")] UnitFormationPreference,
750    #[cfg(feature = "eu5")] UnitType,
751    #[cfg(feature = "eu5")] Vegetation,
752}
753
754/// Display items in `separated word case` for maximum friendliness.
755///
756/// Unfortunately there's no option for this in `strum` so we have to roll our own
757/// by using `snake_case` and changing the `_` to a space.
758impl Display for Item {
759    fn fmt(&self, f: &mut Formatter) -> Result<(), std::fmt::Error> {
760        let s: &'static str = self.into();
761        write!(f, "{}", s.replace('_', " "))
762    }
763}
764
765impl Item {
766    /// Returns a path where items of this type are kept in the script files. Can be `""` for items
767    /// that are built in.
768    ///
769    /// These paths are used both for the user in error reports, and to find the items when loading them.
770    pub fn path(self) -> &'static str {
771        #[allow(clippy::match_same_arms)]
772        // These variants are in the same order as the Item enum declaration
773        match self {
774            #[cfg(feature = "jomini")]
775            Item::Accessory => "gfx/portraits/accessories/",
776            #[cfg(feature = "jomini")]
777            Item::AccessoryTag => "gfx/portraits/accessories/",
778            #[cfg(feature = "jomini")]
779            Item::AccessoryVariation => "gfx/portraits/accessory_variations/",
780            #[cfg(feature = "jomini")]
781            Item::AccessoryVariationLayout => "gfx/portraits/accessory_variations/",
782            #[cfg(feature = "jomini")]
783            Item::AccessoryVariationTextures => "gfx/portraits/accessory_variations/",
784            Item::Achievement => match Game::game() {
785                #[cfg(feature = "ck3")]
786                Game::Ck3 => "common/achievements/",
787                #[cfg(feature = "vic3")]
788                Game::Vic3 => "common/achievements/",
789                #[cfg(feature = "imperator")]
790                Game::Imperator => "common/achievements/",
791                #[cfg(feature = "eu5")]
792                Game::Eu5 => "common/achievements/",
793                #[cfg(feature = "hoi4")]
794                Game::Hoi4 => "common/achievements.txt",
795            },
796            #[cfg(feature = "jomini")]
797            Item::AchievementGroup => "common/achievement_groups.txt",
798            Item::Asset => "gfx/models/",
799            Item::BlendShape => "gfx/models/",
800            #[cfg(feature = "jomini")]
801            Item::CharacterInteraction => "common/character_interactions/",
802            #[cfg(feature = "jomini")]
803            Item::Coa => "common/coat_of_arms/coat_of_arms/",
804            #[cfg(feature = "jomini")]
805            Item::CoaColorList => "common/coat_of_arms/template_lists/",
806            #[cfg(feature = "jomini")]
807            Item::CoaColoredEmblemList => "common/coat_of_arms/template_lists/",
808            #[cfg(feature = "ck3")]
809            Item::CoaDesignerColorPalette => "gfx/coat_of_arms/color_palettes/",
810            #[cfg(feature = "jomini")]
811            Item::CoaDesignerColoredEmblem => "gfx/coat_of_arms/colored_emblems/",
812            #[cfg(feature = "ck3")]
813            Item::CoaDesignerEmblemLayout => "gfx/coat_of_arms/emblem_layouts/",
814            #[cfg(feature = "jomini")]
815            Item::CoaDesignerPattern => "gfx/coat_of_arms/patterns/",
816            #[cfg(feature = "jomini")]
817            Item::CoaPatternList => "common/coat_of_arms/template_lists/",
818            #[cfg(feature = "jomini")]
819            Item::CoaTemplate => "common/coat_of_arms/coat_of_arms/",
820            #[cfg(feature = "jomini")]
821            Item::CoaTemplateList => "common/coat_of_arms/template_lists/",
822            #[cfg(feature = "jomini")]
823            Item::CoaTexturedEmblemList => "common/coat_of_arms/template_lists/",
824            #[cfg(feature = "jomini")]
825            Item::Culture => match Game::game() {
826                #[cfg(feature = "ck3")]
827                Game::Ck3 => "common/culture/cultures/",
828                #[cfg(feature = "vic3")]
829                Game::Vic3 => "common/cultures/",
830                #[cfg(feature = "imperator")]
831                Game::Imperator => "common/cultures/",
832                #[cfg(feature = "eu5")]
833                Game::Eu5 => "common/cultures/",
834                #[cfg(feature = "hoi4")]
835                Game::Hoi4 => unreachable!(),
836            },
837            #[cfg(feature = "jomini")]
838            Item::CustomLocalization => "common/customizable_localization/",
839            Item::Decision => match Game::game() {
840                #[cfg(feature = "ck3")]
841                Game::Ck3 => "common/decisions/",
842                #[cfg(feature = "vic3")]
843                Game::Vic3 => "common/decisions/",
844                #[cfg(feature = "imperator")]
845                Game::Imperator => "decisions/",
846                #[cfg(feature = "eu5")]
847                Game::Eu5 => unreachable!(),
848                #[cfg(feature = "hoi4")]
849                Game::Hoi4 => "common/decisions/",
850            },
851            Item::Define => "common/defines/",
852            Item::Dlc => "dlc_metadata/",
853            Item::DlcFeature => "",
854            Item::DlcName => "dlc_metadata/",
855            Item::Directory => "",
856            #[cfg(feature = "jomini")]
857            Item::EffectLocalization => "common/effect_localization/",
858            Item::Entity => "gfx/models/",
859            Item::Entry => "",
860            #[cfg(feature = "jomini")]
861            Item::Ethnicity => "common/ethnicities/",
862            Item::Event => "events/",
863            Item::EventNamespace => "events/",
864            Item::File => "",
865            Item::Font => "fonts/",
866            Item::Fontfiles => "fonts/",
867            #[cfg(feature = "jomini")]
868            Item::GameConcept => "common/game_concepts/",
869            Item::GameRule => "common/game_rules/",
870            Item::GameRuleSetting => "common/game_rules/",
871            #[cfg(feature = "jomini")]
872            Item::GeneAgePreset => "common/genes/",
873            #[cfg(feature = "jomini")]
874            Item::GeneAttribute => "gfx/models/",
875            #[cfg(feature = "jomini")]
876            Item::GeneCategory => "common/genes/",
877            #[cfg(feature = "jomini")]
878            Item::GovernmentType => match Game::game() {
879                #[cfg(feature = "ck3")]
880                Game::Ck3 => "common/governments/",
881                #[cfg(feature = "vic3")]
882                Game::Vic3 => "common/government_types/",
883                #[cfg(feature = "imperator")]
884                Game::Imperator => "common/governments/",
885                #[cfg(feature = "eu5")]
886                Game::Eu5 => "common/government_types/",
887                #[cfg(feature = "hoi4")]
888                Game::Hoi4 => unreachable!(),
889            },
890            Item::GuiLayer => "gui/",
891            Item::GuiTemplate => "gui/",
892            Item::GuiType => "gui/",
893            Item::Localization => "localization/",
894            Item::MapEnvironment => "gfx/map/environment/",
895            Item::MapMode => "gfx/map/map_modes/",
896            Item::Modifier => match Game::game() {
897                #[cfg(feature = "ck3")]
898                Game::Ck3 => "common/modifiers/",
899                #[cfg(feature = "vic3")]
900                Game::Vic3 => "common/static_modifiers/",
901                #[cfg(feature = "imperator")]
902                Game::Imperator => "common/modifiers/",
903                #[cfg(feature = "eu5")]
904                // TODO: EU5 verify
905                Game::Eu5 => "common/static_modifiers/",
906                #[cfg(feature = "hoi4")]
907                Game::Hoi4 => "common/modifiers/", // TODO HOI4
908            },
909            Item::Music => "music/",
910            #[cfg(feature = "jomini")]
911            Item::MusicPlayerCategory => "music/music_player_categories/",
912            #[cfg(feature = "jomini")]
913            Item::NamedColor => "common/named_colors/",
914            Item::OnAction => match Game::game() {
915                #[cfg(feature = "ck3")]
916                Game::Ck3 => "common/on_action/",
917                #[cfg(feature = "vic3")]
918                Game::Vic3 => "common/on_actions/",
919                #[cfg(feature = "imperator")]
920                Game::Imperator => "common/on_action/",
921                #[cfg(feature = "eu5")]
922                Game::Eu5 => "common/on_action/",
923                #[cfg(feature = "hoi4")]
924                Game::Hoi4 => "common/on_actions/", // TODO HOI4
925            },
926            Item::Pdxmesh => "gfx/models/",
927            #[cfg(feature = "jomini")]
928            Item::PortraitAnimation => "gfx/portraits/portrait_animations/",
929            #[cfg(feature = "jomini")]
930            Item::PortraitCamera => "gfx/portraits/cameras/",
931            #[cfg(feature = "jomini")]
932            Item::PortraitEnvironment => "gfx/portraits/environments/",
933            #[cfg(feature = "jomini")]
934            Item::PortraitModifierGroup => "gfx/portraits/portrait_modifiers/",
935            #[cfg(feature = "jomini")]
936            Item::PortraitModifierPack => "gfx/portraits/portrait_animations/",
937            Item::Province => match Game::game() {
938                #[cfg(feature = "ck3")]
939                Game::Ck3 => "map_data/definition.csv",
940                #[cfg(feature = "vic3")]
941                Game::Vic3 => "map_data/provinces.png",
942                #[cfg(feature = "imperator")]
943                Game::Imperator => "map_data/provinces.png",
944                #[cfg(feature = "eu5")]
945                Game::Eu5 => "map_data/provinces.png",
946                #[cfg(feature = "hoi4")]
947                Game::Hoi4 => "map/definition.csv", // TODO HOI4
948            },
949            #[cfg(feature = "jomini")]
950            Item::Religion => match Game::game() {
951                #[cfg(feature = "ck3")]
952                Game::Ck3 => "common/religion/religions/",
953                #[cfg(feature = "vic3")]
954                Game::Vic3 => "common/religions/",
955                #[cfg(feature = "imperator")]
956                Game::Imperator => "common/religions/",
957                #[cfg(feature = "eu5")]
958                Game::Eu5 => "common/religions/",
959                #[cfg(feature = "hoi4")]
960                Game::Hoi4 => unreachable!(),
961            },
962            Item::ScriptedEffect => "common/scripted_effects/",
963            Item::ScriptedGui => "common/scripted_guis/",
964            #[cfg(feature = "jomini")]
965            Item::ScriptedList => "common/scripted_lists/",
966            #[cfg(feature = "jomini")]
967            Item::ScriptedModifier => "common/scripted_modifiers/",
968            #[cfg(feature = "jomini")]
969            Item::ScriptedRule => "common/scripted_rules/",
970            Item::ScriptedTrigger => "common/scripted_triggers/",
971            #[cfg(feature = "jomini")]
972            Item::ScriptValue => "common/script_values/",
973            Item::Shortcut => "gui/shortcuts.shortcuts",
974            Item::Sound => match Game::game() {
975                #[cfg(feature = "hoi4")]
976                Game::Hoi4 => "sound/",
977                #[cfg(feature = "jomini")]
978                _ => "",
979            },
980            Item::Terrain => match Game::game() {
981                #[cfg(feature = "ck3")]
982                Game::Ck3 => "common/terrain_types/",
983                #[cfg(feature = "vic3")]
984                Game::Vic3 => "common/terrain/",
985                #[cfg(feature = "imperator")]
986                Game::Imperator => "common/terrain_types/",
987                #[cfg(feature = "eu5")]
988                // TODO: EU5 verify
989                Game::Eu5 => "common/terrain/",
990                #[cfg(feature = "hoi4")]
991                Game::Hoi4 => "common/terrain/",
992            },
993            Item::TextFormat => "gui/",
994            Item::TextIcon => "gui/",
995            Item::TextureFile => "gfx/models/",
996            #[cfg(feature = "jomini")]
997            Item::TriggerLocalization => "common/trigger_localization/",
998            Item::WidgetName => "gui/",
999
1000            #[cfg(any(feature = "vic3", feature = "hoi4"))]
1001            Item::AiStrategy => match Game::game() {
1002                #[cfg(feature = "vic3")]
1003                Game::Vic3 => "common/ai_strategies/",
1004                #[cfg(feature = "hoi4")]
1005                Game::Hoi4 => "common/ai_strategy/",
1006                #[allow(unreachable_patterns)]
1007                _ => unreachable!(),
1008            },
1009            #[cfg(any(feature = "ck3", feature = "imperator", feature = "hoi4"))]
1010            Item::Building => "common/buildings/",
1011            #[cfg(any(feature = "ck3", feature = "eu5"))]
1012            Item::CasusBelli => match Game::game() {
1013                #[cfg(feature = "ck3")]
1014                Game::Ck3 => "common/casus_belli_types/",
1015                #[cfg(feature = "eu5")]
1016                Game::Eu5 => "common/casus_belli/",
1017                #[allow(unreachable_patterns)]
1018                _ => unreachable!(),
1019            },
1020            #[cfg(any(feature = "ck3", feature = "hoi4"))]
1021            Item::Character => match Game::game() {
1022                #[cfg(feature = "ck3")]
1023                Game::Ck3 => "history/characters/",
1024                #[cfg(feature = "hoi4")]
1025                Game::Hoi4 => "common/characters/",
1026                #[allow(unreachable_patterns)]
1027                _ => unreachable!(),
1028            },
1029            #[cfg(any(feature = "vic3", feature = "eu5"))]
1030            Item::BuildingType => match Game::game() {
1031                #[cfg(feature = "vic3")]
1032                Game::Vic3 => "common/buildings/",
1033                #[cfg(feature = "eu5")]
1034                Game::Eu5 => "common/building_types/",
1035                #[allow(unreachable_patterns)]
1036                _ => unreachable!(),
1037            },
1038            #[cfg(any(feature = "ck3", feature = "vic3"))]
1039            Item::CharacterTemplate => match Game::game() {
1040                #[cfg(feature = "ck3")]
1041                Game::Ck3 => "common/scripted_character_templates/",
1042                #[cfg(feature = "vic3")]
1043                Game::Vic3 => "common/character_templates/",
1044                #[allow(unreachable_patterns)]
1045                _ => unreachable!(),
1046            },
1047            #[cfg(any(feature = "vic3", feature = "imperator"))]
1048            Item::CharacterTrait => match Game::game() {
1049                #[cfg(feature = "vic3")]
1050                Game::Vic3 => "common/character_traits/",
1051                #[cfg(feature = "imperator")]
1052                Game::Imperator => "common/traits/",
1053                #[allow(unreachable_patterns)]
1054                _ => unreachable!(),
1055            },
1056            #[cfg(any(feature = "ck3", feature = "eu5"))]
1057            Item::Climate => match Game::game() {
1058                #[cfg(feature = "ck3")]
1059                Game::Ck3 => "map_data/climate.txt",
1060                #[cfg(feature = "eu5")]
1061                Game::Eu5 => "common/climates",
1062                #[allow(unreachable_patterns)]
1063                _ => unreachable!(),
1064            },
1065            #[cfg(any(feature = "imperator", feature = "hoi4"))]
1066            Item::CombatTactic => match Game::game() {
1067                #[cfg(feature = "imperator")]
1068                Game::Imperator => "common/combat_tactics/",
1069                #[cfg(feature = "hoi4")]
1070                Game::Hoi4 => "common/combat_tactics.txt", // TODO HOI4
1071                #[allow(unreachable_patterns)]
1072                _ => unreachable!(),
1073            },
1074            #[cfg(any(feature = "vic3", feature = "imperator", feature = "hoi4"))]
1075            Item::Country => match Game::game() {
1076                #[cfg(feature = "vic3")]
1077                Game::Vic3 => "common/country_definitions/",
1078                #[cfg(feature = "imperator")]
1079                Game::Imperator => "setup/countries/countries.txt",
1080                #[cfg(feature = "hoi4")]
1081                Game::Hoi4 => "common/countries/", // TODO HOI4
1082                #[allow(unreachable_patterns)]
1083                _ => unreachable!(),
1084            },
1085            #[cfg(any(feature = "vic3", feature = "eu5"))]
1086            Item::CountryRank => "common/country_ranks/",
1087            #[cfg(any(feature = "ck3", feature = "imperator", feature = "eu5"))]
1088            Item::DeathReason => match Game::game() {
1089                #[cfg(feature = "ck3")]
1090                Game::Ck3 => "common/deathreasons/",
1091                #[cfg(feature = "imperator")]
1092                Game::Imperator => "common/deathreasons/",
1093                #[cfg(feature = "eu5")]
1094                Game::Eu5 => "common/death_reason/",
1095                #[allow(unreachable_patterns)]
1096                _ => unreachable!(),
1097            },
1098            #[cfg(any(feature = "imperator", feature = "eu5"))]
1099            Item::CultureGroup => match Game::game() {
1100                #[cfg(feature = "imperator")]
1101                Game::Imperator => "common/cultures/",
1102                #[cfg(feature = "eu5")]
1103                Game::Eu5 => "common/culture_groups/",
1104                #[allow(unreachable_patterns)]
1105                _ => unreachable!(),
1106            },
1107            #[cfg(any(feature = "ck3", feature = "vic3", feature = "eu5"))]
1108            Item::Dna => match Game::game() {
1109                #[cfg(feature = "ck3")]
1110                Game::Ck3 => "common/dna_data/",
1111                #[cfg(feature = "vic3")]
1112                Game::Vic3 => "common/dna_data/",
1113                #[cfg(feature = "eu5")]
1114                Game::Eu5 => "common/persistent_dna/",
1115                #[allow(unreachable_patterns)]
1116                _ => unreachable!(),
1117            },
1118            #[cfg(any(feature = "ck3", feature = "imperator"))]
1119            Item::EventTheme => "common/event_themes/",
1120            #[cfg(any(feature = "ck3", feature = "eu5"))]
1121            Item::HolySite => match Game::game() {
1122                #[cfg(feature = "ck3")]
1123                Game::Ck3 => "common/religion/holy_sites/",
1124                #[cfg(feature = "eu5")]
1125                Game::Eu5 => "common/holy_sites/",
1126                #[allow(unreachable_patterns)]
1127                _ => unreachable!(),
1128            },
1129            #[cfg(any(feature = "imperator", feature = "hoi4"))]
1130            Item::Idea => "common/ideas/", // TODO HOI4
1131            #[cfg(any(feature = "vic3", feature = "hoi4"))]
1132            Item::Ideology => "common/ideologies/",
1133            #[cfg(any(feature = "vic3", feature = "eu5"))]
1134            Item::Institution => match Game::game() {
1135                #[cfg(feature = "vic3")]
1136                Game::Vic3 => "common/institutions/",
1137                #[cfg(feature = "eu5")]
1138                Game::Eu5 => "common/institution/",
1139                #[allow(unreachable_patterns)]
1140                _ => unreachable!(),
1141            },
1142            #[cfg(any(feature = "ck3", feature = "eu5"))]
1143            Item::Language => match Game::game() {
1144                #[cfg(feature = "ck3")]
1145                Game::Ck3 => "common/culture/pillars/",
1146                #[cfg(feature = "eu5")]
1147                Game::Eu5 => "common/languages/",
1148                #[allow(unreachable_patterns)]
1149                _ => unreachable!(),
1150            },
1151            #[cfg(any(feature = "ck3", feature = "imperator", feature = "eu5"))]
1152            Item::Law => "common/laws/",
1153            #[cfg(any(feature = "ck3", feature = "vic3", feature = "imperator"))]
1154            Item::LawGroup => match Game::game() {
1155                #[cfg(feature = "ck3")]
1156                Game::Ck3 => "common/laws/",
1157                #[cfg(feature = "imperator")]
1158                Game::Imperator => "common/laws/",
1159                #[cfg(feature = "vic3")]
1160                Game::Vic3 => "common/law_groups/",
1161                #[allow(unreachable_patterns)]
1162                _ => unreachable!(),
1163            },
1164            #[cfg(any(feature = "ck3", feature = "vic3"))]
1165            Item::Message => "common/messages",
1166            #[cfg(any(feature = "imperator", feature = "hoi4", feature = "eu5"))]
1167            Item::Mission => match Game::game() {
1168                #[cfg(feature = "imperator")]
1169                Game::Imperator => "common/missions/",
1170                #[cfg(feature = "eu5")]
1171                Game::Eu5 => "common/missions/",
1172                #[cfg(feature = "hoi4")]
1173                Game::Hoi4 => "common/script_enums.txt",
1174                #[allow(unreachable_patterns)]
1175                _ => unreachable!(),
1176            },
1177            #[cfg(any(feature = "vic3", feature = "eu5"))]
1178            Item::ModifierTypeDefinition => "common/modifier_type_definitions/",
1179            #[cfg(any(feature = "vic3", feature = "imperator", feature = "eu5"))]
1180            Item::PopType => "common/pop_types/",
1181            #[cfg(any(feature = "imperator", feature = "eu5"))]
1182            Item::Price => "common/prices/",
1183            #[cfg(any(feature = "vic3", feature = "eu5"))]
1184            Item::ProductionMethod => "common/production_methods/",
1185            #[cfg(any(feature = "ck3", feature = "imperator"))]
1186            Item::Region => match Game::game() {
1187                #[cfg(feature = "ck3")]
1188                Game::Ck3 => "map_data/geographical_regions/",
1189                #[cfg(feature = "imperator")]
1190                Game::Imperator => "map_data/regions.txt",
1191                #[allow(unreachable_patterns)]
1192                _ => unreachable!(),
1193            },
1194            #[cfg(any(feature = "ck3", feature = "eu5"))]
1195            Item::Situation => match Game::game() {
1196                #[cfg(feature = "ck3")]
1197                Game::Ck3 => "common/situation/situations/",
1198                #[cfg(feature = "eu5")]
1199                Game::Eu5 => "common/situations/",
1200                #[allow(unreachable_patterns)]
1201                _ => unreachable!(),
1202            },
1203            #[cfg(any(feature = "vic3", feature = "hoi4"))]
1204            Item::StrategicRegion => match Game::game() {
1205                #[cfg(feature = "vic3")]
1206                Game::Vic3 => "common/strategic_regions/",
1207                #[cfg(feature = "hoi4")]
1208                Game::Hoi4 => "map/strategicregions/",
1209                #[allow(unreachable_patterns)]
1210                _ => unreachable!(),
1211            },
1212            #[cfg(any(feature = "vic3", feature = "imperator", feature = "eu5"))]
1213            Item::SubjectType => "common/subject_types/",
1214            #[cfg(any(feature = "vic3", feature = "hoi4"))]
1215            Item::Technology => match Game::game() {
1216                #[cfg(feature = "vic3")]
1217                Game::Vic3 => "common/technology/technologies/",
1218                #[cfg(feature = "hoi4")]
1219                Game::Hoi4 => "common/technologies/",
1220                #[allow(unreachable_patterns)]
1221                _ => unreachable!(),
1222            },
1223            #[cfg(any(feature = "ck3", feature = "eu5"))]
1224            Item::Trait => "common/traits/",
1225            #[cfg(any(feature = "ck3", feature = "vic3", feature = "eu5"))]
1226            Item::TutorialLesson => "common/tutorial_lessons",
1227            #[cfg(any(feature = "ck3", feature = "vic3", feature = "eu5"))]
1228            Item::TutorialLessonChain => "common/tutorial_lesson_chains",
1229            #[cfg(any(feature = "ck3", feature = "vic3", feature = "eu5"))]
1230            Item::TutorialLessonStep => "common/tutorial_lessons",
1231            #[cfg(any(feature = "imperator", feature = "eu5"))]
1232            Item::UnitAbility => "common/unit_abilities/",
1233            #[cfg(any(feature = "imperator", feature = "eu5"))]
1234            Item::Wargoal => "common/wargoals",
1235
1236            #[cfg(feature = "ck3")]
1237            Item::AccoladeCategory => "common/accolade_types/",
1238            #[cfg(feature = "ck3")]
1239            Item::AccoladeIcon => "common/accolade_icons/",
1240            #[cfg(feature = "ck3")]
1241            Item::AccoladeName => "common/accolade_names/",
1242            #[cfg(feature = "ck3")]
1243            Item::AccoladeParameter => "common/accolade_types/",
1244            #[cfg(feature = "ck3")]
1245            Item::AccoladeType => "common/accolade_types/",
1246            #[cfg(feature = "ck3")]
1247            Item::ActivityGroupType => "common/activities/activity_group_types/",
1248            #[cfg(feature = "ck3")]
1249            Item::ActivityIntent => "common/activities/intents/",
1250            #[cfg(feature = "ck3")]
1251            Item::ActivityLocale => "common/activities/activity_locales/",
1252            #[cfg(feature = "ck3")]
1253            Item::ActivityOption => "common/activities/activity_types/",
1254            #[cfg(feature = "ck3")]
1255            Item::ActivityOptionCategory => "common/activities/activity_types/",
1256            #[cfg(feature = "ck3")]
1257            Item::ActivityPhase => "common/activities/activity_types/",
1258            #[cfg(feature = "ck3")]
1259            Item::ActivityPulseAction => "common/activities/pulse_actions/",
1260            #[cfg(feature = "ck3")]
1261            Item::ActivityState => "",
1262            #[cfg(feature = "ck3")]
1263            Item::ActivityType => "common/activities/activity_types/",
1264            #[cfg(feature = "ck3")]
1265            Item::AiWarStance => "common/ai_war_stances/",
1266            #[cfg(feature = "ck3")]
1267            Item::AgentType => "common/schemes/agent_types/",
1268            #[cfg(feature = "ck3")]
1269            Item::Amenity => "common/court_amenities/",
1270            #[cfg(feature = "ck3")]
1271            Item::AmenitySetting => "common/court_amenities/",
1272            #[cfg(feature = "ck3")]
1273            Item::ArtifactBlueprint => "common/artifacts/blueprints/",
1274            #[cfg(feature = "ck3")]
1275            Item::ArtifactFeature => "common/artifacts/features/",
1276            #[cfg(feature = "ck3")]
1277            Item::ArtifactFeatureGroup => "common/artifacts/feature_groups/",
1278            #[cfg(feature = "ck3")]
1279            Item::ArtifactHistory => "",
1280            #[cfg(feature = "ck3")]
1281            Item::ArtifactRarity => "",
1282            #[cfg(feature = "ck3")]
1283            Item::ArtifactSlot => "common/artifacts/slots/",
1284            #[cfg(feature = "ck3")]
1285            Item::ArtifactSlotType => "common/artifacts/slots/",
1286            #[cfg(feature = "ck3")]
1287            Item::ArtifactTemplate => "common/artifacts/templates/",
1288            #[cfg(feature = "ck3")]
1289            Item::ArtifactType => "common/artifacts/types/",
1290            #[cfg(feature = "ck3")]
1291            Item::ArtifactVisual => "common/artifacts/visuals/",
1292            #[cfg(feature = "ck3")]
1293            Item::Bookmark => "common/bookmarks/bookmarks/",
1294            #[cfg(feature = "ck3")]
1295            Item::BookmarkGroup => "common/bookmarks/groups/",
1296            #[cfg(feature = "ck3")]
1297            Item::BookmarkPortrait => "common/bookmark_portraits/",
1298            #[cfg(feature = "ck3")]
1299            Item::BooleanHouseHeadParameter => "common/house_aspirations/",
1300            #[cfg(feature = "ck3")]
1301            Item::BooleanHousePowerParameter => "common/house_aspirations/",
1302            #[cfg(feature = "ck3")]
1303            Item::BooleanHouseRelationParameter => "common/house_relation_types/",
1304            #[cfg(feature = "ck3")]
1305            Item::BuildingFlag => "common/buildings/",
1306            #[cfg(feature = "ck3")]
1307            Item::BuildingGfx => "common/culture/cultures/",
1308            #[cfg(feature = "ck3")]
1309            Item::CasusBelliGroup => "common/casus_belli_groups/",
1310            #[cfg(feature = "ck3")]
1311            Item::Catalyst => "common/struggle/catalysts/",
1312            #[cfg(feature = "ck3")]
1313            Item::ChallengeCharacter => "common/bookmarks/challenge_characters/",
1314            #[cfg(feature = "ck3")]
1315            Item::CharacterBackground => "common/character_backgrounds/",
1316            #[cfg(feature = "ck3")]
1317            Item::CharacterInteractionCategory => "common/character_interaction_categories/",
1318            #[cfg(feature = "ck3")]
1319            Item::ClothingGfx => "common/culture/cultures/",
1320            #[cfg(feature = "ck3")]
1321            Item::CoaGfx => "common/culture/cultures/",
1322            #[cfg(feature = "ck3")]
1323            Item::CoaDynamicDefinition => "common/coat_of_arms/dynamic_definitions/",
1324            #[cfg(feature = "ck3")]
1325            Item::CohesionLevelParameter => "common/confederation_types/",
1326            #[cfg(feature = "ck3")]
1327            Item::CombatEffect => "common/combat_effects/",
1328            #[cfg(feature = "ck3")]
1329            Item::CombatPhaseEvent => "common/combat_phase_events/",
1330            #[cfg(feature = "ck3")]
1331            Item::ConfederationType => "common/confederation_types/",
1332            #[cfg(feature = "ck3")]
1333            Item::ConnectionArrow => "common/connection_arrows/",
1334            #[cfg(feature = "ck3")]
1335            Item::CouncilPosition => "common/council_positions/",
1336            #[cfg(feature = "ck3")]
1337            Item::CouncilTask => "common/council_tasks/",
1338            #[cfg(feature = "ck3")]
1339            Item::Countermeasure => "common/schemes/scheme_countermeasures/",
1340            #[cfg(feature = "ck3")]
1341            Item::CountermeasureParameter => "common/schemes/scheme_countermeasures/",
1342            #[cfg(feature = "ck3")]
1343            Item::CourtPosition => "common/court_positions/types/",
1344            #[cfg(feature = "ck3")]
1345            Item::CourtPositionTask => "common/court_positions/tasks/",
1346            #[cfg(feature = "ck3")]
1347            Item::CourtSceneCulture => "gfx/court_scene/scene_cultures/",
1348            #[cfg(feature = "ck3")]
1349            Item::CourtSceneGroup => "gfx/court_scene/character_groups/",
1350            #[cfg(feature = "ck3")]
1351            Item::CourtSceneRole => "gfx/court_scene/character_roles/",
1352            #[cfg(feature = "ck3")]
1353            Item::CourtSceneSetting => "gfx/court_scene/scene_settings/",
1354            #[cfg(feature = "ck3")]
1355            Item::CourtType => "common/court_types/",
1356            #[cfg(feature = "ck3")]
1357            Item::CourtierGuestManagement => "common/courtier_guest_management/",
1358            #[cfg(feature = "ck3")]
1359            Item::CultureAesthetic => "common/culture/aesthetics_bundles/",
1360            #[cfg(feature = "ck3")]
1361            Item::CultureCreationName => "common/culture/creation_names/",
1362            #[cfg(feature = "ck3")]
1363            Item::CultureEra => "common/culture/eras/",
1364            #[cfg(feature = "ck3")]
1365            Item::CultureEthos => "common/culture/pillars/",
1366            #[cfg(feature = "ck3")]
1367            Item::CultureHeritage => "common/culture/pillars/",
1368            #[cfg(feature = "ck3")]
1369            Item::CultureHistory => "history/cultures/",
1370            #[cfg(feature = "ck3")]
1371            // This is ugly since it isn't a path, but the path won't be used except in messages.
1372            Item::CultureParameter => "common/culture/ parameters blocks",
1373            #[cfg(feature = "ck3")]
1374            Item::CulturePillar => "common/culture/pillars/",
1375            #[cfg(feature = "ck3")]
1376            Item::CultureTradition => "common/culture/traditions/",
1377            #[cfg(feature = "ck3")]
1378            Item::CultureTraditionCategory => "common/culture/traditions/",
1379            #[cfg(feature = "ck3")]
1380            Item::DangerType => "",
1381            #[cfg(feature = "ck3")]
1382            Item::DecisionGroup => "common/decision_group_types/",
1383            #[cfg(feature = "ck3")]
1384            Item::DiarchyMandate => "common/diarchies/diarchy_mandates/",
1385            #[cfg(feature = "ck3")]
1386            Item::DiarchyParameter => "common/diarchies/diarchy_types/",
1387            #[cfg(feature = "ck3")]
1388            Item::DiarchyType => "common/diarchies/diarchy_types/",
1389            #[cfg(feature = "ck3")]
1390            Item::Doctrine => "common/religion/doctrines/",
1391            #[cfg(feature = "ck3")]
1392            Item::DoctrineBooleanParameter => "common/religion/doctrines/",
1393            #[cfg(feature = "ck3")]
1394            Item::DoctrineCategory => "common/religion/doctrines/",
1395            #[cfg(feature = "ck3")]
1396            Item::DoctrineParameter => "common/religion/doctrines/",
1397            #[cfg(feature = "ck3")]
1398            Item::DomicileBuilding => "common/domiciles/buildings/",
1399            #[cfg(feature = "ck3")]
1400            Item::DomicileParameter => "common/domiciles/buildings/",
1401            #[cfg(feature = "ck3")]
1402            Item::DomicileType => "common/domiciles/types/",
1403            #[cfg(feature = "ck3")]
1404            Item::Dynasty => "common/dynasties/",
1405            #[cfg(feature = "ck3")]
1406            Item::DynastyLegacy => "common/dynasty_legacies/",
1407            #[cfg(feature = "ck3")]
1408            Item::DynastyPerk => "common/dynasty_perks/",
1409            #[cfg(feature = "ck3")]
1410            Item::EpidemicType => "common/epidemics/",
1411            #[cfg(feature = "ck3")]
1412            Item::EpidemicDeathReason => "common/deathreasons/",
1413            #[cfg(feature = "ck3")]
1414            Item::EventBackground => "common/event_backgrounds/",
1415            #[cfg(feature = "ck3")]
1416            Item::EventEffect2d => "common/event_2d_effects/",
1417            #[cfg(feature = "ck3")]
1418            Item::EventTransition => "common/event_transitions/",
1419            #[cfg(feature = "ck3")]
1420            Item::Faction => "common/factions/",
1421            #[cfg(feature = "ck3")]
1422            Item::Faith => "common/religion/religions/",
1423            #[cfg(feature = "ck3")]
1424            Item::FaithIcon => "common/religion/religions/",
1425            #[cfg(feature = "ck3")]
1426            Item::FervorModifier => "common/religion/fervor_modifiers/",
1427            #[cfg(feature = "ck3")]
1428            Item::FlatMapStyle => "gfx/map/flat_map_styles/",
1429            #[cfg(feature = "ck3")]
1430            Item::Flavorization => "common/flavorization/",
1431            #[cfg(feature = "ck3")]
1432            Item::Focus => "common/focuses/",
1433            #[cfg(feature = "ck3")]
1434            Item::GeneticConstraint => "common/traits/",
1435            #[cfg(feature = "ck3")]
1436            Item::GovernmentFlag => "common/governments/",
1437            #[cfg(feature = "ck3")]
1438            Item::GraphicalFaith => "common/religion/religions/",
1439            #[cfg(feature = "ck3")]
1440            Item::GraphicalUnitType => "common/graphical_unit_types/",
1441            #[cfg(feature = "ck3")]
1442            Item::GreatProjectType => "common/great_projects/types/",
1443            #[cfg(feature = "ck3")]
1444            Item::GuestInviteRule => "common/activities/guest_invite_rules/",
1445            #[cfg(feature = "ck3")]
1446            Item::GuestSubset => "common/activities/activity_types/",
1447            #[cfg(feature = "ck3")]
1448            Item::GuestSystem => "common/guest_system/",
1449            #[cfg(feature = "ck3")]
1450            Item::HeadDetermination => "common/culture/pillars/",
1451            #[cfg(feature = "ck3")]
1452            Item::HoldingParameter => "common/holdings/",
1453            #[cfg(feature = "ck3")]
1454            Item::HoldingType => "common/holdings/",
1455            #[cfg(feature = "ck3")]
1456            Item::HolySiteFlag => "common/religion/holy_sites/",
1457            #[cfg(feature = "ck3")]
1458            Item::Hook => "common/hook_types/",
1459            #[cfg(feature = "ck3")]
1460            Item::House => "common/dynasty_houses/",
1461            #[cfg(feature = "ck3")]
1462            Item::HouseAspiration => "common/house_aspirations/",
1463            #[cfg(feature = "ck3")]
1464            Item::HouseRelationLevel => "common/house_relation_types/",
1465            #[cfg(feature = "ck3")]
1466            Item::HouseRelationType => "common/house_relation_types/",
1467            #[cfg(feature = "ck3")]
1468            Item::HouseUnity => "common/house_unities/",
1469            #[cfg(feature = "ck3")]
1470            Item::HouseUnityParameter => "common/house_unities",
1471            #[cfg(feature = "ck3")]
1472            Item::HouseUnityStage => "common/house_unities/",
1473            #[cfg(feature = "ck3")]
1474            Item::ImportantAction => "common/important_actions/",
1475            #[cfg(feature = "ck3")]
1476            Item::Innovation => "common/culture/innovations/",
1477            #[cfg(feature = "ck3")]
1478            Item::InnovationFlag => "common/culture/innovations/",
1479            #[cfg(feature = "ck3")]
1480            Item::InnovationParameter => "common/culture/innovations/",
1481            #[cfg(feature = "ck3")]
1482            Item::Inspiration => "common/inspirations/",
1483            #[cfg(feature = "ck3")]
1484            Item::LawFlag => "common/laws/",
1485            #[cfg(feature = "ck3")]
1486            Item::LeaseContract => "common/lease_contracts/",
1487            #[cfg(feature = "ck3")]
1488            Item::LegendChapter => "common/legends/chronicles/",
1489            #[cfg(feature = "ck3")]
1490            Item::LegendChronicle => "common/legends/chronicles/",
1491            #[cfg(feature = "ck3")]
1492            Item::LegendProperty => "common/legends/chronicles/",
1493            #[cfg(feature = "ck3")]
1494            Item::LegendSeed => "common/legends/legend_seeds/",
1495            #[cfg(feature = "ck3")]
1496            Item::LegendType => "common/legends/legend_types/",
1497            #[cfg(feature = "ck3")]
1498            Item::LegitimacyFlag => "common/legitimacy/",
1499            #[cfg(feature = "ck3")]
1500            Item::LegitimacyType => "common/legitimacy/",
1501            #[cfg(feature = "ck3")]
1502            Item::Lifestyle => "common/lifestyles/",
1503            #[cfg(feature = "ck3")]
1504            Item::LineType => "gfx/lines/lines.lines",
1505            #[cfg(feature = "ck3")]
1506            Item::MartialCustom => "common/culture/pillars/",
1507            #[cfg(feature = "ck3")]
1508            Item::MemoryCategory => "common/character_memory_types/",
1509            #[cfg(feature = "ck3")]
1510            Item::MemoryType => "common/character_memory_types/",
1511            #[cfg(feature = "ck3")]
1512            Item::MenAtArms => "common/men_at_arms_types/",
1513            #[cfg(feature = "ck3")]
1514            Item::MenAtArmsBase => "common/men_at_arms_types/",
1515            #[cfg(feature = "ck3")]
1516            Item::MessageFilterType => "common/message_filter_types/",
1517            #[cfg(feature = "ck3")]
1518            Item::MessageGroupType => "common/message_group_types/",
1519            #[cfg(feature = "ck3")]
1520            Item::ModifierFormat => "common/modifier_definition_formats/",
1521            #[cfg(feature = "ck3")]
1522            Item::MottoInsert => "common/dynasty_house_motto_inserts/",
1523            #[cfg(feature = "ck3")]
1524            Item::Motto => "common/dynasty_house_mottos/",
1525            #[cfg(feature = "ck3")]
1526            Item::NameEquivalency => "common/culture/name_equivalency/",
1527            #[cfg(feature = "ck3")]
1528            Item::NameList => "common/culture/name_lists/",
1529            #[cfg(feature = "ck3")]
1530            Item::Nickname => "common/nicknames/",
1531            #[cfg(feature = "ck3")]
1532            Item::OpinionModifier => "common/opinion_modifiers/",
1533            #[cfg(feature = "ck3")]
1534            Item::Perk => "common/lifestyle_perks/",
1535            #[cfg(feature = "ck3")]
1536            Item::PerkTree => "common/lifestyle_perks/",
1537            #[cfg(feature = "ck3")]
1538            Item::PlayableDifficultyInfo => "common/playable_difficulty_infos/",
1539            #[cfg(feature = "ck3")]
1540            Item::PointOfInterest => "common/travel/point_of_interest_types/",
1541            #[cfg(feature = "ck3")]
1542            Item::PoolSelector => "common/pool_character_selectors/",
1543            #[cfg(feature = "ck3")]
1544            Item::PortraitType => "common/portrait_types/",
1545            #[cfg(feature = "ck3")]
1546            Item::ProjectContribution => "common/great_projects/types/",
1547            #[cfg(feature = "ck3")]
1548            Item::ProvinceEffect => "gfx/map/province_effects/",
1549            #[cfg(feature = "ck3")]
1550            Item::ProvinceMapping => "history/province_mapping/",
1551            #[cfg(feature = "ck3")]
1552            Item::PrisonType => "",
1553            #[cfg(feature = "ck3")]
1554            Item::RaidIntent => "common/raids/intents/",
1555            #[cfg(feature = "ck3")]
1556            Item::Relation => "common/scripted_relations/",
1557            #[cfg(feature = "ck3")]
1558            Item::RelationFlag => "common/scripted_relations/",
1559            #[cfg(feature = "ck3")]
1560            Item::ReligionFamily => "common/religion/religion_families/",
1561            #[cfg(feature = "ck3")]
1562            Item::RewardItem => "",
1563            #[cfg(feature = "ck3")]
1564            Item::RulerObjectiveType => "common/ruler_objective_advice_types/",
1565            #[cfg(feature = "ck3")]
1566            Item::SubjectContract => "common/subject_contracts/contracts/",
1567            #[cfg(feature = "ck3")]
1568            Item::SubjectContractFlag => "common/subject_contracts/contracts/",
1569            #[cfg(feature = "ck3")]
1570            Item::SubjectContractGroup => "common/subject_contracts/groups/",
1571            #[cfg(feature = "ck3")]
1572            Item::SubjectContractObligationLevel => "common/subject_contracts/contracts/",
1573            #[cfg(feature = "ck3")]
1574            Item::Scheme => "common/schemes/scheme_types",
1575            #[cfg(feature = "ck3")]
1576            Item::SchemePulseAction => "common/schemes/pulse_actions",
1577            #[cfg(feature = "ck3")]
1578            Item::ScriptedAnimation => "common/scripted_animations/",
1579            #[cfg(feature = "ck3")]
1580            Item::ScriptedCost => "common/scripted_costs/",
1581            #[cfg(feature = "ck3")]
1582            Item::ScriptedIllustration => "gfx/interface/illustrations/scripted_illustrations/",
1583            #[cfg(feature = "ck3")]
1584            Item::Secret => "common/secret_types/",
1585            #[cfg(feature = "ck3")]
1586            Item::Sexuality => "",
1587            #[cfg(feature = "ck3")]
1588            Item::SituationCatalyst => "common/situation/catalysts/",
1589            #[cfg(feature = "ck3")]
1590            Item::SituationGroupType => "common/situation/situation_group_types/",
1591            #[cfg(feature = "ck3")]
1592            Item::SituationHistory => "history/situations/",
1593            #[cfg(feature = "ck3")]
1594            Item::SituationParticipantGroup => "common/situation/situations/",
1595            #[cfg(feature = "ck3")]
1596            Item::SituationParticipantGroupParameter => "common/situation/situations/",
1597            #[cfg(feature = "ck3")]
1598            Item::SituationPhase => "common/situation/situations/",
1599            #[cfg(feature = "ck3")]
1600            Item::SituationPhaseParameter => "common/situation/situations/",
1601            #[cfg(feature = "ck3")]
1602            Item::SituationSubRegion => "common/situation/situations/",
1603            #[cfg(feature = "ck3")]
1604            Item::Skill => "",
1605            #[cfg(feature = "ck3")]
1606            Item::SpecialBuilding => "common/buildings/",
1607            #[cfg(feature = "ck3")]
1608            Item::SpecialGuest => "common/activities/activity_types/",
1609            #[cfg(feature = "ck3")]
1610            Item::Story => "common/story_cycles/",
1611            #[cfg(feature = "ck3")]
1612            Item::Struggle => "common/struggle/struggles/",
1613            #[cfg(feature = "ck3")]
1614            Item::StruggleHistory => "history/struggles/",
1615            #[cfg(feature = "ck3")]
1616            Item::StrugglePhase => "common/struggle/struggles/",
1617            #[cfg(feature = "ck3")]
1618            Item::StrugglePhaseParameter => "common/struggle/struggles/",
1619            #[cfg(feature = "ck3")]
1620            Item::SuccessionAppointment => "common/succession_appointment/",
1621            #[cfg(feature = "ck3")]
1622            Item::SuccessionElection => "common/succession_election/",
1623            #[cfg(feature = "ck3")]
1624            Item::Suggestion => "common/suggestions/",
1625            #[cfg(feature = "ck3")]
1626            Item::TableStyle => "gfx/map/table_styles/",
1627            #[cfg(feature = "ck3")]
1628            Item::TaskContractGroup => "common/task_contracts/",
1629            #[cfg(feature = "ck3")]
1630            Item::TaskContractReward => "common/task_contracts/",
1631            #[cfg(feature = "ck3")]
1632            Item::TaskContractType => "common/task_contracts/",
1633            #[cfg(feature = "ck3")]
1634            Item::TaxSlotObligation => "common/tax_slots/obligations",
1635            #[cfg(feature = "ck3")]
1636            Item::TaxSlotType => "common/tax_slots/types",
1637            #[cfg(feature = "ck3")]
1638            Item::Title => "common/landed_titles/",
1639            #[cfg(feature = "ck3")]
1640            Item::TitleHistory => "history/titles/",
1641            #[cfg(feature = "ck3")]
1642            Item::TraitCategory => "",
1643            #[cfg(feature = "ck3")]
1644            Item::TraitFlag => "common/traits/",
1645            #[cfg(feature = "ck3")]
1646            Item::TraitPortraitModifier => "gfx/portraits/trait_portrait_modifiers",
1647            #[cfg(feature = "ck3")]
1648            Item::TraitTrack => "common/traits/",
1649            #[cfg(feature = "ck3")]
1650            Item::TravelOption => "common/travel/travel_options/",
1651            #[cfg(feature = "ck3")]
1652            Item::UnitGfx => "common/culture/cultures/",
1653            #[cfg(feature = "ck3")]
1654            Item::VassalStance => "common/vassal_stances/",
1655
1656            #[cfg(feature = "vic3")]
1657            Item::AcceptanceStatus => "common/acceptance_statuses/",
1658            #[cfg(feature = "vic3")]
1659            Item::AirGraphics => "gfx/map/air_graphics/",
1660            #[cfg(feature = "vic3")]
1661            Item::Alert => "common/alert_types",
1662            #[cfg(feature = "vic3")]
1663            Item::AlertGroup => "common/alert_groups",
1664            #[cfg(feature = "vic3")]
1665            Item::Amendment => "common/amendments/",
1666            #[cfg(feature = "vic3")]
1667            Item::Approval => "",
1668            #[cfg(feature = "vic3")]
1669            Item::ArmyDiorama => "gfx/map/army_dioramas/",
1670            #[cfg(feature = "vic3")]
1671            Item::Attitude => "",
1672            #[cfg(feature = "vic3")]
1673            Item::BattleCondition => "common/battle_conditions/",
1674            #[cfg(feature = "vic3")]
1675            Item::BuildingGroup => "common/building_groups/",
1676            #[cfg(feature = "vic3")]
1677            Item::BuyPackage => "common/buy_packages/",
1678            #[cfg(feature = "vic3")]
1679            Item::CanalType => "common/canals/",
1680            #[cfg(feature = "vic3")]
1681            Item::CharacterRole => "",
1682            #[cfg(feature = "vic3")]
1683            Item::CityBuildingVfx => "gfx/map/city_data/city_building_vfx/",
1684            #[cfg(feature = "vic3")]
1685            Item::CityCenterpiece => "gfx/map/city_data/city_centerpiece/",
1686            #[cfg(feature = "vic3")]
1687            Item::CityGraphicsType => "gfx/map/city_data/city_types/",
1688            #[cfg(feature = "vic3")]
1689            Item::CityVfx => "gfx/map/city_data/city_vfx/",
1690            #[cfg(feature = "vic3")]
1691            Item::CombatUnit => "common/combat_unit_types/",
1692            #[cfg(feature = "vic3")]
1693            Item::CombatUnitExperienceLevel => "common/combat_unit_experience_levels/",
1694            #[cfg(feature = "vic3")]
1695            Item::CombatUnitGroup => "common/combat_unit_groups/",
1696            #[cfg(feature = "vic3")]
1697            Item::CommanderOrder => "common/commander_orders/",
1698            #[cfg(feature = "vic3")]
1699            Item::CommanderRank => "common/commander_ranks/",
1700            #[cfg(feature = "vic3")]
1701            Item::CompanyType => "common/company_types/",
1702            #[cfg(feature = "vic3")]
1703            Item::CompanyCharterType => "common/company_charter_types/",
1704            #[cfg(feature = "vic3")]
1705            Item::CohesionLevel => "common/cohesion_levels/",
1706            #[cfg(feature = "vic3")]
1707            Item::CountryCreation => "common/country_creation/",
1708            #[cfg(feature = "vic3")]
1709            Item::CountryFormation => "common/country_formation/",
1710            #[cfg(feature = "vic3")]
1711            Item::CountryTier => "",
1712            #[cfg(feature = "vic3")]
1713            Item::CountryType => "common/country_types/",
1714            #[cfg(feature = "vic3")]
1715            Item::CultureGraphics => "common/culture_graphics/",
1716            #[cfg(feature = "vic3")]
1717            Item::Decree => "common/decrees/",
1718            #[cfg(feature = "vic3")]
1719            Item::DiplomaticAction => "common/diplomatic_actions/",
1720            #[cfg(feature = "vic3")]
1721            Item::DiplomaticCatalyst => "common/diplomatic_catalysts/",
1722            #[cfg(feature = "vic3")]
1723            Item::DiplomaticCatalystCategory => "common/diplomatic_catalyst_categories/",
1724            #[cfg(feature = "vic3")]
1725            Item::DiplomaticPlay => "common/diplomatic_plays/",
1726            #[cfg(feature = "vic3")]
1727            Item::DiscriminationTrait => "common/discrimination_traits/",
1728            #[cfg(feature = "vic3")]
1729            Item::DiscriminationTraitGroup => "common/discrimination_trait_groups/",
1730            #[cfg(feature = "vic3")]
1731            Item::DynamicCompanyName => "common/dynamic_company_names/",
1732            #[cfg(feature = "vic3")]
1733            Item::DynamicCountryMapColor => "common/dynamic_country_map_colors/",
1734            #[cfg(feature = "vic3")]
1735            Item::DynamicCountryName => "common/dynamic_country_names/",
1736            #[cfg(feature = "vic3")]
1737            Item::DynamicTreatyName => "common/dynamic_treaty_names/",
1738            #[cfg(feature = "vic3")]
1739            Item::EventCategory => "",
1740            #[cfg(feature = "vic3")]
1741            Item::FlagDefinition => "common/flag_definitions/",
1742            #[cfg(feature = "vic3")]
1743            Item::FleetDiorama => "gfx/map/fleet_dioramas/",
1744            #[cfg(feature = "vic3")]
1745            Item::FrontGraphics => "gfx/map/borders/front_graphics/",
1746            #[cfg(feature = "vic3")]
1747            Item::GeographicRegion => "common/geographic_regions/",
1748            #[cfg(feature = "vic3")]
1749            Item::GeographicRegionShortKey => "common/geographic_regions/",
1750            #[cfg(feature = "vic3")]
1751            Item::Goods => "common/goods/",
1752            #[cfg(feature = "vic3")]
1753            // TODO: find out if different filenames are acceptable in this dir
1754            Item::GradientBorderSettings => "gfx/map/gradient_border_settings/",
1755            #[cfg(feature = "vic3")]
1756            Item::HarvestConditionType => "common/harvest_condition_types/",
1757            #[cfg(feature = "vic3")]
1758            Item::HeritageTrait => "common/discrimination_traits/",
1759            #[cfg(feature = "vic3")]
1760            Item::InfamyThreshold => "",
1761            #[cfg(feature = "vic3")]
1762            Item::InterestGroup => "common/interest_groups/",
1763            #[cfg(feature = "vic3")]
1764            Item::InterestGroupTrait => "common/interest_group_traits/",
1765            #[cfg(feature = "vic3")]
1766            Item::JournalEntry => "common/journal_entries/",
1767            #[cfg(feature = "vic3")]
1768            Item::JournalEntryGroup => "common/journal_entry_groups/",
1769            #[cfg(feature = "vic3")]
1770            Item::LawType => "common/laws/",
1771            #[cfg(feature = "vic3")]
1772            Item::LanguageTrait => "common/discrimination_traits/",
1773            #[cfg(feature = "vic3")]
1774            Item::LegitimacyLevel => "common/legitimacy_levels/",
1775            #[cfg(feature = "vic3")]
1776            Item::Level => "",
1777            #[cfg(feature = "vic3")]
1778            Item::LibertyDesireLevel => "common/liberty_desire_levels/",
1779            #[cfg(feature = "vic3")]
1780            Item::MapLayer => "gfx/map/map_object_data/layers.txt",
1781            #[cfg(feature = "vic3")]
1782            Item::MapInteractionType => "common/map_interaction_types/",
1783            #[cfg(feature = "vic3")]
1784            Item::MapNotificationType => "common/map_notification_types/",
1785            #[cfg(feature = "vic3")]
1786            Item::MediaAlias => "gfx/media_aliases/",
1787            #[cfg(feature = "vic3")]
1788            Item::MilitaryFormationFlag => "common/military_formation_flags/",
1789            #[cfg(feature = "vic3")]
1790            Item::MobilizationOption => "common/mobilization_options/",
1791            #[cfg(feature = "vic3")]
1792            Item::MobilizationOptionGroup => "common/mobilization_option_groups/",
1793            #[cfg(feature = "vic3")]
1794            Item::Objective => "common/objectives/",
1795            #[cfg(feature = "vic3")]
1796            Item::ObjectiveSubgoal => "common/objective_subgoals/",
1797            #[cfg(feature = "vic3")]
1798            Item::ObjectiveSubgoalCategory => "common/objective_subgoal_categories/",
1799            #[cfg(feature = "vic3")]
1800            Item::Party => "common/parties/",
1801            #[cfg(feature = "vic3")]
1802            Item::PoliticalLobby => "common/political_lobbies/",
1803            #[cfg(feature = "vic3")]
1804            Item::PoliticalLobbyAppeasement => "common/political_lobby_appeasement/",
1805            #[cfg(feature = "vic3")]
1806            Item::PoliticalMovement => "common/political_movements",
1807            #[cfg(feature = "vic3")]
1808            Item::PoliticalMovementCategory => "common/political_movement_categories",
1809            #[cfg(feature = "vic3")]
1810            Item::PoliticalMovementPopSupport => "common/political_movement_pop_support",
1811            #[cfg(feature = "vic3")]
1812            Item::PopNeed => "common/pop_needs/",
1813            #[cfg(feature = "vic3")]
1814            Item::PowerBlocCoaPiece => "common/power_bloc_coa_pieces/",
1815            #[cfg(feature = "vic3")]
1816            Item::PowerBlocIdentity => "common/power_bloc_identities/",
1817            #[cfg(feature = "vic3")]
1818            Item::PowerBlocMapTexture => "common/power_bloc_map_textures/",
1819            #[cfg(feature = "vic3")]
1820            Item::PowerBlocName => "common/power_bloc_names/",
1821            #[cfg(feature = "vic3")]
1822            Item::PrestigeGoods => "common/prestige_goods/",
1823            #[cfg(feature = "vic3")]
1824            Item::Principle => "common/power_bloc_principles/",
1825            #[cfg(feature = "vic3")]
1826            Item::PrincipleGroup => "common/power_bloc_principle_groups/",
1827            #[cfg(feature = "vic3")]
1828            Item::ProductionMethodGroup => "common/production_method_groups/",
1829            #[cfg(feature = "vic3")]
1830            Item::ProposalType => "common/proposal_types/",
1831            #[cfg(feature = "vic3")]
1832            Item::RelationsThreshold => "",
1833            #[cfg(feature = "vic3")]
1834            Item::ScriptedButton => "common/scripted_buttons/",
1835            #[cfg(feature = "vic3")]
1836            Item::ScriptedProgressBar => "common/scripted_progress_bars/",
1837            #[cfg(feature = "vic3")]
1838            Item::ScriptedTest => "tools/scripted_tests/",
1839            #[cfg(feature = "vic3")]
1840            Item::SecretGoal => "",
1841            #[cfg(feature = "vic3")]
1842            Item::Skin => "gfx/skins/",
1843            #[cfg(feature = "vic3")]
1844            Item::SocialClass => "common/social_classes/",
1845            #[cfg(feature = "vic3")]
1846            Item::SocialHierarchy => "common/social_hierarchies/",
1847            #[cfg(feature = "vic3")]
1848            Item::StateRegion => "map_data/state_regions/",
1849            #[cfg(feature = "vic3")]
1850            Item::StateTrait => "common/state_traits/",
1851            #[cfg(feature = "vic3")]
1852            Item::Strata => "",
1853            #[cfg(feature = "vic3")]
1854            Item::TechnologyEra => "common/technology/eras/",
1855            #[cfg(feature = "vic3")]
1856            Item::TerrainKey => "common/labels/",
1857            #[cfg(feature = "vic3")]
1858            Item::TerrainLabel => "common/labels/",
1859            #[cfg(feature = "vic3")]
1860            Item::TerrainManipulator => "common/terrain_manipulators/",
1861            #[cfg(feature = "vic3")]
1862            Item::TerrainMask => "gfx/map/masks/",
1863            #[cfg(feature = "vic3")]
1864            Item::TerrainMaterial => "gfx/map/terrain/materials.settings",
1865            #[cfg(feature = "vic3")]
1866            Item::Theme => "common/themes/",
1867            #[cfg(feature = "vic3")]
1868            Item::TraditionTrait => "common/discrimination_traits/",
1869            #[cfg(feature = "vic3")]
1870            Item::TransferOfPower => "",
1871            #[cfg(feature = "vic3")]
1872            Item::TreatyArticle => "common/treaty_articles/",
1873            #[cfg(feature = "vic3")]
1874            Item::WarGoalType => "common/war_goal_types/",
1875
1876            #[cfg(feature = "imperator")]
1877            Item::AiPlanGoals => "common/ai_plan_goals/",
1878            #[cfg(feature = "imperator")]
1879            Item::Ambition => "common/ambitions/",
1880            #[cfg(feature = "imperator")]
1881            Item::Area => "map_data/areas.txt",
1882            #[cfg(feature = "imperator")]
1883            Item::Deity => "common/deities/",
1884            #[cfg(feature = "imperator")]
1885            Item::DeityCategory => "common/deity_categories/",
1886            #[cfg(feature = "imperator")]
1887            Item::DiplomaticStance => "common/diplomatic_stances/",
1888            #[cfg(feature = "imperator")]
1889            Item::EconomicPolicy => "common/economic_policies/",
1890            #[cfg(feature = "imperator")]
1891            Item::EventPicture => "common/event_pictures/",
1892            #[cfg(feature = "imperator")]
1893            Item::GovernorPolicy => "common/governor_policies/",
1894            #[cfg(feature = "imperator")]
1895            Item::GraphicalCultureType => "common/graphical_culture_types/",
1896            #[cfg(feature = "imperator")]
1897            Item::GreatWorkEffect => "common/great_work_effects/",
1898            #[cfg(feature = "imperator")]
1899            Item::GreatWorkEffectTier => "common/great_work_effect_tiers/",
1900            #[cfg(feature = "imperator")]
1901            Item::GreatWorkCategory => "common/great_work_categories/",
1902            #[cfg(feature = "imperator")]
1903            Item::GreatWorkMaterial => "common/great_work_materials/",
1904            #[cfg(feature = "imperator")]
1905            Item::GreatWorkModule => "common/great_work_modules/",
1906            #[cfg(feature = "imperator")]
1907            Item::GreatWorkTemplate => "common/great_work_templates/",
1908            #[cfg(feature = "imperator")]
1909            Item::Heritage => "common/heritage/",
1910            #[cfg(feature = "imperator")]
1911            Item::Invention => "common/inventions/",
1912            #[cfg(feature = "imperator")]
1913            Item::InventionGroup => "common/inventions/",
1914            #[cfg(feature = "imperator")]
1915            Item::LegionDistinction => "common/legion_distinctions/",
1916            #[cfg(feature = "imperator")]
1917            Item::LevyTemplate => "common/levy_templates/",
1918            #[cfg(feature = "imperator")]
1919            Item::Loyalty => "common/loyalty/",
1920            #[cfg(feature = "imperator")]
1921            Item::MilitaryTraditionTree => "common/military_traditions/",
1922            #[cfg(feature = "imperator")]
1923            Item::MilitaryTradition => "common/military_traditions/",
1924            #[cfg(feature = "imperator")]
1925            Item::MissionTask => "common/missions/",
1926            #[cfg(feature = "imperator")]
1927            Item::Office => "common/offices/",
1928            #[cfg(feature = "imperator")]
1929            Item::Opinion => "common/opinions/",
1930            #[cfg(feature = "imperator")]
1931            Item::PartyAgenda => "common/party_agendas",
1932            #[cfg(feature = "imperator")]
1933            Item::PartyType => "common/party_types/",
1934            #[cfg(feature = "imperator")]
1935            Item::PostSetupCharacters => "setup/post_character/",
1936            #[cfg(feature = "imperator")]
1937            Item::ProvinceRank => "common/province_ranks/",
1938            #[cfg(feature = "imperator")]
1939            Item::TechnologyTable => "common/technology_tables/",
1940            #[cfg(feature = "imperator")]
1941            Item::SetupCharacters => "setup/characters/",
1942            #[cfg(feature = "imperator")]
1943            Item::SetupProvinces => "setup/provinces/",
1944            #[cfg(feature = "imperator")]
1945            Item::TradeGood => "common/trade_goods/",
1946            #[cfg(feature = "imperator")]
1947            Item::Treasure => "setup/main/",
1948            #[cfg(feature = "imperator")]
1949            Item::Unit => "common/units/",
1950
1951            #[cfg(feature = "hoi4")]
1952            Item::Ability => "common/abilities/",
1953            #[cfg(feature = "hoi4")]
1954            Item::Acclimatation => "common/acclimatation.txt",
1955            #[cfg(feature = "hoi4")]
1956            Item::AdjacencyRule => "map/adjacency_rules.txt",
1957            #[cfg(feature = "hoi4")]
1958            Item::AceModifier => "common/aces",
1959            #[cfg(feature = "hoi4")]
1960            Item::AdvisorSlot => "common/script_enums.txt",
1961            #[cfg(feature = "hoi4")]
1962            Item::AiArea => "common/ai_areas/",
1963            #[cfg(feature = "hoi4")]
1964            Item::AiStrategyType => "common/ai_strategy/_documentation.md",
1965            #[cfg(feature = "hoi4")]
1966            Item::CharacterIdeaToken => "common/characters/",
1967            #[cfg(feature = "hoi4")]
1968            Item::CombatTacticPhase => "common/combat_tactics.txt",
1969            #[cfg(feature = "hoi4")]
1970            Item::Continent => "map/continent.txt",
1971            #[cfg(feature = "hoi4")]
1972            Item::CountryLeaderTrait => "common/country_leader/",
1973            #[cfg(feature = "hoi4")]
1974            Item::CountryHistory => "history/countries/",
1975            #[cfg(feature = "hoi4")]
1976            Item::CountryTag => "common/country_tags/",
1977            #[cfg(feature = "hoi4")]
1978            Item::CountryTagAlias => "common/country_tag_aliases/",
1979            #[cfg(feature = "hoi4")]
1980            Item::DecisionCategory => "common/decisions/categories/",
1981            #[cfg(feature = "hoi4")]
1982            Item::DivisionNamesGroup => "common/units/names_divisions/",
1983            #[cfg(feature = "hoi4")]
1984            Item::DivisionTemplate => "history/units/",
1985            #[cfg(feature = "hoi4")]
1986            Item::DynamicModifier => "common/dynamic_modifiers/",
1987            #[cfg(feature = "hoi4")]
1988            Item::Equipment => "common/units/equipment/",
1989            #[cfg(feature = "hoi4")]
1990            Item::EquipmentBonusType => "common/script_enums.txt",
1991            #[cfg(feature = "hoi4")]
1992            Item::EquipmentCategory => "common/script_enums.txt",
1993            #[cfg(feature = "hoi4")]
1994            Item::EquipmentGroup => "common/equipment_groups/",
1995            #[cfg(feature = "hoi4")]
1996            Item::EquipmentModule => "common/units/equipment/modules/",
1997            #[cfg(feature = "hoi4")]
1998            Item::EquipmentModuleCategory => "common/units/equipment/modules/",
1999            #[cfg(feature = "hoi4")]
2000            Item::EquipmentSearchFilter => "common/units/equipment/",
2001            #[cfg(feature = "hoi4")]
2002            Item::EquipmentStat => "common/script_enums.txt",
2003            #[cfg(feature = "hoi4")]
2004            Item::EquipmentUpgrade => "common/units/equipment/upgrades/", // TODO HOI4
2005            #[cfg(feature = "hoi4")]
2006            Item::GraphicalTerrain => "common/terrain/",
2007            #[cfg(feature = "hoi4")]
2008            Item::IdeaCategory => "common/idea_tags/",
2009            #[cfg(feature = "hoi4")]
2010            Item::IdeologyGroup => "common/ideologies/",
2011            #[cfg(feature = "hoi4")]
2012            Item::IndustrialOrg => "common/military_industrial_organization/organizations/",
2013            #[cfg(feature = "hoi4")]
2014            Item::IndustrialOrgBonusWeight => {
2015                "common/military_industrial_organization/ai_bonus_weights/"
2016            }
2017            #[cfg(feature = "hoi4")]
2018            Item::IndustrialOrgPolicy => "common/military_industrial_organization/policies/",
2019            #[cfg(feature = "hoi4")]
2020            Item::IndustrialOrgTrait => "common/military_industrial_organization/organizations/",
2021            #[cfg(feature = "hoi4")]
2022            Item::IntelligenceAgencyBranch => "common/intelligence_agency_upgrades/",
2023            #[cfg(feature = "hoi4")]
2024            Item::IntelligenceAgencyUpgrade => "common/intelligence_agency_upgrades/",
2025            #[cfg(feature = "hoi4")]
2026            Item::MusicAsset => "music/",
2027            #[cfg(feature = "hoi4")]
2028            Item::NationalFocus => "common/national_focus/",
2029            #[cfg(feature = "hoi4")]
2030            Item::NationalFocusStyle => "common/national_focus/",
2031            #[cfg(feature = "hoi4")]
2032            Item::NationalFocusTree => "common/national_focus/",
2033            #[cfg(feature = "hoi4")]
2034            Item::Operation => "common/operations/",
2035            #[cfg(feature = "hoi4")]
2036            Item::OperationPhase => "common/operation_phases/",
2037            #[cfg(feature = "hoi4")]
2038            Item::OperationToken => "common/operation_tokens/",
2039            #[cfg(feature = "hoi4")]
2040            Item::PowerBalance => "common/bop/",
2041            #[cfg(feature = "hoi4")]
2042            Item::PowerBalanceSide => "common/bop/",
2043            #[cfg(feature = "hoi4")]
2044            Item::ProductionStat => "common/script_enum.txt",
2045            #[cfg(feature = "hoi4")]
2046            Item::PrototypeReward => "common/special_projects/prototype_rewards/",
2047            #[cfg(feature = "hoi4")]
2048            Item::RailwayGunNames => "common/units/names_railway_guns/",
2049            #[cfg(feature = "hoi4")]
2050            Item::Resource => "common/resources/",
2051            #[cfg(feature = "hoi4")]
2052            Item::ScriptEnum => "common/script_enums.txt",
2053            #[cfg(feature = "hoi4")]
2054            Item::ScriptedConstant => "common/scripted_constants/", // TODO HOI4
2055            #[cfg(feature = "hoi4")]
2056            Item::ScriptedLocalisation => "common/scripted_localisation/",
2057            #[cfg(feature = "hoi4")]
2058            Item::ShipNames => "common/units/names_ships/",
2059            #[cfg(feature = "hoi4")]
2060            Item::SoundEffect | Item::SoundFalloff => "sound/",
2061            #[cfg(feature = "hoi4")]
2062            Item::SpawnPoint => "common/buildings/",
2063            #[cfg(feature = "hoi4")]
2064            Item::Specialization => "common/special_projects/specialization/",
2065            #[cfg(feature = "hoi4")]
2066            Item::SpecialProject => "common/special_projects/projects/",
2067            #[cfg(feature = "hoi4")]
2068            Item::SpecialProjectTag => "common/special_projects/project_tags/",
2069            #[cfg(feature = "hoi4")]
2070            Item::ScientistTrait => "common/scientist_traits/",
2071            #[cfg(feature = "hoi4")]
2072            Item::ShipName => "history/units/",
2073            #[cfg(feature = "hoi4")]
2074            Item::Sprite => "gfx/",
2075            #[cfg(feature = "hoi4")]
2076            Item::State => "history/states/",
2077            #[cfg(feature = "hoi4")]
2078            Item::StateCategory => "common/state_category/",
2079            #[cfg(feature = "hoi4")]
2080            Item::SubUnit => "common/units/",
2081            #[cfg(feature = "hoi4")]
2082            Item::SubUnitCategory => "common/unit_tags/",
2083            #[cfg(feature = "hoi4")]
2084            Item::SupplyArea => "map/supplyareas",
2085            #[cfg(feature = "hoi4")]
2086            Item::TechnologyCategory => "common/technology_tags/",
2087            #[cfg(feature = "hoi4")]
2088            Item::TechnologyFolder => "common/technology_tags/",
2089            #[cfg(feature = "hoi4")]
2090            Item::TechnologySharing => "common/technology_sharing/",
2091            #[cfg(feature = "hoi4")]
2092            Item::UnitHistory => "history/units/",
2093            #[cfg(feature = "hoi4")]
2094            Item::UnitLeaderSkill => "common/unit_leader/",
2095            #[cfg(feature = "hoi4")]
2096            Item::UnitLeaderTrait => "common/unit_leader/",
2097            #[cfg(feature = "hoi4")]
2098            Item::UnitNames => "common/units/names/",
2099
2100            #[cfg(feature = "eu5")]
2101            Item::Advance => "common/advances/",
2102            #[cfg(feature = "eu5")]
2103            Item::Age => "common/age/",
2104            #[cfg(feature = "eu5")]
2105            Item::AiDiplochance => "common/ai_diplochance/",
2106            #[cfg(feature = "eu5")]
2107            Item::AlertDescription => "common/alert_descriptions/",
2108            #[cfg(feature = "eu5")]
2109            Item::ArtistType => "common/artist_types/",
2110            #[cfg(feature = "eu5")]
2111            Item::ArtistWork => "common/artist_work/",
2112            #[cfg(feature = "eu5")]
2113            Item::AttributeColumn => "common/attribute_columns/",
2114            #[cfg(feature = "eu5")]
2115            Item::AutoModifier => "common/auto_modifiers/",
2116            #[cfg(feature = "eu5")]
2117            Item::Avatar => "common/avatars/",
2118            #[cfg(feature = "eu5")]
2119            Item::Bias => "common/biases/",
2120            #[cfg(feature = "eu5")]
2121            Item::BuildingCategory => "common/building_categories/",
2122            #[cfg(feature = "eu5")]
2123            Item::CabinetAction => "common/cabinet_actions/",
2124            #[cfg(feature = "eu5")]
2125            Item::CharacterTraitCategory => "",
2126            #[cfg(feature = "eu5")]
2127            Item::ChildEducation => "common/child_educations/",
2128            #[cfg(feature = "eu5")]
2129            Item::CountryDescriptionCategory => "common/country_description_categories/",
2130            #[cfg(feature = "eu5")]
2131            Item::CountryInteraction => "common/country_interactions/",
2132            #[cfg(feature = "eu5")]
2133            Item::Currency => "",
2134            #[cfg(feature = "eu5")]
2135            Item::DesignatedHeirReason => "common/designated_heir_reason/",
2136            #[cfg(feature = "eu5")]
2137            Item::DiplomaticCost => "common/diplomatic_costs/",
2138            #[cfg(feature = "eu5")]
2139            Item::Disaster => "common/disasters/",
2140            #[cfg(feature = "eu5")]
2141            Item::Disease => "common/diseases/",
2142            #[cfg(feature = "eu5")]
2143            Item::EmploymentSystem => "common/employment_systems/",
2144            #[cfg(feature = "eu5")]
2145            Item::EstatePrivilege => "common/estate_privileges/",
2146            #[cfg(feature = "eu5")]
2147            Item::Estate => "common/estates/",
2148            #[cfg(feature = "eu5")]
2149            Item::FormableCountry => "common/formable_countries/",
2150            #[cfg(feature = "eu5")]
2151            Item::GenericActionAiList => "common/generic_action_ai_lists/",
2152            #[cfg(feature = "eu5")]
2153            Item::GenericAction => "common/generic_actions/",
2154            #[cfg(feature = "eu5")]
2155            Item::God => "common/gods/",
2156            #[cfg(feature = "eu5")]
2157            Item::Good => "common/goods/",
2158            #[cfg(feature = "eu5")]
2159            Item::GoodsDemand => "common/goods_demand/",
2160            #[cfg(feature = "eu5")]
2161            Item::GoodsDemandCategory => "common/goods_demand_category/",
2162            #[cfg(feature = "eu5")]
2163            Item::GovernmentReform => "common/government_reforms/",
2164            #[cfg(feature = "eu5")]
2165            Item::Hegemon => "common/hegemons/",
2166            #[cfg(feature = "eu5")]
2167            Item::HeirSelection => "common/heir_selections/",
2168            #[cfg(feature = "eu5")]
2169            Item::HistoricalScore => "common/historical_scores/",
2170            #[cfg(feature = "eu5")]
2171            Item::HolySiteType => "common/holy_site_types/",
2172            #[cfg(feature = "eu5")]
2173            Item::Insult => "common/insults/",
2174            #[cfg(feature = "eu5")]
2175            Item::InternationalOrganization => "common/international_organizations/",
2176            #[cfg(feature = "eu5")]
2177            Item::InternationalOrganizationLandOwnershipRule => {
2178                "common/international_organization_land_ownership_rules/"
2179            }
2180            #[cfg(feature = "eu5")]
2181            Item::InternationalOrganizationPayment => "common/international_organization_payments/",
2182            #[cfg(feature = "eu5")]
2183            Item::InternationalOrganizationSpecialStatus => {
2184                "common/international_organization_special_statuses/"
2185            }
2186            #[cfg(feature = "eu5")]
2187            Item::JoinWarRule => "common/join_war_rules/",
2188            #[cfg(feature = "eu5")]
2189            Item::LanguageFamily => "common/language_families/",
2190            #[cfg(feature = "eu5")]
2191            Item::Levy => "common/levies/",
2192            #[cfg(feature = "eu5")]
2193            Item::LocationRank => "common/location_ranks/",
2194            #[cfg(feature = "eu5")]
2195            Item::MusicPlayerTrack => "common/music_player_tracks/",
2196            #[cfg(feature = "eu5")]
2197            Item::ParliamentAgenda => "common/parliament_agendas/",
2198            #[cfg(feature = "eu5")]
2199            Item::ParliamentIssue => "common/parliament_issues/",
2200            #[cfg(feature = "eu5")]
2201            Item::ParliamentType => "common/parliament_types/",
2202            #[cfg(feature = "eu5")]
2203            Item::PeaceTreaty => "common/peace_treaties/",
2204            #[cfg(feature = "eu5")]
2205            Item::Policy => "common/policies/",
2206            #[cfg(feature = "eu5")]
2207            Item::RecruitmentMethod => "common/recruitment_method/",
2208            #[cfg(feature = "eu5")]
2209            Item::Regency => "common/regencies/",
2210            #[cfg(feature = "eu5")]
2211            Item::ReligionGroup => "common/religion_groups/",
2212            #[cfg(feature = "eu5")]
2213            Item::ReligiousAspect => "common/religious_aspects/",
2214            #[cfg(feature = "eu5")]
2215            Item::ReligiousFaction => "common/religious_factions/",
2216            #[cfg(feature = "eu5")]
2217            Item::ReligiousFigure => "common/religious_figures/",
2218            #[cfg(feature = "eu5")]
2219            Item::ReligiousFocus => "common/religious_focuses/",
2220            #[cfg(feature = "eu5")]
2221            Item::ReligiousSchools => "common/religious_schools/",
2222            #[cfg(feature = "eu5")]
2223            Item::Resolution => "common/resolutions/",
2224            #[cfg(feature = "eu5")]
2225            Item::RivalCriteria => "common/rival_criteria/",
2226            #[cfg(feature = "eu5")]
2227            Item::RoadType => "common/road_types/",
2228            #[cfg(feature = "eu5")]
2229            Item::ScriptableHint => "common/scriptable_hints/",
2230            #[cfg(feature = "eu5")]
2231            Item::ScriptedCountryName => "common/scripted_country_names/",
2232            #[cfg(feature = "eu5")]
2233            Item::ScriptedDiplomaticObjective => "common/scripted_diplomatic_objectives/",
2234            #[cfg(feature = "eu5")]
2235            Item::ScriptedGeography => "common/scripted_geography/",
2236            #[cfg(feature = "eu5")]
2237            Item::ScriptedModifiers => "common/scripted_modifiers/",
2238            #[cfg(feature = "eu5")]
2239            Item::ScriptedRelations => "common/scripted_relations/",
2240            #[cfg(feature = "eu5")]
2241            Item::SocietalValue => "common/societal_values/",
2242            #[cfg(feature = "eu5")]
2243            Item::SubjectMilitaryStance => "common/subject_military_stances/",
2244            #[cfg(feature = "eu5")]
2245            Item::Test => "common/tests/",
2246            #[cfg(feature = "eu5")]
2247            Item::Topography => "common/topography/",
2248            #[cfg(feature = "eu5")]
2249            Item::TownSetup => "common/town_setups/",
2250            #[cfg(feature = "eu5")]
2251            Item::TraitFlavor => "common/trait_flavor/",
2252            #[cfg(feature = "eu5")]
2253            Item::UnitCategory => "common/unit_categories/",
2254            #[cfg(feature = "eu5")]
2255            Item::UnitFormationPreference => "common/unit_formation_preference/",
2256            #[cfg(feature = "eu5")]
2257            Item::UnitType => "common/unit_types/",
2258            #[cfg(feature = "eu5")]
2259            Item::Vegetation => "common/vegetation/",
2260        }
2261    }
2262
2263    /// Confidence value to use when reporting that an item is missing.
2264    /// Should be `Strong` for most, `Weak` for items that aren't defined anywhere but just used (such as gfx flags).
2265    pub fn confidence(self) -> Confidence {
2266        match self {
2267            #[cfg(feature = "jomini")]
2268            Item::AccessoryTag => Confidence::Weak,
2269
2270            // GuiType and GuiTemplate are here because referring to templates in other mods is a
2271            // common compatibility technique.
2272            Item::GuiType | Item::GuiTemplate | Item::Sound => Confidence::Weak,
2273
2274            #[cfg(feature = "ck3")]
2275            Item::AccoladeCategory
2276            | Item::BuildingGfx
2277            | Item::ClothingGfx
2278            | Item::CoaGfx
2279            | Item::CultureParameter
2280            | Item::MemoryCategory
2281            | Item::UnitGfx => Confidence::Weak,
2282
2283            #[cfg(feature = "ck3")]
2284            Item::SpecialBuilding => Confidence::Reasonable,
2285
2286            _ => Confidence::Strong,
2287        }
2288    }
2289
2290    /// Severity value to use when reporting that an item is missing.
2291    /// * `Error` - most things
2292    /// * `Warning` - things that only impact visuals or presentation
2293    /// * `Untidy` - things that don't matter much at all
2294    /// * `Fatal` - things that cause crashes if they're missing
2295    ///
2296    /// This is only one piece of the severity puzzle. It can also depend on the caller who's expecting the item to exist.
2297    /// That part isn't handled yet.
2298    pub fn severity(self) -> Severity {
2299        match self {
2300            // GuiType and GuiTemplate are here because referring to templates in other mods is a
2301            // common compatibility technique.
2302            Item::GuiType | Item::GuiTemplate => Severity::Untidy,
2303
2304            Item::File | Item::Localization | Item::MapEnvironment => Severity::Warning,
2305
2306            #[cfg(feature = "jomini")]
2307            Item::Accessory
2308            | Item::AccessoryTag
2309            | Item::AccessoryVariation
2310            | Item::AccessoryVariationLayout
2311            | Item::AccessoryVariationTextures
2312            | Item::Coa
2313            | Item::CoaColorList
2314            | Item::CoaColoredEmblemList
2315            | Item::CoaPatternList
2316            | Item::CoaTemplate
2317            | Item::CoaTemplateList
2318            | Item::CoaTexturedEmblemList
2319            | Item::CustomLocalization
2320            | Item::EffectLocalization
2321            | Item::Ethnicity
2322            | Item::GameConcept
2323            | Item::NamedColor
2324            | Item::PortraitAnimation
2325            | Item::PortraitCamera
2326            | Item::PortraitEnvironment
2327            | Item::Sound
2328            | Item::TextFormat
2329            | Item::TextIcon
2330            | Item::TextureFile
2331            | Item::TriggerLocalization => Severity::Warning,
2332
2333            #[cfg(feature = "ck3")]
2334            Item::AccoladeIcon
2335            | Item::ArtifactVisual
2336            | Item::BuildingGfx
2337            | Item::ClothingGfx
2338            | Item::CoaDynamicDefinition
2339            | Item::CoaGfx
2340            | Item::CultureAesthetic
2341            | Item::CultureCreationName
2342            | Item::EventBackground
2343            | Item::EventTheme
2344            | Item::EventTransition
2345            | Item::Flavorization
2346            | Item::GraphicalFaith
2347            | Item::ModifierFormat
2348            | Item::MottoInsert
2349            | Item::Motto
2350            | Item::Music
2351            | Item::Nickname
2352            | Item::RulerObjectiveType
2353            | Item::ScriptedIllustration
2354            | Item::UnitGfx => Severity::Warning,
2355
2356            #[cfg(feature = "vic3")]
2357            Item::MapLayer
2358            | Item::ModifierTypeDefinition
2359            | Item::TerrainManipulator
2360            | Item::TerrainMask
2361            | Item::TerrainMaterial => Severity::Warning,
2362
2363            #[cfg(feature = "hoi4")]
2364            Item::Sprite => Severity::Warning,
2365
2366            _ => Severity::Error,
2367        }
2368    }
2369}
2370
2371/// The callback type for adding one item instance to the database.
2372pub(crate) type ItemAdder = fn(&mut Db, Token, Block);
2373
2374/// The specification for loading an [`Item`] type into the [`Db`].
2375///
2376/// An instance of this can be placed in every `data` module using the `inventory::submit!` macro.
2377/// This will register the loader so that the [`Everything`] object can load all defined items.
2378// Note that this is an enum so that users can more conveniently construct it. It used to be a
2379// struct with various constructor functions, but that didn't work because the ItemAdder type has a
2380// &mut in it, and that wasn't allowed in const functions even though the function pointer itself
2381// is const. See https://github.com/rust-lang/rust/issues/57349 for details.
2382// TODO: once that issue stabilizes, we can revisit the ItemLoader type.
2383pub(crate) enum ItemLoader {
2384    /// A convenience variant for loaders that are the most common type.
2385    ///
2386    /// * [`GameFlags`] is which games this item loader is for.
2387    /// * [`Item`] is the item type being loaded.
2388    ///
2389    /// The [`ItemAdder`] function does not have to load exclusively this type of item.
2390    /// Related items are ok. The main use of the [`Item`] field is to get the path for this item
2391    /// type, so that files are loaded from that folder.
2392    ///
2393    /// `Normal` loaders have extension `.txt`, `LoadAsFile::No`, and `Recursive::Maybe`. They default
2394    /// to a [`PdxEncoding`] appropriate to the game being validated.
2395    Normal(GameFlags, Item, ItemAdder),
2396    /// A variant that allows the full range of item loader behvavior.
2397    /// * [`PdxEncoding`] indicates whether to expect utf-8 and/or a BOM in the files.
2398    /// * The `&'static str` is the file extension to look for (including the dot).
2399    /// * [`LoadAsFile`] is whether to load the whole file as one item, or treat it as normal with a
2400    ///   series of items in one file.
2401    /// * [`Recursive`] indicates whether to load subfolders of the item's main folder.
2402    ///   `Recursive::Maybe` means apply game-dependent logic.
2403    Full(GameFlags, Item, PdxEncoding, &'static str, LoadAsFile, Recursive, ItemAdder),
2404}
2405
2406inventory::collect!(ItemLoader);
2407
2408impl ItemLoader {
2409    pub fn for_game(&self, game: Game) -> bool {
2410        let game_flags = match self {
2411            ItemLoader::Normal(game_flags, _, _)
2412            | ItemLoader::Full(game_flags, _, _, _, _, _, _) => game_flags,
2413        };
2414        game_flags.contains(GameFlags::from(game))
2415    }
2416
2417    pub fn itype(&self) -> Item {
2418        match self {
2419            ItemLoader::Normal(_, itype, _) | ItemLoader::Full(_, itype, _, _, _, _, _) => *itype,
2420        }
2421    }
2422
2423    pub fn encoding(&self) -> PdxEncoding {
2424        match self {
2425            ItemLoader::Normal(_, _, _) => {
2426                #[cfg(feature = "hoi4")]
2427                if Game::is_hoi4() {
2428                    return PdxEncoding::Utf8NoBom;
2429                }
2430                PdxEncoding::Utf8Bom
2431            }
2432            ItemLoader::Full(_, _, encoding, _, _, _, _) => *encoding,
2433        }
2434    }
2435
2436    pub fn extension(&self) -> &'static str {
2437        match self {
2438            ItemLoader::Normal(_, _, _) => ".txt",
2439            ItemLoader::Full(_, _, _, extension, _, _, _) => extension,
2440        }
2441    }
2442
2443    pub fn whole_file(&self) -> bool {
2444        match self {
2445            ItemLoader::Normal(_, _, _) => false,
2446            ItemLoader::Full(_, _, _, _, load_as_file, _, _) => {
2447                matches!(load_as_file, LoadAsFile::Yes)
2448            }
2449        }
2450    }
2451
2452    pub fn recursive(&self) -> bool {
2453        match self {
2454            ItemLoader::Normal(_, _, _) => {
2455                Game::is_ck3() && self.itype().path().starts_with("common/")
2456            }
2457            ItemLoader::Full(_, _, _, _, _, recursive, _) => match recursive {
2458                Recursive::Yes => true,
2459                Recursive::No => false,
2460                Recursive::Maybe => Game::is_ck3() && self.itype().path().starts_with("common/"),
2461            },
2462        }
2463    }
2464
2465    pub fn adder(&self) -> ItemAdder {
2466        match self {
2467            ItemLoader::Normal(_, _, adder) | ItemLoader::Full(_, _, _, _, _, _, adder) => *adder,
2468        }
2469    }
2470}
2471
2472pub enum LoadAsFile {
2473    Yes,
2474    No,
2475}
2476
2477pub enum Recursive {
2478    Yes,
2479    No,
2480    #[allow(dead_code)]
2481    Maybe,
2482}