Traduction de la page originale en anglais d’OmsiLaunch 0.1.0-beta3. La page anglaise fait foi : en cas de divergence, la page anglaise et le code prévalent.
Cette page est la référence normative de LaunchSpec, l'enregistrement de requête qui décrit une session OmsiLaunch : sa forme C# (OmsiLaunch.Api), sa forme de fichier JSON telle que chargée par la CLI (/spec:<path>, tools/OmsiLaunch.Cli/LaunchSpecJson.cs), chaque propriété avec son type, sa valeur par défaut, sa règle de validation et son effet actuel, les règles de validation qui rendent un plan non exécutable, et la priorité entre les options de la CLI, les fichiers de spécification et les profils de session. Seul ce que fait le code actuel est documenté.
L'intégrateur construit l'enregistrement et le transmet à PlanSessionAsync.
Options de la CLI
CliInput.BuildSpecAsync part des valeurs par défaut intégrées (NEW_MAP, tout non défini, valeurs par défaut de Behavior) et applique les options.
Fichier JSON /spec:<path>
Chargé par LaunchSpecJson.LoadAsync, puis utilisé comme base que les options de la CLI remplacent (voir priorité).
Profil de session (/predefined-profile:<id> /predefined-profile-index:<n>)
SessionProfileCompiler.Apply écrit dans la base le monde, les paramètres, la présentation, les textures Internet et le comportement du profil, et enregistre les métadonnées SessionProfile.
L'exemple complet ci-dessous est vérifié par rapport à la forme de l'enregistrement. Une copie de l'exemple minimal est livrée sous examples/release-session.example.json (et .omsilaunch\examples\release-session.example.json dans le paquet de version).
System.Text.Json avec PropertyNameCaseInsensitive = true, ReadCommentHandling = Skip, AllowTrailingCommas = true ; aucun convertisseur n'est enregistré.
Noms de propriétés
Les noms de propriétés C# (Installation, RootPath, ...). La correspondance est insensible à la casse au chargement ; la CLI les écrit en PascalCase.
Énumérations
Entiers (il n'existe pas de convertisseur d'énumération en chaîne). "Mode": 0 est valide ; "Mode": "NewMap" est rejeté comme JSON mal formé. Les valeurs sont listées dans Énumérations.
OptionalValue<T>
Un objet { "Presence": 0 | 1, "Value": <T or null> }. Presence 0 = Unset (la valeur est ignorée), 1 = Set (la valeur doit être présente et non nulle ; un Set avec une valeur nulle n'est pas validé et se comporte comme une valeur invalide). Un membre OptionalValue omis vaut Unset. Le membre en lecture seule IsSet apparaît dans la sortie écrite par la CLI ; il est accepté et ignoré au chargement.
Enregistrements facultatifs
Year, Weather, Input, Diagnostics, Presentation, InternetTextures, SessionProfile peuvent être null ou omis ; les accesseurs Effective* substituent les valeurs par défaut.
Enregistrements obligatoires
Installation, World, Date, Time, Environment (avec les huit dictionnaires, utilisez {}), Behavior doivent être des objets présents. Ils ne sont pas validés : un enregistrement null ou manquant échoue plus tard sur une référence nulle, que la CLI signale comme OL_E_INTERNAL (sortie 10) ou OL_E_INVALID_ARGUMENT (sortie 2).
Propriétés inconnues
Rejetées avant la liaison : OL_E_SPEC_UNKNOWN_PROPERTY: $.Path.Name (le chemin utilise les noms de membres tels qu'écrits dans le fichier). Le contenu des dictionnaires (Environment.*) n'est pas vérifié en tant que propriétés.
Racine
Doit être un objet JSON : OL_E_SPEC_INVALID. Profondeur d'imbrication maximale 32.
Taille du fichier
Au plus 1 MiB (1 048 576 octets) : OL_E_SPEC_TOO_LARGE. Fichier manquant : OL_E_SPEC_NOT_FOUND.
Commentaires et virgules finales
Les commentaires // et /* */ ainsi que les virgules finales sont acceptés.
JSON mal formé
L'exception de l'analyseur n'est pas traduite : la CLI signale OL_E_INTERNAL avec le code de sortie 10.
Encodage
UTF-8 (une BOM est tolérée par le lecteur). Les barres obliques inverses dans les identités doivent être échappées ("maps\\Grundorf\\global.cfg") ; les barres obliques sont acceptées pour les identités de carte, de situation, de véhicule et de HOF.
Une date explicite, lorsque le build la prend en charge, s'écrit "Date": { "Mode": 1, "Value": { "Presence": 1, "Value": { "Year": 2024, "Month": 5, "Day": 1 } } } et une heure { "Mode": 1, "Value": { "Presence": 1, "Value": { "Hour": 7, "Minute": 30, "Second": 0 } } }. Sur ce build, les deux rendent le plan non exécutable (voir ci-dessous).
validée ; tout mode autre que Unset est non exécutable
PARTIAL
Time
objet TimeSpec
oui
aucune
validée ; tout mode autre que Unset est non exécutable
PARTIAL
PlayerVehicle
OptionalValue<PlayerVehicleSpec>
non
Unset
résolue pour les diagnostics ; tout champ défini est non exécutable
PARTIAL
Environment
objet EnvironmentSpec
oui
aucune
oui (overlay sémantique de options.cfg)
STABLE_BETA
Behavior
objet LaunchBehaviorSpec
oui
aucune
en partie (voir l'enregistrement)
STABLE_BETA / PARTIAL
Year
objet YearSpec ou null
non
null → EffectiveYear = mode Unset
tout mode autre que Unset est non exécutable
PARTIAL
Weather
objet WeatherSpec ou null
non
null → EffectiveWeather = mode Unset
tout mode autre que Unset est non exécutable
PARTIAL
Input
objet InputSpec ou null
non
null → EffectiveInput = les deux non définis
tout document défini est non exécutable
PARTIAL
Diagnostics
objet DiagnosticsSpec ou null
non
null → EffectiveDiagnostics = valeurs par défaut
transportée uniquement
PARTIAL
Presentation
objet SessionPresentationSpec ou null
non
null → EffectivePresentation = écran de démarrage géré, pas de langue, pas de répertoire personnalisé, icône de notification affichée
oui
STABLE_BETA
InternetTextures
objet InternetTexturesSpec ou null
non
null → EffectiveInternetTextures = Native
oui
STABLE_BETA / EXPERIMENTAL
SessionProfile
objet SessionProfileMetadata ou null
non
null
provenance uniquement (diagnostic de plan session_profile.selected)
STABLE_BETA
Accesseurs en lecture seule (présents dans la sortie JSON de la CLI, ignorés au chargement) : EffectiveYear, EffectiveWeather, EffectiveInput, EffectiveDiagnostics, EffectivePresentation, EffectiveInternetTextures.
Pour NewMap : obligatoire, de la forme maps\<dir>\global.cfg (insensible à la casse, / accepté, pas de ..) et installée. Ignorée pour SavedSituation (le .osn fournit la carte).
oui (handoff)
STABLE_BETA
SituationIdentity
OptionalValue<string>
Unset
Pour SavedSituation : obligatoire, une identité situations\...\<file>.osn installée (telle que renvoyée par DiscoverAsync(Situations) / /list:situations).
oui (handoff)
STABLE_BETA
PresentedEntrypointIndex
OptionalValue<int>
Unset
Pour NewMap sans EntrypointIdentity : obligatoire, >= 0, un index dans la liste des points d'entrée présentée par OMSI pour la carte. Envoyé au plugin sous la forme -1 lorsqu'il n'est pas défini.
oui (handoff)
STABLE_BETA
EntrypointIdentity
OptionalValue<string>
Unset
Un libellé brut de point d'entrée ou une identité de découverte. La définir rend le plan non exécutable (world.entrypoint-identity, RUNTIME_PARTIAL, OL_E_CAPABILITY_UNAVAILABLE).
transportée
PARTIAL
Entrypoint
EntrypointSpec (lecture seule)
calculée
Mode = Identity lorsque EntrypointIdentity est défini, sinon PresentedIndex lorsque l'index est défini, sinon Unset ; PresentedIndex, Identity reflètent les entrées.
obligatoire (Year : 0 lorsque l'enregistrement est null)
0Unset, 1Explicit, 2System.
Explicit/System → entrée unsupported (world.explicit-date, world.explicit-time, world.explicit-year, STATICALLY_PARTIAL) et OL_E_CAPABILITY_UNAVAILABLE. Les modes sont également copiés dans le handoff de démarrage, que le plugin rejette lorsqu'ils ne valent pas Unset (jamais atteint, car le plan est non exécutable).
SemanticDate : Year, Month 1..12, Day 1..31 ; SemanticTime : Hour 0..23, Minute 0..59, Second 0..59. Doit être définie lorsque Mode vaut Explicit (sinon OL_E_DATE_TIME_APPLY_FAILED) et ne doit pas être définie lorsque Mode ne vaut pas Explicit (OL_E_INVALID_ARGUMENT). YearSpec.Value n'est pas validée.
true lorsque Model est défini. C'est PlayerVehicle.IsSet que le handoff transporte sous le nom PlayerVehicleEnabled.
dérivée
PARTIAL
Un PlayerVehicle avec Presence 1 et tous les champs non définis est accepté et n'a aucun effet. Tout champ défini rend le plan non exécutable sur ce build (STATICALLY_PARTIAL).
General, Advanced, Graphics, AdvancedGraphics, Sound, AiPassengers, Keyboard, Controllers
IReadOnlyDictionary<string, OptionalValue<string>> chacune, obligatoire ({} si vide)
aucune
oui
STABLE_BETA
Les huit groupes sont concaténés ; le groupe dans lequel une clé est placée n'a aucun effet. Chaque entrée avec Presence 1 est un paramètre sémantique de ConfigurationCatalog (src/OmsiLaunch.Configuration/ConfigurationCatalog.cs) ; la clé sélectionne le fichier cible (options.cfg pour toutes les clés actuelles) et le jeton. La planification vérifie que la clé existe (OL_E_UNKNOWN_SETTING) et qu'elle est accessible en écriture (OL_E_SETTING_NOT_WRITABLE) ; la valeur n'est validée qu'au démarrage (OL_E_INVALID_SETTING_VALUE, signalé comme une session Failed avec OL_E_START_SESSION). Les clés sont insensibles à la casse. Les entrées non définies sont ignorées. L'option de la CLI /set:<key>=<value> écrit dans General ; les settings des profils de session sont également fusionnés dans General.
Aucun consommateur : les fichiers détenus par la session sont toujours restaurés à l'identique.
PARTIAL (transportée, actuellement sans effet)
SuppressStaleClosecheckWarning
bool
true
toutes
true : un fichier closecheck qui existe avant la session est supprimé définitivement au démarrage (diagnostic closecheck.stale-removed avec son SHA-256 ; échec OL_E_CLOSECHECK_REMOVE_FAILED). false : un closecheck existant est laissé tel quel et ne constitue pas une suppression de session. Le closecheck qu'OMSI écrit pendant la session est toujours supprimé lors de la restauration.
STABLE_BETA
StartupTimeoutSeconds
int
180
1..600 (sinon ArgumentOutOfRangeException levée par StartSessionAsync ; l'option de la CLI /startup-timeout impose 1..600 ; les profils exigent > 0). Budget de temps entre le démarrage du superviseur et Running ; à l'expiration, la session échoue avec OL_E_STARTUP_TIMEOUT (plugin démarré) ou OL_E_PLUGIN_NOT_LOADED.
oui
STABLE_BETA
ShutdownTimeoutSeconds
int
30
tout int (CLI /shutdown-timeout 1..600)
Aucun consommateur : le superviseur termine OMSI immédiatement avec TerminateProcess ; il n'y a pas d'attente d'arrêt coopératif.
Définie → input.keyboard non pris en charge (STATICALLY_PARTIAL) et OL_E_CAPABILITY_UNAVAILABLE. L'exécution PATCH/REPLACE du clavier n'est pas implémentée.
PARTIAL
ControllerDocument
OptionalValue<string>
Unset
Définie → input.controller non pris en charge et OL_E_CAPABILITY_UNAVAILABLE.
Aucun consommateur dans src/. La trace de l'hôte <root>\.omsilaunch\diagnostics\<sessionId>-host.log est toujours écrite.
PARTIAL (transportée, actuellement sans effet)
Verbose
bool
false
Aucun consommateur.
PARTIAL
OmsiLogAll
bool
false
Aucun consommateur.
PARTIAL
ProcessTrace
bool
false
Aucun consommateur.
PARTIAL
PluginTrace
bool
false
Aucun consommateur.
PARTIAL
NativeTrace
bool
false
Aucun consommateur.
PARTIAL
Les options de la CLI /log, /logall, /omsi-logall, /verbose, /trace, /trace-process, /trace-plugin, /trace-native renseignent ces booléens (/logall définit Verbose, ProcessTrace, PluginTrace, NativeTrace) ; elles sont combinées par OU avec les valeurs de la spécification.
0Unset (alias Native) : les fichiers d'écran de démarrage propres à OMSI ne sont pas modifiés. 1Managed : OmsiLaunch applique en overlay GUI\NewSplashscreen_ENG.bmp et GUI\NewSplashscreen_<LANG>.bmp pour la session (restaurés à l'identique ensuite).
oui
STABLE_BETA (matrice RV-006)
Language
OptionalValue<string>
Unset
PTB/PT-BR, ENG/EN, DEU/DE, FRA/FR (insensible à la casse) ; toute autre valeur est normalisée en ENG. Lorsqu'elle n'est pas définie, la valeur [language] de options.cfg est lue et normalisée de la même manière.
oui (écran de démarrage géré uniquement)
STABLE_BETA
CustomAssetDirectory
OptionalValue<string>
Unset
Répertoire contenant ENG.bmp et <LANG>.bmp (640×480, BMP 24 bits). Voir les règles de chemin. Répertoire manquant : OL_E_SPLASH_ASSET_DIRECTORY_MISSING ; fichier manquant : OL_E_SPLASH_ASSET_MISSING ; format incorrect : OL_E_SPLASH_FORMAT_UNSUPPORTED. Lorsqu'elle n'est pas définie, <root>\.omsilaunch\assets\splash est utilisé (initialisé une fois à partir du paquet), sinon le assets\splash du paquet.
oui (écran de démarrage géré uniquement)
STABLE_BETA
SuppressTrayIcon
bool
false
true supprime l'indicateur autonome de la zone de notification Windows du propriétaire CLI.
Propriétaire CLI uniquement ; l'API n'a pas d'icône de notification. Il n'existe pas d'option de la CLI ; la valeur ne peut provenir que d'un fichier de spécification.
0Native : rien ne change. 1Disabled : le plugin neutralise le téléchargeur intégré au processus d'OMSI (télémétrie internet-textures.suppressed / internet-textures.suppression.failed). 2Override : le profil .itx est appliqué en overlay sous Texture\standard.itx ; ses fichiers cibles et Texture\standard.ipr deviennent des suppressions de session.
Obligatoire pour Override (OL_E_ITX_PROFILE_REQUIRED). Un fichier texte composé de paires de lignes : une URL http/https absolue, puis un chemin cible relatif à la racine de l'installation qui contient un composant Texture\, n'est pas enraciné, ne contient pas .., ne commence pas par \ et ne traverse aucune jonction ni aucun lien symbolique (OL_E_ITX_PROFILE_INVALID, OL_E_ITX_TARGET_OUTSIDE_TEXTURE_PATH). Voir les règles de chemin.
Enregistrées dans le diagnostic de plan session_profile.selected (Data["session_profile.*"]). Pas consommées autrement ; normalement renseignées par le compilateur de profils de session, pas à la main.
NewMap = 0, SavedSituation = 1, LastMapState = 2, LastSituation = 2 (alias obsolète ; il s'agit de la branche native d'OMSI « dernier état de la carte », jamais du .osn le plus récent)
DateTimeMode
Unset = 0, Explicit = 1, System = 2
WeatherMode
Unset = 0, Preset = 1, Icao = 2, RealCurrent = 3
SplashMode
Unset = 0, Native = 0 (alias), Managed = 1
InternetTexturesMode
Native = 0, Disabled = 1, Override = 2
Presence
Unset = 0, Set = 1
EntrypointMode (Entrypoint.Mode en lecture seule)
Unset = 0, PresentedIndex = 1, Identity = 2
Les entiers hors de la plage déclarée sont stockés tels quels par le sérialiseur et se comportent comme des valeurs inconnues (par exemple, un WorldMode inconnu n'est ni NEW_MAP ni SAVED_SITUATION et produit un plan sans capacité de monde ; le plugin le rejetterait, mais la CLI remplace de toute façon le mode, voir la priorité).
Règles de validation et diagnostics de non-exécutabilité#
PlanSessionAsync exécute LaunchValidation.Validate puis SessionPlanner.PlanAsync. Un plan est exécutable exactement lorsqu'aucun code de diagnostic ne commence par OL_E_. L'ensemble complet :
Diagnostic
Condition
Source
OL_E_INSTALLATION_NOT_FOUND
Installation.RootPath vide ou composé uniquement d'espaces
LaunchValidation
OL_E_DATE_TIME_APPLY_FAILED
Date.Mode = Explicit sans valeur définie ou avec un mois/jour hors plage ; Time.Mode = Explicit sans valeur définie ou avec une heure/minute/seconde hors plage
LaunchValidation
OL_E_INVALID_ARGUMENT
Date.Value ou Time.Value définie alors que le mode ne vaut pas Explicit
LaunchValidation
OL_E_MAP_NOT_FOUND
NewMap avec MapIdentity non définie ou pas de la forme maps\...\global.cfg (validation) ; NewMap avec une identité qui n'est pas installée (planificateur)
les deux
OL_E_ENTRYPOINT_NOT_FOUND
NewMap sans EntrypointIdentity et avec PresentedEntrypointIndex non défini ou négatif
LaunchValidation
OL_E_ENTRYPOINT_REQUIRED
NewMap, carte installée, pas de EntrypointIdentity, PresentedEntrypointIndex non défini (world.presented-entrypoint indisponible)
SessionPlanner
OL_E_SITUATION_NOT_FOUND
SavedSituation sans SituationIdentity (validation) ou avec une identité qui n'est pas installée (planificateur)
les deux
OL_E_SITUATION_MAP_NOT_FOUND
SavedSituation : la carte nommée dans le .osn n'est pas installée
SessionPlanner
OL_E_UNSUPPORTED_OPERATING_SYSTEM
pas Windows 10+ sur un système x64 avec un processus hôte x64 (runtime.current-windows-x64)
SessionPlanner
OL_E_INSTALLATION_NOT_WRITABLE
répertoire racine manquant, attribut lecture seule défini ou absence de sous-répertoire plugins\ (transaction.exact-restore)
SessionPlanner
OL_E_UNSUPPORTED_BUILD
Omsi.exe manquant, ou sa taille/son SHA-256 ne correspond ni à l'empreinte du profil (692EBFBF..., 8 503 440 octets) ni à un hash de la liste autorisée (omsi.profile.OMSI23004)
SessionPlanner
OL_E_CAPABILITY_UNAVAILABLE
World.Mode = LastMapState ; EntrypointIdentity défini ; mode de Date/Time/Year différent de Unset ; mode de Weather différent de Unset ; un champ quelconque de PlayerVehicle défini ; Input.KeyboardDocument ou Input.ControllerDocument défini
PlayerVehicle.Model / Repaint / Hof non installé (en plus de OL_E_CAPABILITY_UNAVAILABLE)
SessionPlanner
OL_E_UNKNOWN_SETTING, OL_E_SETTING_NOT_WRITABLE
une clé de Environment absente du catalogue / non accessible en écriture
SessionPlanner
OL_E_SESSION_PRESENTATION_INVALID
la construction du plan d'écran de démarrage/ITX a levé une exception ; le message porte OL_E_SPLASH_ASSET_DIRECTORY_MISSING, OL_E_SPLASH_ASSET_MISSING, OL_E_SPLASH_FORMAT_UNSUPPORTED, OL_E_ITX_PROFILE_REQUIRED, OL_E_ITX_PROFILE_MISSING, OL_E_ITX_PROFILE_INVALID ou OL_E_ITX_TARGET_OUTSIDE_TEXTURE_PATH
SessionPlanner
OL_E_RUNTIME_ARTIFACT_MISSING
la référence de la closure du plugin (OmsiLaunchRuntimePaths) ou le manifeste de version ne peut pas être chargé (le message peut porter OL_E_RELEASE_MANIFEST_INVALID)
OmsiLaunchService.PlanSessionAsync
Non validé au moment de la planification (échoue au démarrage sous la forme d'une session Failed avec OL_E_START_SESSION) : valeurs des paramètres (OL_E_INVALID_SETTING_VALUE), intégrité du plugin permanent (OL_E_PERMANENT_PLUGIN_*), disponibilité du bail (OL_E_INSTALLATION_BUSY), plage de StartupTimeoutSeconds (levée par StartSessionAsync).
Diagnostics de plan informatifs : plugin.integrity.reference (message manifest ou self), session_profile.selected.
Priorité : options de la CLI, fichier de spécification et profil de session#
CliInput.BuildSpecAsync (tools/OmsiLaunch.Cli/Program.cs) construit la spécification effective dans cet ordre :
Base = valeurs par défaut intégrées, ou le fichier /spec lorsqu'il est fourni.
Racine de l'installation = l'argument d'installation explicite s'il est fourni, sinon le RootPath de la base ; ensuite ./vide → répertoire de l'exécutable, Path.GetFullPath. Un argument d'installation explicite l'emporte toujours sur le RootPath de la spécification.
Profil de session (/predefined-profile + /predefined-profile-index) : les arguments explicites de la CLI qui touchent un champ détenu par le profil sont rejetés avec OL_E_SESSION_PROFILE_OVERRIDE_CONFLICT (champs de monde uniquement en mode NEW_MAP ; clés /set présentes dans le préréglage ; options d'écran de démarrage lorsque le préréglage a presentation ; options de textures Internet lorsqu'il a internet-textures ; timeouts lorsqu'il a behavior). Le World de la base est remplacé par un nouveau (seul le mode de monde de la CLI subsiste), puis le bloc new: du profil (NEW_MAP uniquement), settings (dans General), presentation, internet-textures, behavior et les métadonnées SessionProfile sont appliqués. compatibility.maps est appliqué pour NEW_MAP et SAVED_SITUATION.
Monde : le mode de monde de la CLI l'emporte toujours (/new par défaut, /saved:<osn>, /last) ; le World.Mode du fichier de spécification est remplacé. Pour exécuter une situation enregistrée à partir d'une spécification, passez /saved:. /map et /entrypoint//entrypoint-index remplacent la base ; une identité /entrypoint de la CLI efface l'index ; /saved avec /map ou des options de point d'entrée donne OL_E_INVALID_ARGUMENT.
/date, /time, /year, /weather* remplacent la base lorsqu'ils sont fournis (system sélectionne DateTimeMode.System).
/no-vehicle efface PlayerVehicle ; les options individuelles /vehicle, /repaint, /hof, /fleet, /registration remplacent les champs individuels du véhicule du joueur de la base.
Les entrées /set:<key>=<value> sont ajoutées à Environment.General (clé vérifiée, valeur non) ; les sept autres groupes proviennent de la base sans modification.
/startup-timeout et /shutdown-timeout ne remplacent la base que lorsqu'ils sont fournis ; sinon s'appliquent la spécification, puis le profil, puis les valeurs par défaut 180 s / 30 s. ShutdownTimeoutSeconds est ACCEPTED_FOR_COMPATIBILITY / CURRENTLY_NO_EFFECT pour le superviseur.
/splash, /splash-language, /splash-assets, /internet-textures, /internet-textures-profile remplacent la base lorsqu'ils sont fournis ; SuppressTrayIcon provient uniquement de la base.
Les options de diagnostic sont combinées par OU avec la base.
Résultat : option explicite de la CLI > profil de session > fichier de spécification > valeur par défaut intégrée, à ceci près qu'une option de la CLI en conflit avec un champ détenu par le profil est une erreur et non un remplacement.
Utilisé tel quel : dans les opérations sur les fichiers, les chemins relatifs sont résolus par rapport au répertoire de travail du processus. Passez un chemin absolu. Le bail, le journal et le catalogue de contenu le normalisent avec Path.GetFullPath.
. ou vide = le répertoire qui contient OmsiLaunch.exe, jamais le dossier de travail de l'appelant ; un argument d'installation explicite l'emporte sur la spécification ; le résultat est rendu absolu.
Presentation.CustomAssetDirectory
Absolu, ou relatif à Installation.RootPath. Doit exister.
Idem (/splash-assets). Un chemin assets de profil de session est confiné au paquet du profil et stocké sous forme absolue.
InternetTextures.OverrideProfilePath
Résolu avec Path.GetFullPath, c'est-à-dire relativement au répertoire de travail du processus, et non à la racine de l'installation. Doit exister.
Idem (/internet-textures-profile). Un chemin profile de profil de session est confiné au paquet et stocké sous forme absolue.
Lignes cibles ITX
Relatives à la racine de l'installation ; doivent contenir un composant Texture\ ; pas de racine, pas de .., pas de \ initial, aucun composant jonction/lien symbolique.
Idem.
Identités de contenu (MapIdentity, SituationIdentity, PlayerVehicle.*)
Relatives à l'installation, insensibles à la casse, / accepté ; jamais absolues.