# CAIME, le guide : créer et modifier une carte de campagne de Total War: Warhammer III

> CAIME (Campaign AI Map Editor), l'éditeur du Campaign Map Toolkit, fabrique la moitié logique d'une carte de campagne Total War : régions, types de sol, climats, routes, rivières, emplacements (slots) de villes. Ce guide part de zéro : ce que fait l'outil, sa fenêtre, chaque couche et chaque règle, les exports, la ligne de commande, et les pièges qui nous ont coûté des heures en portant la carte de La Saison de la Révélation de Warhammer I dans Warhammer III.

Page : https://bretonia.dev/atelier/caime/ · Atlas de Bretonnie, atelier des moddeurs · mis à jour le 2026-09-25. Version en texte brut, pour les lecteurs et les IA ; les schémas y sont décrits en mots. Relu le 25 septembre 2026, mise à jour 9.0. Écrit contre ses sources, le code et la documentation de CAIME 1.0.1, l'Assembly Kit au patch 8.1 ; ce que la 9.0 a changé sur notre chantier y est ajouté, le reste n'a pas été revérifié point par point.

## Ce que fait CAIME

> **Par où commencer** : **Vous débutez** : lisez « Ce que fait CAIME », « Les mots du métier » et « De la base au jeu », puis suivez « Créer une carte neuve, pas à pas » avec une petite carte d'essai (200 × 150 hex, trois régions). **Vous portez une carte** d'un autre jeu : allez à « Porter une carte d'un autre jeu Total War ». **Vous êtes une IA** : la section « Pour une IA qui lit cette page » rassemble les règles vérifiables.

Une carte de campagne Total War est faite de **deux moitiés** qui décrivent la même terre. La **moitié logique** est posée sur une grille d'hexagones (des « hex ») : type de sol, région, climat, rivières, routes, plages, ponts, emplacements de villes, zones infranchissables. C'est ce que le jeu calcule : qui possède quoi, qui peut aller où, et à quel prix. La **moitié visuelle**, c'est le relief, les textures, la végétation, l'eau et l'éclairage : ce que le joueur voit.

*Schéma : La moitié logique : des hex colorés par type de sol, les frontières des régions, une route, une rivière et quatre emplacements de villes.*

CAIME s'occupe de la moitié logique. C'est une sorte de « Photoshop de données » : on choisit une couche, une valeur (un *swatch*), un outil, et l'on peint des hex. Puis le menu **Process** « développe » les couches en fichiers que le jeu lit : `map_data.esf`, les données de déplacement (pathfinding), les frontières (`borders.pbd`), `dynamic_resources.esf`, les images de correspondance et la minicarte (menu *Lookup and Minimap images* ; pour Warhammer III, une seule image, `<campagne>_lookup.bmp`). À notre connaissance, aucun autre outil public ne produit `map_data.esf`, le pathfinding, `borders.pbd` ni `dynamic_resources.esf` ; les images, elles, peuvent se faire autrement (nous avons refait notre minicarte par script).

Jeux pris en charge, selon sa documentation : Rome II, Attila, Thrones of Britannia, Warhammer I à III, Three Kingdoms, Troy, Pharaoh et Pharaoh Dynasties. Les notes de la v1.0.0 disent toutefois Pharaoh (2023) « non pris en charge pour l'instant », et le README du dépôt ne le cite pas. Pas Shogun 2.

## Les mots du métier

Tout le guide emploie ces mots ; ils sont expliqués une fois pour toutes.

