Skip to main content

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