Adopter une mission Foothold sur la chaîne v6 (la « moulinette »)¶
Foothold est une mission communautaire (par Lekaa) qui évolue plusieurs fois par mois. Ce guide décrit la moulinette : une procédure reproductible que n'importe quel membre VEAF peut relancer à chaque nouvelle version upstream, pour produire les
.mizVEAF (Modern et Cold-War) depuis un seul dossier de mission.Architecture : code générique, connaissance auteur en donnée (voir ADR 0007) et config amont intacte + override partiel validé lexicalement (voir ADR 0008). Le détail de chaque commande est dans CONVERT_OTHER et la référence mission.yaml.
Prérequis¶
veaf-tools(ouveaf-tools.exe) à jour.- L'archive de release Foothold de la carte visée (p. ex. Caucasus) — voir ci-dessous.
- Le profil de conversion
foothold(livré avec les outils).
Où récupérer l'upstream¶
Foothold est publié sur GitHub : leka1986/Lekas-Foothold,
onglet Releases. Une release fournit un .zip par carte (Caucasus, Persian Gulf, Sinaï,
Syrie, Cold War Germany, Kola, Irak, Afghanistan, Normandie WWII), chacun contenant :
| Fichier | Ce qu'on en fait |
|---|---|
Foothold_<carte>_<version>.miz |
c'est l'entrée de la moulinette |
Foothold Config Manager <version>.exe |
ignoré — voir la mise en garde |
Foothold_Manual_v<x>.pdf |
documentation amont, utile à lire |
Getting Started.url |
raccourci vidéo |
Passez le .zip directement à convert-other : il adopte le .miz qu'il contient et
ignore le reste. Pas besoin de dézipper à la main.
Les neuf cartes d'un coup. Une release contient une archive par carte. Depuis un clone du dépôt,
tools/Convert-FootholdBatch.ps1les adopte toutes en une passe, en choisissant le bon profil pour chacune (il regarde dans l'archive, pas son nom) :.\tools\Convert-FootholdBatch.ps1 -InputFolder <dossier-des-zips> -OutputFolder <dossier-missions> -ValidateAux releases suivantes, ajoutez
-Update: les scripts sont rafraîchis et chaquemission.yamlréglé est préservé. Comptez environ une minute par mission.Vos dossiers de mission n'ont pas besoin de porter le nom des archives : le script apparie chaque archive au dossier de la même carte (il lit le théâtre des deux côtés), donc
Foothold_CA_4.7.0_Multi_Language….ziprafraîchit bienVEAF-Foothold-Caucasus. Il annonce pour chaque mission le dossier retenu et pourquoi.Seuls comptent les dossiers adoptés par
convert-other(ceux qui ont unconvert-other-state.yaml) : le dossier de sortie peut donc contenir d'autres missions sur les mêmes cartes, comme les Open Training. Exception : Sinaï et Sinaï Nord sont deux missions Foothold sur la même carte. Copiez leurs archives sous le nom de leur dossier (VEAF-Foothold-Sinai.zip,VEAF-Foothold-SinaiNorth.zip) : un dossier qui porte le nom de l'archive passe en premier. De même pour toutes les cartes lors de la première mise à jour d'une mission adoptée avant l'apparition deconvert-other-state.yaml.
Quel profil pour quelle carte¶
| Carte | Profil |
|---|---|
| Caucasus, Persian Gulf, Sinaï, Syrie, Cold War Germany, Kola, Irak, Afghanistan | foothold |
| Normandie WWII | foothold-ww2 |
La Normandie est une autre famille, d'où son profil : son fichier de config s'appelle
Foothold Config WW2.lua, il n'a pas de global Era (la Seconde Guerre mondiale n'a pas
de sélecteur d'ère) ni de StartNormal, et la mission n'embarque aucune CTLD Foothold —
la CTLD VEAF n'y est donc pas incompatible (elle reste OFF par défaut, mais vous pouvez
l'activer).
Si vous adoptez la Normandie avec le profil foothold, validate vous arrête : le
config_override viserait Foothold Config.lua, absent de cette mission, et l'override
serait alors chargé en dernier — après le script de setup qui a déjà lu les réglages —
donc sans aucun effet.
Vue d'ensemble¶
.zip release ──(1) convert-other --profile foothold──► dossier mission v6
│
(2) réglage mission.yaml ◄──┘
│
(3) validate ──► (4) build ──► <base>_MODERN.miz
<base>_COLD_WAR.miz
│
(5) test DCS ◄──┘
Nouvelle version Lekaa ──► convert-other --update ──► (re)validate ──► build
1. Initialiser (adopter)¶
veaf-tools convert other Foothold_CA_4.4.1_Multi_Language_Coldwar-Modern-Vietnam.zip <dossier-mission> --profile foothold
convert-other extrait le .miz (de l'archive si besoin), détecte les scripts chargés par
les triggers natifs (dans l'ordre), et génère un mission.yaml avec :
- un bloc
custom_scripts:ordonné (Moose, zoneCommander, Foothold Config, setup, CTLD Foothold, Splash, AIEN, EWRS… — l'ordre de chargement d'origine), délais compris : Lekaa ne charge pas tout d'un bloc — 5 scripts arrivent 3 secondes après les premiers, et AIEN 12 secondes après.convert-otherlit ces délais dans les triggers d'origine et écritdelay_seconds:en face des scripts concernés, ce qui reproduit l'étalement (voirdelay_seconds) ; - un
strip_native_triggers:listant les triggers de chargement natifs (le build les supprime pour éviter un double chargement) ; - les modules VEAF du profil (RADIO, SPAWN, WEATHER, SHORTCUTS, SECURITY, REMOTE) ;
- un marqueur
conversion_profile: foothold(le build/validate refusent un module incompatible — Foothold embarque sa propre CTLD, donc la CTLD VEAF reste OFF) ; - un scaffold
config_override:commenté ciblantFoothold Config.lua.
Pourquoi l'étalement compte¶
Ce n'est pas de la coquetterie de fidélité. AIEN inventorie les groupes terrestres une seule fois, au chargement (son propre commentaire dit « launched once at mission start and collect everything relevant that is already there »). Or Foothold crée une partie de ses groupes après coup, depuis des tâches planifiées qui démarrent à partir de 2 secondes.
Charger AIEN à l'instant zéro lui présente donc un monde que ces tâches n'ont pas encore peuplé —
et le symptôme est silencieux : aucune erreur dans le journal, simplement une IA terrestre qui
ne gère jamais les groupes créés par Foothold. C'est la raison des 12 secondes de Lekaa, et la
raison pour laquelle un delay_seconds: détecté ne doit pas être retiré à la légère.
2. Régler le mission.yaml¶
Trois ajustements, tous config-only (on ne touche jamais aux scripts upstream) :
a. Community scripts VEAF (déjà coupés par le profil)¶
Foothold embarque ses propres bibliothèques (Moose, sa CTLD, AIEN, EWRS,
Splash…) en custom_scripts. Les community scripts VEAF doivent donc rester OFF —
sinon, par exemple, l'AIEN de VEAF écrase celui de Foothold et la mission plante.
Le profil foothold scaffolde déjà ces désactivations dans le bloc modules:
(et pas dans un bloc community_scripts: séparé, qui serait ignoré dès que
modules: existe) — rien à faire, vérifiez juste leur présence :
modules:
# … modules VEAF …
# ── Community scripts OFF ──
stts: false
ctld: false
aien: false
csar: false
hercules: false
skynet: false
tum: false
MiST n'est pas dans la liste : il n'est plus injecté par défaut. Les scripts VEAF ne l'appellent plus, ni aucun script communautaire livré ici, ce qui épargne 336 Ko à chaque mission. Si l'un de vos propres scripts appelle
mist., le build s'en aperçoit et le réinjecte tout seul en vous disant lequel.
b. Override partiel de la config Foothold¶
Décommentez le bloc config_override: et n'y mettez que les globals que vous
changez (le reste de Foothold Config.lua reste intact et se met à jour tout seul
à la prochaine version). Deux contrôles au validate :
- chaque clé est validée lexicalement contre le code injecté — une faute de frappe ou un
renommage amont fait échouer
validateet le build ; - le
targetdoit désigner un script de la mission. Sinon l'override serait chargé en dernier, après le script de setup qui a déjà lu les réglages, et n'aurait donc aucun effet — une panne silencieuse, désormais bloquée.
config_override:
target: "Foothold Config.lua"
values:
Era: Modern # défaut ; surchargé par variante ci-dessous
AutoRestart: false
FootholdLocale: FR # langue des messages Foothold à l'écran
FootholdLocale (config amont V1.0.9) accepte EN, DE, FR, ES, RU, PT-BR, TR,
IT, zh-CN, zh-TW. Elle ne force pas la langue du menu radio des joueurs, qui reste
réglable par chacun en jeu.
⚠️ La config externe du Config Manager (à ne pas installer)¶
Depuis la config V1.0.9, Foothold Config.lua cherche un fichier de config externe et,
s'il le trouve, l'applique par-dessus les valeurs embarquées dans le .miz :
<Saved Games>\DCS…\Missions\Saves\Foothold Config.lua
C'est le canal du Foothold Config Manager (l'exécutable livré dans l'archive) : son bouton Import MIZ Config installe ce fichier. Conséquences à connaître :
- notre
config_overridegagne quand même : leveaf-config-override.luagénéré est chargé après le script de config, donc il réassigne les globals en dernier — ADR 0008 reste valable ; - mais un tel fichier posé dans le
Saved Gamesd'un serveur modifie silencieusement toutes les missions Foothold de cette instance, y compris les nôtres, pour tous les réglages que nous ne surchargeons pas explicitement ; - Foothold affiche en plus un avertissement à l'écran (
FOOTHOLD_CONFIG_EXTERNAL_OUTDATED) quand ce fichier externe est plus vieux que la config embarquée.
Donc : n'installez pas la config externe du Config Manager sur un serveur VEAF. La configuration d'une mission VEAF vit dans son
mission.yaml, versionnée avec le dossier de mission et validée au build — ce qu'un fichier dansSaved Gamesn'est pas. Le Config Manager reste utile hors ligne pour explorer les réglages disponibles et voir ce que chaque option fait.
c. Variantes Modern / Cold-War¶
L'ère Foothold est pilotée par le global Era, qui accepte quatre valeurs — "Modern",
"Coldwar", "Gulfwar" (le nom de l'ère Cold-War côté Irak) et "Vietnam". C'est une
différence de config, donc on émet plusieurs .miz en un seul build via
build_variants: :
mission:
name: VEAF-Foothold-Caucasus
build_variants:
- MODERN
- COLD_WAR
profiles:
MODERN:
mission:
era: MODERN
config_override:
values:
Era: Modern
COLD_WAR:
mission:
era: COLD_WAR
config_override:
values:
Era: Coldwar
Le même schéma donne une variante Vietnam si on la veut (Era: Vietnam) : les missions
récentes de Lekaa embarquent les appareils et les armements de l'époque, sélectionnés par
Era. Sur la carte Irak, l'ère Cold-War s'appelle Gulfwar.
3. Valider¶
veaf-tools mission validate <dossier-mission>
Vérifie la syntaxe, la sémantique des modules, l'existence des custom_scripts,
les incompatibilités du profil, et que chaque segment de clé config_override
existe dans le code Foothold injecté.
4. Construire les deux variantes¶
veaf-tools mission build <dossier-mission>
Un seul build produit deux .miz : …_MODERN.miz et …_COLD_WAR.miz. Chaque
variante : config amont intacte → petit veaf-config-override.lua réassignant
Era (chargé entre la config et le setup) → triggers natifs supprimés →
custom_scripts chargés dans l'ordre déclaré → spawns/data VEAF injectés.
Pour
--profile <X>seul (une variante précise, suffixée de son nom) ou les options de build, voir la référence mission.yaml.
5. Tester dans DCS¶
Ouvrez chaque .miz dans DCS et vérifiez le comportement iso-fonctionnel
(menu radio VEAF présent, moteur Foothold opérationnel, équipements cohérents avec
l'ère). C'est l'étape de validation finale avant de publier le dossier mission.
Mettre à jour (nouvelle version Lekaa)¶
Quand Foothold sort une nouvelle release, téléchargez la nouvelle archive et ré-importez-la dans le même dossier :
veaf-tools convert other <nouvelle_release.zip> <dossier-mission> --profile foothold --update
--update rafraîchit les scripts tiers et la base de mission, préserve votre
mission.yaml réglé, et normalise les noms versionnés (Moose_<date>.lua → Moose.lua,
Splash_Damage_<version>_leka.lua → Splash_Damage.lua).
Il aligne aussi les delay_seconds: sur l'étalement de la nouvelle version, supprime les scripts que Lekaa ne fournit plus et réécrit custom_scripts: sur ce que charge la nouvelle version, dans son ordre de chargement.
C'est ce qui couvre un renommage amont : en 5.3.0, zoneCommander.lua devient zoneCommanderv2.lua sur les dix cartes, et l'ancienne liste aurait chargé l'ancien moteur avec la nouvelle config.
Vos propres scripts restent dans la liste, après ceux de Lekaa.
Le rapport (convert-other-report.md) énumère tout : scripts ajoutés, mis à jour, supprimés, entrées de custom_scripts: ajoutées ou retirées, et chaque délai écrit.
Relisez-le, puis revalidez et reconstruisez. Voir CONVERT_OTHER.
convert-other-state.yamlapparaît dans le dossier de mission : c'est la liste des scripts que la version amont charge, et c'est elle qui permet de distinguer un script abandonné par Lekaa d'un script que vous avez ajouté. Versionnez-le avec la mission.