| Mot | Ce qu'il veut dire |
|---|---|
| Assembly Kit | l'outillage gratuit de Creative Assembly, un par jeu (Steam → Bibliothèque → Outils). `binaries` = ses programmes ; `raw_data` = les sources (tables en XML, cartes de CA) ; `working_data` = ce que ses outils produisent |
| Dave, Tweak, Terry, BOB | les outils de l'Assembly Kit : Dave édite les tables, Tweak est l'éditeur dont Terry (le terrain en 3D) est un mode, BOB transforme les sources en fichiers du jeu et les empaquette. Voir [le guide Terry](https://bretonia.dev/atelier/terry/) et [le guide BOB](https://bretonia.dev/atelier/bob/) |
| RPFM | Rusted PackFile Manager, l'outil communautaire qui ouvre et fabrique les packs : [le guide RPFM](https://bretonia.dev/atelier/rpfm/) |
| Pack | une archive `.pack` que le jeu lit ; un mod est un pack |
| Table, clé | un tableau de la base du jeu ; chaque ligne a une clé unique (`regions`, `campaigns`…) |
| ESF | un format binaire de Creative Assembly (`map_data.esf`, `startpos.esf`) ; le sigle n'est pas documenté |
| Hex | une case de la grille, à sommet plat ; colonnes impaires décalées vers le haut ; ligne 0 en bas |
| Couche | un type de donnée, une valeur par hex (régions, sols, routes…) |
| Swatch | une valeur qu'on peint : un type de sol, une région, un climat… |
| `map.hex` | le projet CAIME d'une carte : toutes ses couches |
| `.hex_layer` | une seule couche, exportée ou à importer |
| Process, export | la transformation des couches en fichiers du jeu (menu Process) |
| Pathfinding | le calcul des déplacements : qui peut aller où, à quel coût |
| Lookup | une image où chaque région a sa couleur RVB ; le jeu y lit quelle région est sous un point |
| Logger | la fenêtre des messages de CAIME (Ctrl+L) |
| Emplacement (slot), étendue (sprawl) | l'emplacement d'une ville sur la grille ; la surface de la ville autour de lui |
| Zone jouable de campagne | la ligne de la carte dans `campaign_map_playable_areas` : limites de la caméra, fichiers de la minicarte |
| `is_sea` | la colonne de la table `regions` qui dit si une région est une mer |
| *bridge-cliff* | l'hex de terre qui touche un pont ; CAIME le calcule seul : ni couche ni type de sol, rien à peindre |
| Falaise | pour CAIME, tout hex de terre qui touche la mer sans être une plage ; il la calcule seul |
| Terrain à risque | l'infranchissable, les rivières et toute la côte (plage ou « falaise ») : ce que l'étendue d'une ville doit toucher ou tenir à 3 hex au moins |
| Province, attrition | un groupe de régions ; l'usure des armées sur un terrain |
| Masque d'arêtes | six bits par hex qui disent vers quels voisins part une route, une rivière, une frontière |
| Startpos | `startpos.esf`, l'état de départ d'une campagne, que le jeu génère ; hors de CAIME : [les outils](https://bretonia.dev/atelier/outils/) |

*Schéma : Les mots sur la carte : un extrait de carte annoté.*

1. **Hex** : une case à sommet plat ; les colonnes impaires sont décalées vers le haut ; la case (0, 0) est en bas à gauche.
2. **Région de mer** : la mer est une région comme une autre, avec is_sea = 1 dans la table regions.
3. **Région et frontière** : chaque hex a sa région ; la couche Region Borders trace la frontière (Auto-generate).
4. **Falaise** : un hex de terre qui touche la mer sans être une plage ; CAIME le calcule. La côte compte, avec les rivières et l'infranchissable, comme terrain à risque.
5. **Plage** : peinte (Beaches), sur la terre côtière seulement : les débarquements.
6. **Pont** : peint (Bridges) sur un hex de mer, d'une rive à l'autre ; la route s'arrête aux deux rives.
7. **bridge-cliff** : chaque hex de terre qui touche le pont (hachures) ; CAIME le calcule : rien à peindre.
8. **Emplacement (slot)** : la ville : un disque de 19 hex ; pour un port, 16 hex principaux (trait brun) et 3 hex de Port (trait bleu), dont un en mer.
9. **Étendue (sprawl)** : la surface de la ville, en ocre : les 19 hex.
10. **Masque d'arêtes** : six bits par hex de route, de rivière ou de frontière : les côtés vers ses voisins ; le hex cerclé d'or, grossi à droite, a les bits 0 (nord) et 3 (sud).

Un extrait de carte dessiné pour l'exemple, et les mots du guide posés dessus : la grille, les régions, la côte, un pont, une ville portuaire, une route.

## De la base au jeu : la chaîne complète

CAIME n'est qu'un maillon. Voici tout le chemin d'une carte neuve, d'un coup d'œil. Deux voies avancent en même temps : CAIME pour la moitié logique, Terry et BOB pour la moitié visuelle. Elles se rejoignent dans le pack du mod ; le jeu génère ensuite le tour 0 (le startpos) avec ce pack chargé (chez nous, avec un second pack, celui des tables de départ : [le guide des outils](https://bretonia.dev/atelier/outils/)), et l'on reconstruit le pack avec le startpos.

*Schéma : La marche à suivre : la base, CAIME (peindre, valider, exporter), Terry et BOB pour le terrain, RPFM qui assemble le pack, le jeu qui génère le tour 0, RPFM qui l'y remet, puis l'essai en jeu, et l'on recommence.*

Dans le schéma : 1 · la moitié logique · La base · déclarer carte, régions, campagne · `regions` · `campaigns` · CAIME · peindre les couches · `map.hex` · `tile_map.png` · CAIME · valider (11 contrôles) · enregistré · Tweak et Terry fermés · projet dans raw_data · CAIME · exporter (Process) · `map_data.esf` · `pathfinding.ppd` · `borders.pbd` · `<campagne>_lookup.bmp` · 2 · la moitié visuelle · Terry · relief, textures, arbres, eau · `<carte>.terry` · `tile_map.png ← CAIME` · BOB · un passage : le terrain · `full_height_map.dds` · `tile_list.bin` · carte neuve : BOB ne lance que 6 actions sur 15 · 3 · ensemble · RPFM · assembler le pack : exports, terrain, tables · `mon_mod.pack` · Le jeu · générer le tour 0 (deux packs) · `startpos.esf` · `hlp_data.esf` · `spd_data.esf` · RPFM · remettre le tour 0 dans le pack · `mon_mod.pack` · En jeu · tester, lire les journaux · on corrige, on recommence : on réexporte, puis un nouveau startpos

La marche à suivre. En haut, CAIME fait la moitié logique : peindre, valider, puis exporter, une fois le projet enregistré, Tweak et Terry fermés et le projet dans raw_data. En bas, en même temps, Terry et BOB font la moitié visuelle, à partir de la base et de la carte des tuiles exportée par CAIME ; pour une carte neuve, BOB ne lance que 6 actions sur 15. RPFM assemble le pack du mod ; le jeu génère le tour 0 avec ce pack et celui des tables de départ, puis RPFM y remet le tour 0. Sous chaque étape, les fichiers qu'elle produit. Chaque retouche demande de réexporter, puis un nouveau startpos.

Et le détail de chaque étape, sous les numéros de la marche, avec ce qu'elle produit :

1. **I · La base de données** : Dans l'Assembly Kit (Dave, ou les XML par script) : la carte, ses régions, ses provinces, la campagne qui l'utilise. (`regions`, `campaigns`, `campaign_map_playable_areas`…)
2. **II–III · CAIME, les couches** : Les couches peintes ou importées, puis validées. (`map.hex`)
3. **IV · CAIME, les exports** : Process : ce que le jeu lit pour se déplacer, tracer les frontières, colorier la carte. Et, par Tools → Export → Baseline Tilemap image, la carte des tuiles pour Terry. (`map_data.esf`, `pathfinding.ppd`, `display\borders\borders.pbd`, `<campagne>_lookup.bmp`, `tile_map.png`)
4. **V–VI · Terry et BOB, en même temps** : Relief, textures, arbres, côtes et eau : le terrain que lit le jeu. (`full_height_map.dds`, `tile_list.bin`, `global_props.bin`…)
5. **VII · Le pack** : RPFM rassemble dans le `.pack` du mod les exports, le terrain, les tables et les scripts : la génération du startpos a besoin de ce pack. (`mon_mod.pack`)
6. **VIII–IX · Le startpos, puis le pack reconstruit** : Le jeu génère le tour 0, pack du mod chargé (chez nous, avec le pack des tables de départ) ; pour une carte neuve, les données de l'IA en plus. On reconstruit ensuite le pack avec ces fichiers : dans `data`, le pack passe devant les fichiers en vrac. À refaire après chaque export et chaque changement de minicarte. (`startpos.esf`, `hlp_data.esf`, `spd_data.esf`)
7. **X · En jeu** : Démarrer une partie, lire les journaux, corriger, recommencer.

## Avant de commencer : les droits et les règles de l'équipe

- **Le code de CAIME** est sous une licence **non commerciale** : modification permise, aucun usage commercial, partage à l'identique avec le code source public si vous redistribuez, mention du droit d'auteur conservée.
- **Les fichiers que CAIME produit** : deux textes du dépôt se contredisent. Le README demande l'accord exprès d'un fondateur (MrJox, Maruka ou Marthenil) avant de donner des fichiers produits par CAIME, et interdit tout usage commercial, dons compris. L'EULA 1.1, que CAIME fait accepter au premier lancement, vous en laisse propriétaire et permet de les publier (Steam Workshop, Nexus Mods, ModDB) sans les monnayer ; elle déconseille les dons sans les interdire. **Dans le doute, demandez à l'équipe sur son Discord avant de publier.**
- L'EULA interdit aussi toute chaîne automatisée commerciale qui produirait du contenu pour des tiers.
- L'équipe demande de ne pas faire, sur un jeu Warhammer, la carte d'un autre univers : pour cela, partez de Troy ou de Pharaoh, même moteur (Discord de l'équipe de CAIME, 20.09.2026).
- Réutiliser dans un jeu Warhammer des modèles d'un autre jeu de CA n'est pas permis (restrictions de Games Workshop) : il faut ses propres assets (Discord de l'équipe de CAIME, 20.09.2026).
- **En bref** : « CAIME : code sous licence non commerciale. Fichiers qu'il produit : le README demande l'accord d'un fondateur avant de les donner, l'EULA 1.1 permet de les publier sans les monnayer ; dans le doute, demandez à l'équipe avant de publier ; rien de commercial. »

*Schéma : Ce que CAIME permet, ce qu'il faut demander.*

Dans le schéma : Ce que CAIME permet, ce qu'il faut demander · Permis · modifier le code de CAIME · licence non commerciale : partage à l'identique, copyright conservé · faire vos cartes · les fichiers produits sont à vous (EULA 1.1) · publier les fichiers produits, sans les monnayer · Steam Workshop, Nexus Mods ou ModDB (EULA 1.1) · Demandez d'abord, ou renoncez · donner les fichiers produits · README : l'accord d'un fondateur (MrJox, Maruka ou Marthenil) · tout usage commercial · dons compris, selon le README · sur un jeu Warhammer, la carte d'un autre univers · partez de Troy ou de Pharaoh · des modèles d'un autre jeu de CA · il faut vos propres assets · Les deux dernières : règles de l'équipe, dites le 20.09.2026 sur son Discord · Le README et l'EULA 1.1 se contredisent. · Dans le doute, demandez à l'équipe sur son Discord, avant de publier.

Le code de CAIME est sous licence non commerciale. Pour les fichiers qu'il produit, le README (l'accord d'un fondateur avant de les donner) et l'EULA 1.1 (publication permise, sans les monnayer) se contredisent : dans le doute, demandez à l'équipe. Les deux dernières règles, l'équipe les a dites sur son Discord le 20.09.2026.

Sources : le [dépôt de CAIME](https://github.com/TW-Campaign-Map-Modding-Team/CampaignMapToolkit) (README, LICENSE, EULA) et, pour les deux règles de l'équipe, son Discord (Campaign Map Modding Team), lu le 20 septembre 2026.

## Installer et configurer

1. Installez l'**Assembly Kit** du jeu depuis Steam (Bibliothèque → Outils).
2. Téléchargez CAIME sur la [page des versions](https://github.com/TW-Campaign-Map-Modding-Team/CampaignMapToolkit/releases) : l'installeur s'appelle `CampaignMapToolkit-win-Setup.exe`. La **v1.0.1** du 23 septembre 2026 contient deux correctifs de notre atelier : la lecture de la base sur tout Windows dont le séparateur décimal est la virgule, et la lecture des cartes des mini-campagnes de Warhammer I. Les mises à jour peuvent être automatiques.
3. Au premier lancement, acceptez l'EULA ; après une mise à jour, une fenêtre *Changelog* s'ouvre. Si la vue est noire à l'ouverture d'une carte (bogue connu), bougez ou zoomez.
4. **Settings → Preferences** (Ctrl+P dans CAIME) : choisissez d'abord le jeu (*Base game*), puis *Browse* pour l'Assembly Kit de ce jeu. Le bon dossier est `assembly_kit` : il contient `binaries`, `raw_data` et `working_data`. Un chemin par jeu.
5. Toujours dans les préférences : *Auto-save* écrit `map_autosave.hex` à côté du `map.hex` toutes les 5 minutes ; *Auto-backup* range toutes les 10 minutes `map_AAAA_MM_JJ_HH_mm_backup.hex` dans `backups\` (*to keep* = 0 garde tout : sur une grande carte, plusieurs Mo par copie ; mettez 10 ou 20). Le chemin de l'Assembly Kit et la source de la base valent à la prochaine ouverture d'un projet ; l'auto-sauvegarde s'active ou s'arrête aussitôt. Les réglages vivent dans `%APPDATA%\CampaignMapToolkit\Caime\preferences.json`.
6. La base peut venir de l'Assembly Kit (par défaut) ou de RPFM (*Database source*). En mode RPFM, CAIME demande `rpfm_cli.exe`, celui d'une version 4 de RPFM (chez nous, la 4.2.7) : la version 5 ne le livre plus. Il lui faut aussi un *Vanilla pack* par jeu (pour Warhammer III : `db.pack`) ; les packs de votre mod s'ajoutent par *Settings → RPFM Workflow*.
7. Lisez la [documentation](https://tw-campaign-map-modding-team.github.io/CampaignMapToolkit/) : douze guides détaillés, de la prise en main aux exports.

*Schéma : Régler CAIME : la fenêtre des préférences (schéma).*

Dans le schéma : Régler CAIME · Settings → Preferences (Ctrl+P) · schéma · `Preferences` · Base game · `Warhammer 3` · Assembly kit path · `<jeu>\assembly_kit` · `Browse` · Auto-save · `Enabled` · `Disabled` · Auto-backup · `Enabled` · `Disabled` · Auto-backups to keep · `10` · Database source · `Assembly Kit` · Le jeu avant Browse : un chemin par jeu. · `assembly_kit\` · Browse : ce dossier · `binaries\` · `raw_data\` · `working_data\` · Auto-save → · `map_autosave.hex` · toutes les 5 min · Auto-backup → · `backups\` · toutes les 10 min · Auto-backups to keep : 0 garde tout ; mettez 10 ou 20 · Assembly Kit : par défaut · RPFM : le rpfm_cli.exe d'une version 4 et un Vanilla pack : db.pack · la version 5 ne le livre plus

Dans Settings → Preferences (Ctrl+P) : le jeu d'abord, puis le chemin de son Assembly Kit, les sauvegardes automatiques et la source de la base. Le chemin et la source valent à la prochaine ouverture d'un projet, l'auto-sauvegarde aussitôt. Schéma, pas une capture : seuls les réglages dont parle ce guide.

Constaté en v1.0.0 (20 septembre 2026), non vérifié en v1.0.1 : l'installeur ne livrait ni le dossier des gabarits (`Templates`) ni l'outil `MapDataBuilder`. Contrôle : CAIME cherche cet outil dans `Tools\Release\MapDataBuilder.x64.exe`, sous le dossier parent de celui de son exécutable ; avec l'installeur officiel, c'est `%LOCALAPPDATA%\CampaignMapToolkit\Tools\Release\MapDataBuilder.x64.exe`. S'il manque, demandez d'abord à l'équipe : compiler le dépôt demande Visual Studio, avec le C# et le C++ (la solution contient les deux).

En mode Assembly Kit, CAIME **lit** la base (à l'ouverture et à chaque *Reload*) et n'y écrit rien. En mode RPFM, il y place temporairement des tables et remet les originaux à la fermeture du projet : n'éditez pas les tables de ce kit pendant ce temps, la remise en place écrase ce qui s'y trouve.

## La fenêtre et les outils

Sans projet ouvert, presque tout est grisé. Une fois une carte ouverte, la fenêtre compte neuf zones :

*Schéma : La fenêtre de CAIME et ses neuf zones.*

1. **Les menus** : File, Edit, Process, Tools, Settings, Help. Tout est en anglais.
2. **Les réglages rapides** : avec Brush, la taille de la brosse (Brush size, 1 à 10) ; l'opacité de l'image de fond (Image opacity) et ✕ pour l'enlever ; avec Flood Fill, la liste Flood Fill source.
3. **Les outils** : M Pan · Z Zoom · B Brush · F Flood Fill · E Eraser · I Background Image · L Line · P Color Picker ; ⚙ Properties, grisé dans la v1.0.1.
4. **Le canevas** : la carte en hex ; le cercle de la brosse. Molette : zoom ; clic du milieu : déplacer.
5. **La minicarte** : le cadre rouge montre la vue ; un clic y déplace la vue.
6. **Les swatches** : la valeur à peindre, dans une liste déroulante : les clés de la base pour la couche active (ici plains).
7. **Les actions** : celles de la couche active : Create, Rename, Remove (après la base), Cleanup… ; Align, Plug Holes ou Auto-generate selon la couche ; Validate.
8. **Les couches** : la case rend une couche visible ; le bouton rond la rend active. Ground Types est en bas, active à l'ouverture.
9. **La barre d'état** : le dernier message (un clic ouvre le Logger), X = colonne et Y = ligne sous la souris.

Schéma, disposition courante. Pour peindre : choisir la couche (8), puis la valeur (6), puis l'outil (3), et peindre sur le canevas (4). Le Logger (Ctrl+L) donne les hex fautifs en Hex(colonne, ligne) : amenez la souris jusqu'à lire ces X et Y dans la barre d'état (9).

### La recette pour peindre

1. Dans **Layers**, cochez la case de la couche (elle devient visible) et cliquez son bouton rond (elle devient **active** : c'est elle que vous peignez).
2. Dans **Swatches**, choisissez la valeur : un type de sol, une région, un climat…
3. Dans la barre d'outils, choisissez l'outil (tableau ci-dessous), réglez la taille de la brosse, et peignez.
4. Pour vérifier : la barre d'état donne X (colonne) et Y (ligne) sous la souris ; Ctrl+Z annule, sans limite, un geste de souris à la fois.

| Touche | Outil | Ce qu'il fait |
|---|---|---|
| M | Pan | déplacer la vue (le clic du milieu le fait aussi, quel que soit l'outil) |
| Z | Zoom | zoomer (la molette aussi) |
| B | Brush | peindre ; taille 1 = 1 hex, 2 = 7, 3 = 19, 4 = 37 |
| F | Flood Fill | remplir une zone ; la liste *Source* dit quelle couche sert de bordure (Ground Types, Climates, Attritions, Regions, Impassable, Roads, Trade Routes, Restrictions) |
| E | Eraser | effacer |
| I | Background Image | poser une image de fond (JPG, BMP, TIFF, PNG), étirée sur la carte : un calque de travail, **jamais enregistré ni exporté** |
| L | Line | un premier clic (en rouge), le trajet s'affiche en jaune, un clic final |
| P | Color Picker | prélever la valeur d'un hex ; Alt maintenu donne une pipette temporaire |

*Schéma : La brosse : 1, 7, 19, 37 hex.*

Dans le schéma : La brosse : 1, 7, 19, 37 hex · Taille 1 · 1 hex · rayon 0 : le hex cliqué · Taille 2 · 7 hex · rayon 1 · Taille 3 · 19 hex · rayon 2 · Une ville de Warhammer III · Taille 4 · 37 hex · rayon 3 · Un clic peint tous les hex à taille − 1 pas au plus du hex cliqué. Le curseur Brush size va de 1 à 10 : 271 hex au plus.

La taille de la brosse est un rayon : la taille 1 peint le hex cliqué, chaque taille de plus ajoute un anneau. La taille 3 pose d'un clic le disque de 19 hex d'une ville de Warhammer III.

### Les raccourcis à connaître

| Raccourci | Action |
|---|---|
| Ctrl+N · Ctrl+O · Ctrl+S · Ctrl+Shift+S | nouvelle carte · ouvrir · enregistrer · enregistrer sous |
| Ctrl+X · Ctrl+Q | fermer le projet (ce n'est pas « couper ») · quitter |
| **Ctrl+R** | **Reload** : relit la base, et **abandonne ce qui n'est pas enregistré** |
| Ctrl+Z · Ctrl+Y | annuler · rétablir (sans limite) |
| Ctrl+Shift+R · Ctrl+Shift+N | redimensionner (marges à droite, à gauche, en haut, en bas) · renommer la carte (la base et le dossier sous `raw_data` doivent suivre) |
| Ctrl+L · Ctrl+B · Ctrl+M · Ctrl+P | Logger · Border Editor · Map Data Editor · Preferences |

Le Logger donne les hex fautifs sous la forme Hex(colonne, ligne) : amenez la souris jusqu'à lire ces X et Y dans la barre d'état, et vous êtes dessus.

## Créer une carte neuve, pas à pas

### Préparer le projet

1. **Concevoir.** Croquis, liste des régions et des provinces, villes, ports, passages obligés (voir plus bas). Largeur **paire** : une exigence de la grille hexagonale, dit la documentation, qui propose 1016 × 720 et avertit au-delà de 731 520 hex (lenteur, pas interdiction). L'équipe de CAIME cite sur son Discord (20.09.2026) un plafond de 2 048 hex par dimension, au-delà duquel les données de cheminement de l'IA (hlp, spd) ne se génèrent plus ; nous ne l'avons pas trouvé dans le code de la v1.0.1. La grande carte de Warhammer III fait 1440 × 970. Nom de carte : lettres, chiffres et soulignés (CAIME retire le reste sans prévenir), et **la casse compte**.
2. **Déclarer la carte dans la base**, avec ce nom exact (Dave, XML par script, ou RPFM) : voir la section suivante et sa fiche des colonnes.
3. **Créer le projet** : File → Create new map (Ctrl+N) ; nom exact, *Template* = None, *Game* = Warhammer3 (**définitif** : le jeu est enregistré dans le projet et ne se change plus), largeur paire. CAIME range le projet dans son dossier `Projects\<carte>\` ; avec l'installeur officiel, `%LOCALAPPDATA%\CampaignMapToolkit\Projects\<carte>\`. Contrôle : à l'ouverture, la liste *Swatches* de la couche Regions montre vos régions ; vide, la base ne connaît pas la carte (voir la FAQ).
4. **Le mettre à sa place** : aussitôt, File → Save as… (Ctrl+Shift+S) vers `<Assembly Kit>\raw_data\EmpireDesignData\campaign_maps\<carte>\map.hex`, puis rouvrez cette copie. Map Data et Dynamic Resources ne travaillent qu'à cet endroit (sinon : « Map Data Process denied »).

*Schéma : Deux copies de votre projet.*

Dans le schéma : Deux copies de votre projet · Le brouillon · Ctrl+N le crée ici · Map Data : refusé ici · `%LOCALAPPDATA%\CampaignMapToolkit\Projects\<carte>\map.hex` · `File → Save as…` · `Ctrl+Shift+S` · rouvrez cette copie · La vraie place · la seule où Map Data travaille · `<Assembly Kit>\raw_data\EmpireDesignData\campaign_maps\<carte>\` · `map.hex` · le projet · Fichiers d'appui · `trees.png` · ≈ 7,04 × 7,37 px par hex · `tree_database.xml` · copié du prologue · `dynamic_resources.png` · ≈ 2,54 × 2,40 px par hex · `dynamic_resources_database.xml` · copié du prologue · Sauvegardes automatiques · `map_autosave.hex` · toutes les 5 min · `backups\` · toutes les 10 min · `map_AAAA_MM_JJ_HH_mm_backup.hex` · Avant Process · Enregistré · Tweak et Terry fermés · Projet dans raw_data · `Process` · Ce que Process écrit · un fichier par export · `<Assembly Kit>\working_data\campaign_maps\<carte>\` · `map_data.esf` · `pathfinding.ppd` · `display\borders\borders.pbd` · `dynamic_resources.esf` · `<campagne>_lookup.bmp`

CAIME crée le projet dans son propre dossier Projects : c'est un brouillon. Map Data et Dynamic Resources n'acceptent que la copie enregistrée (Save as) dans raw_data, avec ses fichiers d'appui : rouvrez-la et travaillez dans celle-là ; Process écrit ensuite dans working_data.

### Remplir, valider, exporter

1. **Poser les quatre fichiers d'appui** à côté du `map.hex` : `trees.png`, `tree_database.xml`, `dynamic_resources.png`, `dynamic_resources_database.xml`. Sans eux, Map Data ou Dynamic Resources échouent. Sur Warhammer III, copiez les XML depuis le dossier du prologue (`wh3_main_prologue_map`) et donnez aux images la taille de votre carte : environ 7,04 × 7,37 pixels par hex pour `trees.png`, 2,54 × 2,40 pour `dynamic_resources.png`. `trees.png` sert aussi aux arbres de BOB. Contrôle : les quatre fichiers sont à côté du `map.hex`, sous ces noms exacts.
2. **Enregistrer (Ctrl+S), puis File → Reload (Ctrl+R)** après chaque changement de la base : CAIME y relit les régions, sols, climats et attritions déclarés pour cette carte. Reload abandonne tout ce qui n'est pas enregistré.
3. **Peindre les couches** : chaque hex a besoin d'une région, d'un type de sol et d'un climat. Terre et mer doivent concorder (le type de sol, le `is_sea` de la région, et l'hex).
4. **Valider**, couche par couche : Tools → Validate → <couche> (onze entrées, une à une), ou le bouton *Validate* du panneau Actions pour la couche active ; en ligne de commande, `validate --all` les enchaîne. Les contrôles ne modifient rien. Contrôle : la fenêtre qui suit dit « No issues have been found » ; sinon, le Logger (Ctrl+L) liste les *Error*, *Warning* et *Info*. Corrigez les *Error* (nuances dans « Les règles d'une carte qui fonctionne »), lisez les *Warning*, enregistrez.
5. **Exporter** (Process) : Map Data, Dynamic Resources, Pathfinding, Borders, Lookup. Enregistrez avant ; Tweak et Terry fermés. Succès de Map Data : « Finished creating map ». Contrôle : dans `<Assembly Kit>\working_data\campaign_maps\<carte>\`, datés du jour, `map_data.esf` (CAIME tient pour raté un fichier de 10 Ko ou moins), `pathfinding.ppd`, `display\borders\borders.pbd` et `<campagne>_lookup.bmp`. Détail : la section « Exporter ».
6. **En même temps, la moitié visuelle** : exportez la carte des tuiles (Tools → Export → Baseline Tilemap image, `tile_map.png`) pour le projet Terry, puis [Terry](https://bretonia.dev/atelier/terry/) et [BOB](https://bretonia.dev/atelier/bob/).
7. **Construire le pack, puis générer le startpos** une fois les deux moitiés prêtes. Les trois voies du startpos : *Build Startpos* de RPFM, l'action *Process start pos* de BOB, ou un `user.script.txt` écrit à la main. Chez nous, seule l'écriture à la main a marché : [le guide des outils](https://bretonia.dev/atelier/outils/). Reconstruisez ensuite le pack avec le startpos ([RPFM](https://bretonia.dev/atelier/rpfm/)), puis faites l'essai en jeu. Chaque retouche de la carte demande un nouvel export, puis un nouveau startpos.

## Les tables de la base à déclarer

Le nom de la carte (ici `ma_carte`) est le même partout, casse comprise ; celui de la campagne (ici `ma_campagne`) relie `campaigns`, `campaign_map_playable_areas` et `campaign_map_roads`. Les noms de colonnes viennent des schémas du kit de Warhammer III (`raw_data\db\TWaD_<table>.xml`).

| Table | Ce qu'elle dit | Colonnes qui tiennent la carte |
|---|---|---|
| `campaign_maps` | la carte, dans le kit (dans les packs du jeu, Warhammer III n'a plus cette table : la carte s'y déclare par `campaigns.map_name` et `campaign_map_playable_areas`) | `mapname` = `ma_carte` ; `minx`, `miny`, `maxx`, `maxy` |
| `campaigns` | la campagne dont `map_name` est la carte ; **sinon l'export Lookup refuse** (« no campaign uses the map ») | `campaign_name` = `ma_campagne` ; `map_name` = `ma_carte` |
| `campaign_map_playable_areas` | la zone jouable de campagne : limites de la caméra et fichiers de la minicarte (à mettre à jour avant Map Data si la taille change) | `mapname` = `ma_carte` ; `campaign_key` = `ma_campagne` ; `minx`, `maxx`, `miny`, `maxy` ; `radar_file` (la minicarte) ; `index`, un numéro automatique |
| `regions` | une ligne par région, terre ou mer, avec une **couleur RVB unique** (elle sert aux images de correspondance) | `key` ; `is_sea` (0 ou 1) ; `r`, `g`, `b` |
| `campaign_map_regions` | lie chaque région à la carte | `campaign_map` = `ma_carte` ; `region` = une `key` de `regions` |
| `region_to_province_junctions` | une ligne par région, vers sa province | `region` ; `province` ; `is_capital` |
| `provinces` | la province, si elle est neuve | `key` |
| `campaign_map_roads` | le coût des routes, par campagne | `key` ; `campaign` = `ma_campagne` ; `threshold` ; `movement_cost` |
| `campaign_map_areas_of_interest` | Warhammer III et Three Kingdoms : filtrée par nom de carte, sinon couche vide | `key` ; `campaign_map` = `ma_carte` |

*Schéma : Déclarer une carte : les tables tenues par un nom.*

Dans le schéma : Déclarer une carte · ma_carte : le même nom partout, casse comprise · `campaign_maps` · dans le kit seulement · `mapname` · `ma_carte` · `minx · miny · maxx · maxy` · `campaigns` · `campaign_name` · `ma_campagne` · `map_name` · `ma_carte` · sans elle : l'export Lookup refuse · `campaign_map_roads` · `campaign` · `ma_campagne` · `key · threshold · movement_cost` · `campaign_map_playable_areas` · `mapname` · `ma_carte` · `campaign_key` · `ma_campagne` · `minx · maxx · miny · maxy` · `radar_file · index` · `<mapname>wh3_main_chaos_map_4</mapname>` · `<mapname>ma_carte</mapname>` · pas la dernière · `<mapname>wh3_main_combi_map_5</mapname>` · jamais la dernière ligne : Map Data plante · `campaign_map_regions` · `campaign_map` · `ma_carte` · `region` · `ma_region` · casse différente : swatches vides · `regions` · `key` · `ma_region` · `is_sea · r · g · b` · couleur r g b unique : elle sert au lookup · `region_to_province_junctions` · `region` · `ma_region` · `province` · `ma_province` · `is_capital` · `provinces` · si elle est neuve · `key` · `ma_province` · `campaign_map_areas_of_interest` · `key` · `campaign_map` · `ma_carte` · Tables globales, déjà remplies · `campaign_ground_types · climates · campaign_map_attritions` · Contrôle : les régions apparaissent dans Swatches

Chaque fiche est une table du kit de Warhammer III ; le pointillé part de la fiche mère et arrive sur la colonne qui les relie, et une même étiquette porte une même valeur. Le nom de la carte revient dans cinq tables, écrit exactement pareil, majuscules comprises.

Ces tables ont d'autres colonnes, dont beaucoup sont marquées comme requises dans le kit : remplissez-les sur le modèle d'une ligne de CA, celle du prologue (`wh3_main_prologue_map`) par exemple. Les tables globales (`campaign_ground_types`, `climates`, `campaign_map_attritions`) sont déjà remplies. L'ordre des régions compte : les exports les lisent terre d'abord, puis mer, dans l'ordre de `regions.xml`. Contrôle : à l'ouverture du projet (ou après File → Reload, Ctrl+R), la liste *Swatches* de la couche Regions montre vos régions.

Créer, renommer ou supprimer une région, un type de sol, un climat, une attrition ou une zone d'intérêt demande **deux gestes** : changer la base, puis, dans le panneau **Actions**, le bouton correspondant (Create, Rename, Remove), avec le même nom. *Remove* ne vide pas les hex déjà peints.

> **Le piège de la dernière ligne** : L'export Map Data **plante** quand la ligne de la carte traitée est la **dernière** de `campaign_map_playable_areas.xml` : même contenu, seul l'ordre change. Le plantage survient dans une DLL du kit que MapDataBuilder appelle ; à notre connaissance, la v1.0.1 ne le contourne pas. Un outil qui ajoute toujours en fin de fichier y fait tomber toute carte neuve : faites suivre votre ligne d'une autre.

## Les couches

Une couche, c'est une information par hex. On les peint une à une, comme des calques posés sur la même grille ; une aiguille plantée dans un hex traverse toutes les feuilles et lit une valeur sur chacune.

*Schéma : Les couches de CAIME empilées comme des calques transparents sur la même carte, dans l'ordre du panneau : types de sol, climats, régions, rivières, villes, routes et infranchissable ; une aiguille traverse le même hex sur toutes.*

1. **Ground Types** : le type de sol : plaine, forêt, montagne, mer
2. **Climates** : le climat : obligatoire sur chaque hex
3. **Regions** : la région de chaque hex, et ses frontières
4. **Rivers** : les rivières, avec leurs directions
5. **Town Sprawl · Town Slots** : l'emplacement d'une ville (19 hex dans Warhammer III ; un port : 16 + 3) et son étendue
6. **Roads · Impassable** : les routes, avec leurs directions ; ce qui ne se franchit pas

Chaque couche est un calque posé sur la même grille : pour un hex donné, une valeur par couche. Les feuilles suivent l'ordre du panneau de CAIME, où la couche du haut se dessine par-dessus. Schématique : les couches de Warhammer III sont quatorze, et une ville y couvre 19 hex.

Les couches de Warhammer III, avec les noms que l'éditeur affiche, dans l'ordre du panneau (celle du haut se dessine par-dessus) :

| Couche | Ce qu'on y peint | Effet, outil ou action |
|---|---|---|
| Impassable | les hex interdits | action *Plug Holes* : bouche les trous d'un hex |
| Roads | les routes, avec leurs directions | coût réduit (`campaign_map_roads`) ; jamais d'anneau |
| Town Slots | les emplacements : *Main Settlement*, *Port*, *Slot 2*… | voir « Les villes » |
| Town Sprawl | l'étendue de chaque ville | action *Align Town Sprawl/Slot* |
| Bridges | les ponts, sur des hex de mer | voir « Les ponts » |
| Rivers | les rivières, avec leurs directions | sur la terre seulement |
| Beaches | les plages | seulement sur la terre côtière : les débarquements |
| Restrictions | des restrictions de mouvement graduées | levables par un script Lua |
| Region Borders | les frontières dessinées | action *Auto-generate* |
| Areas Of Interest | des zones d'intérêt | exige la table `campaign_map_areas_of_interest` |
| Regions | la région de chaque hex | swatches à créer (nom + *Is sea?*) |
| Attritions | l'usure des armées | swatches à créer |
| Climates | le climat : obligatoire sur chaque hex | swatches à créer |
| Ground Types | le type de sol : plaine, forêt, montagne, mer… | fixe le coût de mouvement ; action *Align Ground/Region Type* : déduit terre ou mer des régions |

Une quinzième couche, *Trade Routes* (routes commerciales), n'apparaît pas dans le panneau de Warhammer III : elle ne sert qu'à Rome II, Attila, Thrones of Britannia et Three Kingdoms. Les autres couches sont à deux états (présent ou non), sauf celles qui ont des swatches.

## Les règles d'une carte qui fonctionne

Les onze contrôles de validation donnent trois niveaux ; voici ceux que leur donne le code de la v1.0.1. **Error** : désaccord base/carte (régions, sols, climats, attritions), index invalide, pont mal posé, emplacement sur l'infranchissable, et les règles de l'étendue d'une ville. **Warning** : hex sans région, sol ou climat, désaccord terre/mer, région morcelée ou vide, rivières, routes, plages, taille d'emplacement… **Info** : remarques. Corrigez toute Error de concordance, d'index et de pont avant d'exporter ; une Error d'étendue sur une ville en col existe aussi sur la carte de CA (cinq villes) : jugez-la en jeu. CAIME **n'empêche pas** d'exporter avec des Error (la documentation dit : « Fix all errors before processing ») : lisez le Logger (Ctrl+L). Repère : la carte de Warhammer III de CA remonte des centaines d'avertissements, et s'exporte.

*Schéma : Niveaux de gravité du validateur : Error, Warning, Info (v1.0.1).*

Dans le schéma : Error, Warning, Info · d'après le code de CAIME v1.0.1 · Error · le plus grave · À corriger avant d'exporter · Base ≠ carte : régions, sols, climats, attritions · Index invalide · Pont sur la terre, infranchissable ou sans deux rives · Les villes · Emplacement infranchissable (contrôle Impassable) · Étendue sur l'infranchissable ou hors de sa région · Étendue en plusieurs blocs · Terrain à risque à 2 hex · Deux zones à risque au contact · Warning · à lire · Hex sans région, sol ou climat · Terre et mer en désaccord · Région morcelée ou vide · Région franchissable sans emplacement · Mer : plus de 9 régions de terre voisines · Rivière vers la mer ; route ou plage mal posée · Emplacement principal ≠ 19 ou 16 hex ; port sans mer · Étendue sans emplacement · Info · une remarque · Hex isolé : route, rivière, plage, région… · Mer : plus de 5 régions de terre voisines · Trois hex de route voisins deux à deux (carrefour serré) · Région sans ville, toute infranchissable · Emplacement infranchissable (contrôle Town Slots) · La carte de CA elle-même a 5 Error d'étendue : jugez en jeu. · validate sort en 2 dès un Warning : lisez le rapport.

Les onze contrôles de la v1.0.1 classent chaque message en Error, Warning ou Info, et CAIME exporte quand même : corrigez les Error de concordance, d'index et de pont, lisez les Warning, et jugez en jeu une ville en col.

### Les régions

- **Chaque hex** a une région, un type de sol et un climat. Une région vide menace le startpos.
- Une région de terre est **d'un seul tenant** : le validateur prévient qu'une région morcelée peut gêner la génération du startpos. Une région de terre sans ville se peint entièrement infranchissable.
- Une région de mer touche **5 régions de terre au plus** (conseil, niveau Info) ; au-delà de 9, Warning : l'IA ralentit, surtout avec des hordes.

### Les villes : emplacement et étendue

Chaque région franchissable a au moins un emplacement de ville ; sinon, Warning. L'emplacement principal (*Main Settlement*) est un **disque parfait de 19 hex** autour du centre de la ville (un clic de brosse de taille 3) ; son centre devient la position de la ville. Une ville **portuaire** garde le même disque, partagé : **16 hex** de terre en *Main Settlement* et **3 hex** consécutifs du bord, côté mer, en *Port* (chez CA : deux sur la terre, un sur la mer). L'étendue couvre les 19 hex. Le validateur compte (19 ou 16) ; MapDataBuilder, lui, veut le disque : sans lui, la ville n'a pas de position et l'IA de campagne plante. L'action *Align Town Sprawl/Slot* pose l'étendue sous chaque emplacement.

*Schéma : Ville de l'intérieur : 19 hex.*

Dans le schéma : Ville de l'intérieur : 19 hex · Infranchissable au contact : bon · Rivière à 2 hex : Error · Infranchissable à 3 hex : bon · Ville portuaire : 16 + 3 hex · Port : 3 hex du bord, dont 1 en mer · Principal : 16 hex de terre · L'étendue couvre les 19 hex

Le modèle de CA : un disque parfait de 19 hex (un clic de brosse de taille 3), dont le centre devient la position de la ville. Ville de l'intérieur : tout le disque en emplacement principal (trait brun) ; un terrain à risque (infranchissable, rivière, côte) touche l'étendue ou reste à 3 hex au moins, jamais à 2. Ville portuaire : le même disque, partagé entre 16 hex de terre en emplacement principal et 3 hex consécutifs du bord, côté mer, en Port (trait bleu) ; l'étendue (ocre) couvre les 19 hex.

- L'étendue est **d'un seul bloc** par région et ne se pose jamais sur l'infranchissable (Error). La documentation interdit aussi la rivière et la falaise, mais le code de la v1.0.1 ne le vérifie pas, et l'étendue d'une ville portuaire de CA couvre forcément des hex de côte.
- Un **terrain à risque** (l'infranchissable, les rivières et toute la côte) **touche** l'étendue ou reste **à 3 hex au moins** ; jamais à 2. Une seule zone à risque au contact. Ces deux règles sont des Error.
- L'étendue d'un port peut déborder sur la mer.
- La documentation donne trois règles différentes pour Warhammer III ; le code de CAIME applique 19 et 16 à Warhammer I, II et III. En portant une carte de Warhammer I (7 hex, 4 pour un port), agrandissez les emplacements de 7 à 19 hex (16 + 3 pour un port).

### Les rivières et les ponts

- Une rivière est **sur la terre seulement** : elle descend vers la côte mais s'arrête sur le dernier hex de terre ; aucune arête ne pointe vers la mer ni hors de la carte.
- Un **pont** enjambe de l'eau **peinte en mer**, d'une rive à l'autre : peignez *Bridges* sur ces hex de mer et menez la route jusqu'à la rive. CAIME marque seul les hex de rive qui touchent le pont (*bridge-cliff*). La base de Warhammer III a d'ailleurs un type de sol de mer pour les cours d'eau, `sea_river`.
- Le validateur (v1.0.1) lève trois Error : un hex *Bridges* sur la terre, un hex *Bridges* infranchissable, un pont qui ne relie pas deux rives distinctes. Un tracé *Rivers* est sur la terre : il **ne se ponte pas**.

*Schéma : Un pont, et ce qui n'en est pas un.*

Dans le schéma : Un pont, vu de dessus · Route · Rive : calculée par CAIME · Mer, peinte Bridges · Mer, peinte Bridges · Rive : calculée par CAIME · Route · Rivière traversée : une pénalité de passage · Pont sur un tracé Rivers : Error

Un pont enjambe de l'eau peinte en mer, d'une rive à l'autre : on peint Bridges sur ces hex de mer et l'on mène la route jusqu'à la rive ; CAIME marque seul les hex de rive qui touchent le pont (bridge-cliff, hachures) : rien à peindre. Un tracé de la couche Rivers, lui, est sur la terre et ne se ponte pas : un pont posé sur la terre est une Error. La base de Warhammer III a d'ailleurs un sol de mer pour les cours d'eau, sea_river.

### Les réseaux : des arbres, jamais des anneaux

Routes, rivières et routes commerciales forment des **arbres**, avec des impasses. Un **anneau** (un circuit sans aucune extrémité, par exemple une route qui fait le tour d'une province) fait **tourner l'export sans fin** : c'est le vrai danger, car rien ne le coupe à votre place. Gommer un seul hex suffit à le couper. La documentation interdit aussi le **triangle** de trois hex voisins deux à deux ; pour les routes et les rivières, CAIME retire déjà une arête de chaque triangle quand il calcule leurs masques, mais évitez-le quand même.

*Schéma : Un réseau en arbre, pas en anneau.*

Dans le schéma : Un arbre · un carrefour, des impasses · Un anneau · l'export tourne sans fin · L'anneau coupé · un hex gommé : deux impasses · Un triangle · trois hex voisins deux à deux

Routes, rivières et routes commerciales : un arbre, avec des impasses. L'anneau (un circuit sans extrémité) est le vrai danger : l'export tourne sans fin, et CAIME ne le coupe jamais ; gommer un seul hex suffit. La documentation interdit aussi le triangle de trois hex voisins deux à deux ; pour les routes et les rivières, CAIME en retire déjà une arête quand il recalcule les liaisons. Un carrefour serré (trois hex de route voisins deux à deux) forme ce triangle : CAIME le signale en Info.

## Concevoir une carte qui se joue bien

- Partez du jeu : cols, gués, détroits, voisinages de factions, axes d'invasion. Des couloirs et des bastions, pas une plaine uniforme.
- Des biomes par zones : massifs continus avec deux ou trois cols, forêts d'un seul bloc.
- Des rivières crédibles : source en montagne, confluences, delta.
- Des routes en arbre : les villes d'une province reliées, puis les provinces entre elles.
- Des régions compactes et de taille comparable ; des ports là où le commerce a du sens.
- Prototypez petit (200 × 150), validez, exportez le pathfinding, **puis** passez à la taille finale : le redimensionnement (Ctrl+Shift+R) ajoute du canevas vide, il n'agrandit pas le dessin.

## Modifier une carte existante

Repeindre avec des valeurs existantes ne touche pas la base. Créer, renommer ou supprimer un type, une région ou une zone d'intérêt demande la base **et** le bouton du panneau Actions. Ordre de travail : valider → enregistrer → réexporter → reconstruire le pack → **régénérer le startpos** → reconstruire le pack.

*Schéma : Après une retouche, que refaire.*

Dans le schéma : Après une retouche, que refaire ? · d'abord valider et enregistrer ; puis réexporter : Repeindre · la base ne change pas · Toujours · Sols, attritions, infranchissable, restrictions · `Map Data` · `Pathfinding` · Routes, rivières, plages, ponts, emplacements et étendues · `Map Data` · `Pathfinding` · Climats · `Map Data` · Formes des régions (la couche Regions) · `Map Data` · `Borders` · `Pathfinding` · `Lookup` · Créer, renommer, supprimer · d'abord la base, puis le bouton Actions · Un type de sol · `Map Data` · `Pathfinding` · Un climat, une attrition, une zone d'intérêt · `Map Data` · Une région · `tous les exports` · Redimensionner (Ctrl+Shift+R) · d'abord la zone jouable, dans la base · Les hex neufs sont vides · `tous les exports` · Puis, toujours · Reconstruire le pack · Régénérer le startpos · Le reconstruire avec le startpos · Dans le doute, relancez tout : seuls Borders et Lookup, purement visuels, peuvent se refaire à part.

Chaque retouche fait relancer les exports de ce qu'elle touche, et toujours Map Data (la colonne d'or) ; créer, renommer ou supprimer passe d'abord par la base. Viennent ensuite, toujours, le pack, un startpos neuf et le pack reconstruit.

| Modification | Base ? | Exports à relancer |
|---|---|---|
| Repeindre les types de sol, les attritions, l'infranchissable, les restrictions | non | Pathfinding, Map Data |
| Repeindre les routes, rivières, plages, ponts, emplacements et étendues | non | Pathfinding, Map Data |
| Repeindre les climats | non | Map Data |
| Formes des régions (repeindre Regions) | non | Borders, Pathfinding, Map Data, Lookup |
| Créer, renommer ou supprimer un type de sol | oui (`campaign_ground_types`) | Pathfinding, Map Data |
| Créer, renommer ou supprimer un climat ou une attrition | oui (`climates`, `campaign_map_attritions`) | Map Data |
| Créer, renommer ou supprimer une zone d'intérêt | oui (`campaign_map_areas_of_interest`) | Map Data |
| Ajouter, renommer ou supprimer une région | oui (`regions`, `campaign_map_regions`, `region_to_province_junctions`) | tous |
| Redimensionner (Ctrl+Shift+R, avec ses marges) | zone jouable de campagne (`campaign_map_playable_areas`) | tous ; les hex neufs sont vides |

C'est ce que demande la documentation : les exports des couches changées, et toujours Map Data. Dans le doute, relancez tout : sur son Discord (20.09.2026), l'équipe de CAIME explique qu'un seul hex changé demande de presque tout retraiter ; seuls `borders.pbd` et les images de correspondance, purement visuels, peuvent se refaire seuls. Pourquoi : le wiki tw-modding tient `pathfinding.ppd` et `spd_data.esf` pour critiques dès qu'on touche aux données de carte ; et chez nous, des exports de Map Data seuls ont laissé en place un `pathfinding.ppd` de la veille. Puis régénérez le startpos.

## Exporter : ce que produit chaque export

- **Enregistrez d'abord** : Map Data et Dynamic Resources refusent de tourner sinon.
- **Map Data** passe par l'outil MapDataBuilder : le projet doit être à sa place dans `raw_data`, et **Tweak et Terry fermés** (Terry est un mode de Tweak), pour Dynamic Resources aussi. Ne comptez pas sur l'alerte de CAIME : elle cherche un programme nommé `Tweak.AssemblyKit`, alors que celui du kit de Warhammer III s'appelle `tweak.modder.x64.exe`. Succès : « Finished creating map » ; un `map_data.esf` de 10 Ko ou moins est tenu pour raté.
- **Borders** ouvre une fenêtre de choix (Land, Sea, TI, MI ; selon la documentation, TI = *theatre island*, une île détachée, et MI = *Mediterranean island*, une petite île) : gardez les cases par défaut.
- **Dynamic Resources** a fait planter MapDataBuilder sur Warhammer III dans notre atelier ; ce n'est pas résolu. Si c'est votre cas, signalez-le à l'équipe.
- **Trade Routes** : la couche n'existe pas dans Warhammer III, mais les campagnes du jeu livrent un `trade_routes.ptd`, et `--all` le produit.
- **Constat de notre atelier, sur un seul projet** : le `map_data.esf` que produit l'export Map Data (MapDataBuilder, qui s'appuie sur les programmes du kit) est en ESF `0xABCB`, alors que CA livre les siens en `0xABCA` ; chez nous, la génération du startpos plantait tant qu'il n'était pas converti. Vérifiez avec l'équipe de CAIME si votre version le fait.

*Schéma : Process : chaque export et ses fichiers.*

Dans le schéma : Process : chaque export et ses fichiers · Enregistré d'abord · Tweak et Terry fermés · Projet dans raw_data · pour Map Data et Dynamic resources · `Process` · `Map Data` · `Pathfinding data` · `Borders data` · `Dynamic resources` · `Trade Routes` · `Lookup and` · `Minimap images` · `<Assembly Kit>\working_data\campaign_maps\<carte>\` · `map_data.esf` · succès : le message · « Finished creating map » · 10 Ko ou moins : raté · `pathfinding.ppd` · la doc dit .bin par erreur · `borders.pbd` · dans display\borders\ · sa fenêtre : cases par défaut · `dynamic_resources.esf` · plantage chez nous sur Warhammer III · `trade_routes.ptd` · la couche n'existe pas dans Warhammer III · `<campagne>_lookup.bmp` · une seule image, sans minicarte ; le jeu, lui, lit .tga, .dds, .png

Chaque entrée du menu Process écrit son fichier, et tous arrivent dans le même dossier de working_data. Map Data et Dynamic resources veulent un projet enregistré, à sa place dans raw_data, avec Tweak et Terry fermés (les cadenas).

| Export | Fichier produit |
|---|---|
| Map Data | `map_data.esf` |
| Pathfinding | `pathfinding.ppd` (la page « Processing & Exporting » dit `.bin` par erreur) |
| Borders | `display\borders\borders.pbd` |
| Dynamic Resources | `dynamic_resources.esf` |
| Trade Routes | `trade_routes.ptd` (jeux qui ont cette couche ; pas Warhammer III) |
| Lookup | pour Warhammer III, une seule image `<campagne>_lookup.bmp` (lu dans le code de la v1.0.1 ; la documentation cite aussi une minicarte) ; BMP pour Warhammer I à III, Troy et Three Kingdoms, TGA ailleurs |

Tout sort dans `<Assembly Kit>\working_data\campaign_maps\<carte>\`. L'image de correspondance, `<campagne>_lookup.bmp`, sort en BMP ; le jeu, lui, lit les fichiers que nomme la ligne de la carte dans `campaign_map_playable_areas` (sur le prologue : `overlay_file` et `minimap_lookup_file` en `.tga`, `campaign_overlay_lookup` en `.dds`, `radar_file` en `.png` pour la minicarte). Le wiki tw-modding fait passer ce BMP par BOB pour obtenir le `.dds` et les `.tga` ; une correspondance périmée ne fait pas planter le jeu, mais les calques de la carte ont l'air un peu étranges.

Le menu **Tools → Export** donne aussi les frontières en SVG, la carte des tuiles pour Terry (*Baseline Tilemap image*, `tile_map.png`) et chaque couche en PNG ou en binaire ; **Tools → Import → Layer data** relit un `.hex_layer` de même taille. Le *Map Data Editor* ne sert qu'à Rome II, Attila et Thrones : il refuse Warhammer III.

## En ligne de commande

CAIME lancé sans argument ouvre l'éditeur ; avec des arguments, il travaille en console. La [documentation officielle](https://tw-campaign-map-modding-team.github.io/CampaignMapToolkit/user-guide-command-line-interface/) décrit deux commandes, plus `--help` :

```
CAIME.exe process  --map <map.hex> (--all | --map-data --dynamic-resources --pathfinding
                                   --borders --trade-routes --lookup)
CAIME.exe validate --map <map.hex> (--all | --rivers --town-slots --roads --bridges --beaches
                                   --regions --attritions --climates --ground-types
                                   --impassable --town-sprawl)
--map s'abrège en -m · codes de sortie : 0 succès · 1 arguments invalides · 2 échec
```

*Schéma : Une commande CAIME, pièce par pièce.*

Dans le schéma : Une commande, pièce par pièce · `CAIME.exe process -m <map.hex>` · `--map-data --pathfinding` · `CAIME.exe` · Le programme ; sans argument, il ouvre l'éditeur · `process` · Le verbe : process exporte, validate contrôle · `-m <map.hex>` · La carte : --map ou son abrégé -m · `--map-data --pathfinding` · Les tâches : un drapeau par export, ou --all seul · Codes de sortie · 0 succès · 1 arguments invalides · 2 échec · validate sort en 2 dès un Warning, même sur les cartes de CA : lisez le rapport. · --all inclut Dynamic Resources (plantage chez nous sur Warhammer III) : listez les tâches · `--map-data --pathfinding --trade-routes` · `--lookup` · et Borders par le menu Process

Une ligne de commande se lit par pièces : le programme, le verbe, la carte, puis les tâches. Le code de sortie dit si tout a marché ; lisez quand même le rapport.

- `--all` enchaîne Map Data → Dynamic Resources → Pathfinding → Borders → Trade Routes → Lookup ; il ne se combine pas avec des drapeaux à l'unité.
- Le chemin de l'Assembly Kit se règle d'abord dans l'éditeur (Ctrl+P). `validate` n'en a pas besoin, mais sans lui, les contrôles qui comparent la carte à la base ne voient rien.
- `validate` sort en 2 dès qu'un contrôle échoue, un seul Warning suffit, et même les cartes de CA échouent : **lisez le rapport** plutôt que d'arrêter un script sur ce code.
- La ligne de commande officielle ne fait que `process` (les exports) et `validate` ; une couche `.hex_layer` s'écrit par script mais s'importe par la fenêtre (Tools → Import → Layer data).
- **Réserve sur `--all`** (v1.0.1, non réessayé) : il inclut Dynamic Resources, qui a fait planter MapDataBuilder sur Warhammer III chez nous, et Borders, dont les options ne sont posées que par sa fenêtre : en v1.0.0, `process --borders` sans la fenêtre a échoué chez nous, et le code de la v1.0.1 n'a pas changé sur ce point. `--all` peut donc sortir en 2 : listez plutôt les tâches (`--map-data --pathfinding --trade-routes --lookup`) et faites Borders par le menu Process.

> **Notre fork, pour tout faire par script** : Pour transposer une carte entière sans ouvrir la fenêtre, notre atelier a ajouté à CAIME des commandes de plus : créer une carte, importer et exporter des couches, lire les noms, synchroniser les noms avec la base. Elles ne sont pas publiées pour l'instant ; les deux correctifs de fond, eux, sont dans la version officielle.

## Produire les couches par script

Pour une grande carte, peindre à la main ne suffit pas. Un `.hex_layer` est un fichier simple : **4 octets** (un entier little-endian : l'identifiant de la couche), puis **un octet par hex**, ligne par ligne, **depuis la ligne 0, en bas de la carte** (deux octets par hex pour les régions). Le fichier fait exactement 4 + L × H octets (4 + 2 × L × H pour les régions), sinon l'import est refusé.

*Schéma : La grille de CAIME : la ligne 0 est en bas, les colonnes impaires sont décalées vers le haut ; les hex se lisent ligne par ligne depuis le bas à gauche, et le fichier .hex_layer commence par un identifiant de 4 octets suivi d'un octet par hex.*

Dans le schéma : Ligne 0 · Ligne 1 · Ligne 2 · Ligne 3 · Colonne · index = ligne × largeur + colonne · Le fichier .hex_layer · un octet par hex (deux pour les régions) · id (4 octets) · … · Masque d'arêtes · Bit 0 = nord

La grille de CAIME : ligne 0 en bas, colonnes impaires décalées vers le haut, hex lus ligne par ligne depuis le coin bas gauche ; le fichier .hex_layer commence par 4 octets d'identifiant, puis un octet par hex. Les six bits d'un masque d'arêtes (routes, rivières, frontières) suivent les côtés, 0 au nord.

| Id | Couche | Valeur sur le disque |
|---|---|---|
| 0 | Impassable | **1 = franchissable**, 0 = infranchissable (dans le fichier ; dans l'éditeur, peindre Impassable rend l'hex infranchissable) |
| 1, 2, 6 | Trade Routes, Roads, Rivers | le masque d'arêtes (six bits) |
| 3 | Town Slots | index + 1 : 0 = aucun, 1 = principal (*Main Settlement*), 2 = *Port*, 3 = *Slot 2*… jusqu'à 12 (index 0 à 11) |
| 4, 5, 7 | Town Sprawl, Bridges, Beaches | 1 = oui ; toute autre valeur vaut « non » |
| 8 | Region Borders | le masque d'arêtes (six bits) |
| 9 | Regions | deux octets : v × 8 en little-endian, avec v = index + 1 (premier octet = (v × 8) mod 256, second = v ÷ 32) |
| 10, 11, 12 | Attritions, Climates, Ground Types | index + 1 |
| 13, 14 | Restrictions, Areas Of Interest | aucun format : ni import ni export de `.hex_layer` |

- **Masque d'arêtes** : bit 0 = nord, 1 = nord-est, 2 = sud-est, 3 = sud, 4 = sud-ouest, 5 = nord-ouest. À l'import, seule la présence compte pour les routes et les rivières (valeur > 0) : CAIME recalcule leurs masques en reliant tout voisin peint, sauf l'arête qui fermerait un triangle. Les masques des routes commerciales sont gardés tels quels ; Region Borders se recalcule depuis Regions à l'enregistrement, quand les régions ont changé.
- Les index suivent l'ordre du projet : **la terre d'abord, puis la mer** (un type de mer d'index j vaut « nombre de types de terre + j »).
- **Les index changent d'un jeu à l'autre** (13 sols de terre et 24 climats dans Warhammer I, 15 et 40 dans Warhammer III) : recalez-les **par leur nom**, jamais par leur numéro.
- Ne réimportez que les couches que vous avez vraiment changées : réimporter Roads ou Rivers fait recalculer tous leurs masques, et les liaisons de la carte d'origine sont perdues, même si le nombre d'hex ne change pas.
- L'export PNG de CAIME retourne l'image pour ressembler au jeu : une image dessinée « haut en haut » doit être retournée avant d'être encodée.

Notre méthode : une image peinte (une couleur = une valeur) et une légende → un `.hex_layer` par couche → import dans CAIME (dans la version officielle, par la fenêtre : Tools → Import → Layer data) → export PNG pour contrôler → validation → on corrige l'image, et on recommence. L'image et la légende restent la source de vérité ; le `map.hex` en est le produit.

*Schéma : De l'image au fichier .hex_layer.*

Dans le schéma : De l'image au .hex_layer · Une image, nord en haut · un pixel par hex, une couleur par valeur · N · Partir du bas : la ligne 0 · le fichier commence par la ligne du bas de l'image · `ligne 0` · Une couleur, une valeur · la légende de la couche ; ici, Roads · `route → 1` · `rien → 0` · Écrire les octets · En-tête · Un octet par hex · `02` · `00` · `00` · `00` · `01` · `01` · `00` · `00` · `00` · `00` · `…` · `2 = Roads` · ligne 0 d'abord · taille exacte : 4 + L × H octets, sinon refus · Regions : 2 octets par hex, soit 4 + 2 × L × H · Tools → Import → Layer data · Roads : seule la présence compte ; · CAIME refait les directions · Contrôler, puis valider · Tools → Export → Layer data : le PNG sort nord en haut ; comparez-le au dessin, puis lancez Validate · = · dessin · PNG · Les encodages qui piègent · `Impassable (0)` · 1 = franchissable, 0 = infranchissable · `Regions (9)` · deux octets : v × 8, avec v = index + 1 · `v = 5 →` · `28` · `00` · `v = 40 →` · `40` · `01` · `Town Slots (3)` · 0 = aucun · 1 = principal · 2 = Port · `Restrictions (13), Areas Of Interest (14)` · aucun fichier .hex_layer

Une couche par script : l'image peinte, lue depuis la ligne du bas, traduite par sa légende, écrite octet par octet derrière un en-tête de 4 octets ; puis l'import, l'export PNG pour la comparer au dessin, et la validation.

## Porter une carte d'un autre jeu Total War

C'est ce que nous avons fait avec la carte de La Saison de la Révélation (Warhammer I → Warhammer III, 400 × 440 hex, 61 régions). Les étapes propres au portage :

- Lire les couches de la carte d'origine (CAIME ouvre les cartes des mini-campagnes de Warhammer I depuis la v1.0.1) et les **recaler par nom** sur les listes du jeu d'arrivée.
- **Apparier les clés de faction sur la culture et la fin de la clé**, jamais sur le préfixe : `wh_dlc05_brt_mini_bastonne` dans Warhammer I est `wh_main_brt_bastonne` dans Warhammer III.
- Agrandir les emplacements de villes de 7 à 19 hex (16 + 3 pour un port), en disque autour de leur centre, et refaire les étendues.
- Reprendre les noms de fichiers de la ligne d'origine de `campaign_map_playable_areas` (par exemple la colonne `radar_file`, la minicarte) : une colonne qui nomme un fichier se vérifie contre le contenu réel du pack.
- Garder les fichiers de l'autre jeu **hors de toute publication** : ils appartiennent à CA.

*Schéma : De Warhammer I à Warhammer III.*

Dans le schéma : De Warhammer I à Warhammer III · CAIME 1.0.1 ouvre les cartes des mini-campagnes de Warhammer I · Warhammer I · Warhammer III · Les villes · 7 hex · port : 4 · 19 hex · port : 16 + 3 · Agrandir chaque emplacement en disque autour de son centre, puis refaire les étendues · Types de sol et climats · 13 sols de terre · 24 climats · 15 sols de terre · 40 climats · Recaler les index par nom, jamais par numéro · Les clés de faction · `wh_dlc05_brt_mini_bastonne` · `wh_main_brt_bastonne` · Même culture (brt), même fin de clé (bastonne) : jamais le préfixe · La minicarte · `radar_file` · de la ligne d'origine · Le même nom, vérifié dans le pack · Une colonne qui nomme un fichier se vérifie contre le contenu du pack · Fichiers de Warhammer I : jamais publiés, ils appartiennent à CA.

Porter une carte, c'est surtout recaler : les villes en disques de 19 hex, les types de sol et les climats par nom, les clés de faction sur la culture et la fin de la clé ; on garde les noms de fichiers de la ligne d'origine. Et rien de Warhammer I ne se publie.

Le récit complet : [le tutoriel du portage](https://bretonia.dev/blog/tutoriel-porter-une-carte-warhammer-1-dans-warhammer-3.html) et [les neuf murs du portage](https://bretonia.dev/blog/les-9-murs-du-portage-vers-warhammer-3.html).

## Les pièges qui nous ont coûté le plus

*Schéma : Où mordent les pièges.*

Dans le schéma : Où mordent les pièges · La base de données · Casse du nom différente : swatches vides · La carte en dernière ligne de campaign_map_playable_areas : Map Data plante · Aucune campagne ne cite la carte : Lookup refuse · Renommer la carte (Ctrl+Shift+N) : la base et le dossier doivent suivre · Le projet dans CAIME · Le jeu du projet est définitif · Reload (Ctrl+R) jette ce qui n'est pas enregistré · Ctrl+X ferme le projet · L'image de fond n'est jamais enregistrée · Redimensionner n'agrandit pas le dessin · Les couches, peintes ou par script · Un anneau sans extrémité : l'export tourne sans fin · Un .hex_layer part de la ligne 0, en bas · Impassable = 1 veut dire franchissable · Les index se recalent par nom, jamais par numéro · Process · Tweak ou Terry ouverts : fermez les deux · Fichiers d'appui absents : Map Data échoue · Dynamic Resources : plantage chez nous · Le Map Data Editor refuse Warhammer III · Le startpos · Chaque export demande un nouveau startpos · Le map_data.esf de l'export en ESF 0xABCB : génération plantée, sur un projet · La documentation se contredit par endroits : croyez le validateur et le disque.

Les principaux pièges du guide, à l'étape où ils mordent : la base, le projet, les couches, Process, le startpos. Le détail, et le pourquoi, dans la liste qui suit.

- **Reload (Ctrl+R) jette ce qui n'est pas enregistré** : Ctrl+S d'abord, toujours.
- **Le jeu du projet est définitif** : un projet créé pour le mauvais jeu se refait (voir la FAQ).
- **Les fichiers d'appui absents** : Map Data ou Dynamic Resources échouent. Les copier depuis le prologue.
- **Un anneau sans extrémité** de routes ou de rivières : l'export tourne sans fin (la documentation cite aussi le triangle).
- **Impassable = 1 veut dire franchissable**, dans un `.hex_layer` : l'inverse de l'intuition.
- **La ligne 0 en bas** : une carte dessinée « haut en haut » se retrouve à l'envers.
- **Tweak ou Terry ouvert** pendant Map Data ou Dynamic Resources : fermez les deux. L'alerte de CAIME (« Please close Tweak.AssemblyKit ») cherche un programme qui n'est pas celui du kit de Warhammer III (`tweak.modder.x64.exe`) : ne comptez pas sur elle.
- **Ctrl+X ferme le projet** : ce n'est pas « couper ». S'il reste des changements non enregistrés, une question vous rattrape : répondez No.
- **Ctrl+Shift+N renomme la carte**, mais la base (`campaign_map_regions`, `campaigns`, `campaign_map_areas_of_interest`) et le dossier sous `raw_data` doivent suivre le nouveau nom.
- **Aucune campagne ne cite la carte** : l'export Lookup refuse.
- **La ligne de la carte en dernière position** de `campaign_map_playable_areas` : Map Data plante.
- **Les index de couches changent** quand la base ou le jeu change : les recaler par nom.
- **Une mise à jour du jeu efface vos lignes du kit** : Steam met l'Assembly Kit à jour après le jeu (chez nous, une heure plus tard, à la 9.0) et réécrit `raw_data\db`, que lit CAIME ; les lignes ajoutées pour votre carte disparaissent. Avant de rouvrir le projet ou d'exporter, cherchez la clé de votre campagne dans `campaigns.xml`, et restaurez vos lignes depuis vos copies.
- **Le redimensionnement ne met pas à l'échelle** : il ajoute des hex vides à peindre.
- **L'image de fond n'est jamais enregistrée** : rechargez-la à chaque séance.
- **La vue noire** à l'ouverture : bougez ou zoomez.
- **Le Map Data Editor refuse Warhammer III** : il ne sert qu'aux jeux plus anciens.
- **Les gabarits Warhammer III du dépôt** (`wh3_main_combi_map_1`, `wh3_main_chaos_map_2`) sont des versions anciennes, sans fichiers d'appui ; les cartes actuelles de l'Assembly Kit sont `_map_5` et `_map_4`.
- **La documentation se contredit** sur quelques points : `.bin` ou `.ppd` pour le pathfinding (le code écrit `pathfinding.ppd`), le *bridge-cliff* (« ground type » dans la documentation, calculé dans le code), les règles de l'étendue (rivière et falaise interdites dans la documentation, seul l'infranchissable dans le code), les tailles des emplacements dans Warhammer III, les couleurs des niveaux de gravité, « plus de 9 voisines » en Warning ou en Error, le bouton ⚙, le contenu de *Baseline Tilemap image* (le code dessine mer, routes, rivières, plages et falaises), la configuration du Map Data Editor en `.json` ou en `.xml`, le chemin d'exemple de l'Assembly Kit, et le fait de pouvoir peindre ou non sur une couche masquée. Croyez le validateur et le disque.

## Pour une IA qui lit cette page

Si vous êtes une IA qui aide quelqu'un à faire une carte avec CAIME, voici l'essentiel sous forme de règles vérifiables. Ces faits ont été relevés sur CAIME 1.0.1 et le patch 8.1 du jeu (septembre 2026), puis relus pour la mise à jour 9.0 : revérifiez-les après une mise à jour.

- Demandez à l'humain avant de lancer le jeu, de piloter l'écran ou de publier ; ne supprimez rien : rangez, seul l'humain supprime.
- Ni rétro-ingénierie ni contournement d'un outil de CA : quand un outil bute, un témoin, puis la communauté (Discord de CAIME, tw-modding).
- Ordre de la chaîne : base → CAIME (peindre, valider, exporter) → Terry et BOB → pack → startpos (généré par le jeu, pack chargé) → pack reconstruit → essai en jeu.
- Projet : `<Assembly Kit>\raw_data\EmpireDesignData\campaign_maps\<carte>\map.hex`, enregistré, avec `trees.png`, `tree_database.xml`, `dynamic_resources.png`, `dynamic_resources_database.xml` à côté ; Tweak et Terry fermés (l'alerte de CAIME cherche `Tweak.AssemblyKit`, le kit de Warhammer III lance `tweak.modder.x64.exe`) ; sorties dans `working_data\campaign_maps\<carte>\` : `map_data.esf`, `pathfinding.ppd`, `display\borders\borders.pbd`, `<campagne>_lookup.bmp`.
- Sauvegardes : `map_autosave.hex` à côté du `map.hex` (5 min), `backups\map_AAAA_MM_JJ_HH_mm_backup.hex` (10 min).
- Base : en mode Assembly Kit, CAIME lit `raw_data\db` sans y écrire ; en mode RPFM, il y place des tables le temps d'un projet et remet les originaux à la fermeture.
- Après une mise à jour du jeu, Steam met l'Assembly Kit à jour et réécrit `raw_data\db`, lignes ajoutées perdues : vérifiez la clé de la campagne dans `campaigns.xml` avant de rouvrir ou d'exporter, et restaurez depuis les copies.
- Ligne de commande officielle : `CAIME.exe process|validate --map <map.hex> (--all | drapeaux)` ; codes 0, 1, 2 ; le code 2 de `validate` ne suffit pas à conclure (un seul Warning le déclenche) : lire le rapport. `--all` inclut Dynamic Resources (plantage de MapDataBuilder sur Warhammer III chez nous) ; `process --borders` sans la fenêtre a échoué en v1.0.0 et le code n'a pas changé en v1.0.1 : lister les tâches. Une couche `.hex_layer` s'importe par la fenêtre (Tools → Import → Layer data).
- `.hex_layer` : 4 octets d'identifiant (little-endian, 0 à 12), puis un octet par hex depuis la ligne 0 en bas (régions : deux octets, v × 8 little-endian, v = index + 1) ; taille exacte 4 + L × H (4 + 2 × L × H pour les régions) ; masques d'arêtes : bits 0 à 5 = N, NE, SE, S, SO, NO ; Impassable : 1 = franchissable ; Town Slots : 0 = aucun, 1 = principal, 2 = Port, 3 = Slot 2… jusqu'à 12 ; Restrictions (13) et Areas Of Interest (14) : aucun format d'import ni d'export.
- Import : Roads et Rivers ne gardent que la présence (valeur > 0) ; CAIME relie tout voisin peint, sauf l'arête qui fermerait un triangle ; les masques de Trade Routes sont gardés tels quels ; Region Borders se recalcule depuis Regions à l'enregistrement, quand les régions ont changé.
- *Baseline Tilemap image* : une image de 2 × L par 2 × H + 1 pixels (mer, routes, rivières, plages, falaises), la taille du `tile_map.png` du projet Terry.
- Contrôles, en conditions : chaque hex a région, sol et climat ; `is_sea` de la région = mer ou terre du sol ; région de terre d'un seul tenant ; emplacement principal = disque parfait de 19 hex, son centre = la position de la ville ; ville portuaire = 16 hex de terre en principal + 3 hex consécutifs du bord, côté mer, en Port (un en mer) ; étendue sur les 19 hex, jamais sur l'infranchissable ; terrain à risque (infranchissable, rivière, côte) au contact ou à 3 hex au moins, une seule zone au contact ; rivière sans arête vers la mer ni hors de la carte ; pont sur des hex de mer entre deux rives distinctes (CAIME calcule le *bridge-cliff*) ; aucun anneau sans extrémité dans Roads, Rivers, Trade Routes.
- Sévérités (v1.0.1) : Error = désaccord base/carte, index invalide, pont mal posé, emplacement sur l'infranchissable, règles de l'étendue ; Warning = hex sans région, sol ou climat, désaccord terre/mer, région morcelée ou vide, rivières, routes, plages, taille d'emplacement. Avant d'exporter : zéro Error de concordance, d'index et de pont ; une Error d'étendue sur une ville en col existe aussi sur la carte de CA (cinq villes) : la juger en jeu. Après chaque export : un nouveau startpos.
- `map_data.esf` : chez nous, l'export sortait en ESF `0xABCB` alors que CA livre les siens en `0xABCA`, et la génération du startpos plantait tant qu'il n'était pas converti (un seul projet ; à vérifier avec l'équipe de CAIME).
- Les index de sols, climats et attritions se recalent par nom, jamais par numéro.
- Droits : « CAIME : code sous licence non commerciale. Fichiers qu'il produit : le README demande l'accord d'un fondateur avant de les donner, l'EULA 1.1 permet de les publier sans les monnayer ; dans le doute, demandez à l'équipe avant de publier ; rien de commercial. »

## Sources et liens

- [Documentation de CAIME](https://tw-campaign-map-modding-team.github.io/CampaignMapToolkit/) (douze guides, dont [la ligne de commande](https://tw-campaign-map-modding-team.github.io/CampaignMapToolkit/user-guide-command-line-interface/)), [le dépôt](https://github.com/TW-Campaign-Map-Modding-Team/CampaignMapToolkit) (et son code source, branche `main`, qui tranche quand la documentation se contredit) et [ses versions](https://github.com/TW-Campaign-Map-Modding-Team/CampaignMapToolkit/releases).
- [Campaign Map Making for Warhammer III](https://tw-modding.com/wiki/Tutorial:Campaign_Map_Making_for_Warhammer_III) et [Startpos](https://tw-modding.com/wiki/Startpos) (wiki tw-modding).
- [Manuel de RPFM](https://frodo45127.github.io/rpfm/manual/) et [RPFM For Dummies](https://tw-modding.com/wiki/Tutorial:RPFM_For_Dummies).
- [Terry, introduction](https://wiki.totalwar.com/w/TWW_Assembly_Kit_Terry_Intro) et [Rules.bob](https://wiki.totalwar.com/w/Rules.bob_Documentation.html) (wiki de Creative Assembly).
- Nos autres guides : [les outils](https://bretonia.dev/atelier/outils/), [RPFM](https://bretonia.dev/atelier/rpfm/), [Terry](https://bretonia.dev/atelier/terry/), [BOB](https://bretonia.dev/atelier/bob/) et [modder avec une IA](https://bretonia.dev/atelier/ia/).

## Questions fréquentes

### Mes swatches sont vides après la création du projet : pourquoi ?

CAIME ne trouve pas la carte dans la base. Vérifiez le chemin de l'Assembly Kit du bon jeu (Ctrl+P), et que le nom de carte de `campaign_map_regions` est identique au vôtre, majuscules comprises. Puis enregistrez et faites File → Reload.

### CAIME ouvre tout en lecture seule : pourquoi ?

Sur tout Windows dont le séparateur décimal est la virgule (français, allemand, espagnol, italien…), les versions antérieures au correctif de culture ne chargent pas la base et ouvrent tout en lecture seule. Le correctif est dans la v1.0.1.

### La carte s'ouvre toute noire : que faire ?

C'est un bogue connu : bougez ou zoomez la vue.

### L'export Map Data échoue : que vérifier ?

Que le projet est enregistré à sa place (`raw_data\EmpireDesignData\campaign_maps\<carte>\map.hex`), que Tweak et Terry sont fermés, que les quatre fichiers d'appui sont à côté du `map.hex`, que la ligne de la carte n'est pas la dernière de `campaign_map_playable_areas`, et que l'outil MapDataBuilder est installé (avec l'installeur officiel : `%LOCALAPPDATA%\CampaignMapToolkit\Tools\Release\MapDataBuilder.x64.exe`).

### L'export tourne sans fin : pourquoi ?

Le plus souvent, un anneau : un circuit de routes, de rivières ou de routes commerciales sans aucune extrémité. Coupez-le en gommant un hex. La documentation cite aussi le triangle de trois hex voisins ; pour les routes et les rivières, CAIME en retire déjà une arête en calculant leurs masques.

### Faut-il tout réexporter après une retouche ?

La documentation demande les exports des couches modifiées, et toujours Map Data. Dans le doute, relancez tout : sur son Discord (20.09.2026), l'équipe de CAIME explique qu'un seul hex changé demande de presque tout retraiter. Puis régénérez le startpos.

### Je me suis trompé de jeu en créant le projet : que faire ?

Le jeu est enregistré dans le `map.hex` et ne se change plus. Créez un projet neuf de même taille, exportez chaque couche en binaire (Tools → Export → Layer data), puis importez-les dans le nouveau projet (Tools → Import → Layer data).

### Où sont mes sauvegardes automatiques ?

`map_autosave.hex` (toutes les 5 minutes) est à côté du `map.hex` ; le dossier `backups` reçoit toutes les 10 minutes une copie nommée `map_AAAA_MM_JJ_HH_mm_backup.hex`. Ouvrez-les par File → Open, puis Save as. Pendant la séance, Ctrl+Z remonte sans limite.

### Pourquoi mon pont est-il refusé ?

Un pont se peint sur des hex de mer, d'une rive à l'autre. Le validateur (v1.0.1) lève trois Error : un hex Bridges sur la terre, un hex Bridges infranchissable, un pont qui ne relie pas deux rives distinctes. Les hex de rive, CAIME les calcule. Un tracé Rivers est sur la terre : il ne se ponte pas.

### Quelle forme donner à l'emplacement d'une ville, et à celui d'un port ?

Un disque parfait de 19 hex autour du centre de la ville (un clic de brosse de taille 3) : son centre devient la position de la ville. Une ville portuaire garde le même disque, partagé : 16 hex de terre en Main Settlement et 3 hex consécutifs du bord, côté mer, en Port (chez CA, deux sur la terre et un sur la mer). L'étendue couvre les 19 hex. Le validateur ne fait que compter 19 ou 16 ; sans le disque, la ville n'a pas de position et l'IA de campagne plante.

### Je peins et rien n'apparaît : pourquoi ?

Vérifiez la couche active (le bouton rond), la couche visible (la case), le swatch choisi, et que la barre d'outils n'est pas grisée (aucun projet ouvert).

### Des centaines d'avertissements sur une carte de CA : est-ce grave ?

Non : la carte de Warhammer III de CA en produit des centaines et s'exporte quand même ; elle a même cinq Error d'étendue, sur des villes en col. Corrigez toute Error de concordance base/carte, d'index et de pont, lisez les Warning ; les Info sont des remarques.

### Quelle taille maximale pour une carte ?

Largeur paire ; la documentation avertit au-delà de 731 520 hex (lenteur), et l'équipe de CAIME cite sur son Discord (20.09.2026) un plafond de 2 048 hex par dimension, que nous n'avons pas trouvé dans le code. La grande carte de Warhammer III fait 1440 × 970.

### Peut-on porter une carte de Warhammer I dans Warhammer III ?

Oui : c'est ce que nous avons fait avec La Saison de la Révélation. Depuis la v1.0.1, CAIME ouvre les cartes des mini-campagnes de Warhammer I ; notre journal raconte la méthode pas à pas.

### Peut-on partager les fichiers produits par CAIME ?

CAIME : code sous licence non commerciale. Fichiers qu'il produit : le README demande l'accord d'un fondateur avant de les donner, l'EULA 1.1 permet de les publier sans les monnayer ; dans le doute, demandez à l'équipe avant de publier ; rien de commercial.
