Atelier des moddeurs · guide · 72 min de lecture
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.
Relu le 25 septembre 2026, mise à jour 9.0. Vérifié sur le code et la documentation de CAIME 1.0.1 (validateurs inchangés en 1.1.0), l'Assembly Kit au patch 8.1. Les changements de la 9.0 qui touchent notre chantier sont ajoutés ; le reste n'a pas été revérifié. Corrigé le 5 octobre 2026 : faits prouvés depuis sur le jeu en 9.0.2, et versions parues depuis (CAIME 1.1.0, RPFM 5.1.1). Corrections communautaires du 26 septembre 2026. Dans le doute, vérifiez, et dites-le-nous.
Ce que fait CAIME§
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.
La moitié logique
CAIME : types de sol, régions (frontières en rouge), route, rivière, emplacements de villes (schématiques : une ville de Warhammer III couvre 19 hex). C'est ce que le jeu calcule.
La moitié visuelle
Terry et BOB : relief, côte, forêts, eau, décors. C'est ce que le joueur voit. Les deux doivent décrire la même terre.
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 et le guide BOB |
| RPFM | Rusted PackFile Manager, l'outil communautaire qui ouvre et fabrique les packs : le guide 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 |
- 1Hexune case à sommet plat ; les colonnes impaires sont décalées vers le haut ; la case (0, 0) est en bas à gauche.
- 2Région de merla mer est une région comme une autre, avec is_sea = 1 dans la table regions.
- 3Région et frontièrechaque hex a sa région ; la couche Region Borders trace la frontière (Auto-generate).
- 4Falaiseun 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.
- 5Plagepeinte (Beaches), sur la terre côtière seulement : les débarquements.
- 6Pontpeint (Bridges) sur un hex de mer, d'une rive à l'autre ; la route s'arrête aux deux rives.
- 7bridge-cliffchaque hex de terre qui touche le pont (hachures) ; CAIME le calcule : rien à peindre.
- 8Emplacement (slot)la ville : un disque de 19 hex ; pour un port, 16 hex principaux (trait brun) et 3 hex de Port (trait bleu), deux en mer et un sur la plage, comme chez CA.
- 9Étendue (sprawl)la surface de la ville, en ocre : les 19 hex.
- 10Masque d'arêtessix 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).
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), et l'on reconstruit le pack avec le startpos.
Et le détail de chaque étape, sous les numéros de la marche, avec ce qu'elle produit :
- 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… - II–III · CAIME, les couches
Les couches peintes ou importées, puis validées.
map.hex - 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 - V–VI · Terry et BOB, en même temps
Relief, textures, arbres, côtes et eau : le terrain que lit le jeu. Attention : tant que la base du jeu (celle des packs de CA) ne connaît pas la carte, BOB ne lance que 6 actions au lieu d'une douzaine, sans relief ni textures et sans message : voir le guide BOB.
full_height_map.dds,tile_list.bin,global_props.bin… - VII · Le pack
RPFM rassemble dans le
.packdu mod les exports, le terrain, les tables et les scripts : la génération du startpos a besoin de ce pack.mon_mod.pack - 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, à condition que le dossier
<jeu>\existe avant la génération (sinon nidata\ campaign_maps\ <carte>\ hlp_data.esfnispd_data.esf, sans message). On reconstruit ensuite le pack avec ces fichiers : dansdata, 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 - 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).
Sources : le dépôt de CAIME (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§
- Installez l'Assembly Kit du jeu depuis Steam (Bibliothèque → Outils). Pour Warhammer III, avec Steam à son emplacement par défaut, il s'installe dans
C:\.Program Files (x86)\ Steam\ steamapps\ common\ Total War WARHAMMER III\ assembly_kit\ - Téléchargez CAIME sur la page des versions : l'installeur s'appelle
CampaignMapToolkit-win-Setup.exe. Prenez la dernière version : la v1.1.0 du 29 septembre 2026 livre MapDataBuilder et les gabarits dans l'installeur, remettile_map.pngnord en haut, et rend l'opacité et l'ordre des couches réglables ; elle ne touche ni aux validateurs ni aux exports Map Data, Pathfinding et Borders. La v1.0.1 du 23 septembre 2026 avait apporté deux correctifs : 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. - 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.
- Contrôle après installation : vérifiez que l'outil qui fait l'export Map Data,
MapDataBuilder.x64.exe, existe. Depuis la v1.1.0, il est livré à côté deCAIME.exe, dansTools\(avec l'installeur officiel :Release\ %LOCALAPPDATA%\) ; CAIME cherche d'abord là, puis à l'ancien chemin,CampaignMapToolkit\ current\ Tools\ Release\ MapDataBuilder.x64.exe Tools\sous le dossier parent de celui de son exécutable. Avant la 1.1.0, l'installeur ne le livrait pas, ni le dossier des gabarits (Release\ Templates). S'il manque, demandez d'abord à l'équipe (Discord, étape 8) : compiler le dépôt demande Visual Studio, avec le C# et le C++. - Settings → Preferences : choisissez d'abord le jeu (Base game), puis Browse pour l'Assembly Kit de ce jeu. Le bon dossier est
assembly_kit: il contientbinaries,raw_dataetworking_data. Un chemin par jeu. Passez par le menu : il affiche Ctrl+P, mais d'après le code de la v1.0.1, ce raccourci n'est relié à rien. - Toujours dans les préférences : Auto-save écrit
map_autosave.hexà côté dumap.hextoutes les 5 minutes ; Auto-backup range toutes les 10 minutesmap_AAAA_MM_JJ_HH_mm_backup.hexdansbackups\(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 - 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 (par exemple 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, projet ouvert, et CAIME les note danscaime_metadata.json, à côté dumap.hex. - Lisez la documentation : douze guides détaillés, de la prise en main aux exports (aussi par Help → User Guides). Pour une question, le Discord de l'équipe (Campaign Map Modding Team), aussi par Help → Discord support server.
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. Si CAIME est tué pendant une séance RPFM, il remet les originaux au lancement suivant (v1.0.1 : RpfmRecoveryJournal).
La fenêtre et les outils§
Sans projet ouvert, presque tout est grisé. Une fois une carte ouverte, la fenêtre compte neuf zones :
- 1Les menusFile, Edit, Process, Tools, Settings, Help. Tout est en anglais.
- 2Les réglages rapidesavec 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.
- 3Les outilsM 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.
- 4Le canevasla carte en hex ; le cercle de la brosse. Molette : zoom ; clic du milieu : déplacer.
- 5La minicartele cadre rouge montre la vue ; un clic y déplace la vue.
- 6Les swatchesla valeur à peindre, dans une liste déroulante : les clés de la base pour la couche active (ici plains).
- 7Les actionscelles de la couche active : Create, Rename, Remove (après la base), Cleanup… ; Align, Plug Holes ou Auto-generate selon la couche ; Validate.
- 8Les couchesla case rend une couche visible ; le bouton rond la rend active. Ground Types est en bas, active à l'ouverture.
- 9La barre d'étatle dernier message (un clic ouvre le Logger), X = colonne et Y = ligne sous la souris.
La recette pour peindre§
- 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).
- Dans Swatches, choisissez la valeur : un type de sol, une région, un climat…
- Dans la barre d'outils, choisissez l'outil (tableau ci-dessous), réglez la taille de la brosse, et peignez.
- Pour vérifier : la barre d'état donne X (colonne) et Y (ligne) sous la souris ; Ctrl+Z annule un geste de souris à la fois, jusqu'à 1 000 gestes, moins après de grands remplissages (v1.0.1 : l'historique garde au plus 4 millions d'hex modifiés).
| 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 propose toutes les couches du panneau, mais seules Ground Types, Climates, Attritions, Regions, Impassable, Roads et Restrictions servent de bordure (Trade Routes aussi, dans les jeux qui l'ont) |
| 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 |
Les raccourcis à connaître§
| Raccourci | Action |
|---|---|
| Ctrl+O · Ctrl+S · Ctrl+Shift+S | 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 (1 000 pas au plus) |
| 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 | Logger · Border Editor · Map Data Editor |
Les menus affichent aussi Ctrl+N (Create new map) et Ctrl+P (Preferences), mais d'après le code de la v1.0.1, ces deux raccourcis ne sont reliés à rien : passez par File → Create new map et Settings → 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§
- Concevoir. Croquis, liste des régions et des provinces, villes, ports, passages obligés (voir plus bas). Largeur paire : CAIME refuse une largeur impaire (« Map's Width needs to be even! »), à la création comme au redimensionnement. La documentation propose 1016 × 720 et CAIME 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 : CAIME le met en minuscules, remplace les espaces par des soulignés et retire la ponctuation (! @ # - . , etc.) sans prévenir. Écrivez-le donc d'emblée en minuscules, chiffres et soulignés, comme les cartes de CA (
wh3_main_prologue_map), et déclarez exactement ce nom dans la base : la casse compte. - 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, et, pas à pas dans Dave, la partie « Setting Up the Database in Dave » du guide officiel Creating a New Map.
- Créer le projet : File → Create new map (le menu affiche Ctrl+N, relié à rien dans la v1.0.1 d'après le code : passez par le menu) ; 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\; avec l'installeur officiel,<carte>\ %LOCALAPPDATA%\. Si un projet de ce nom y existe déjà, CAIME demande « Overwrite? » : Yes supprime tout son dossier. 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).CampaignMapToolkit\ Projects\ <carte>\ - Le mettre à sa place : aussitôt, File → Save as… (Ctrl+Shift+S) vers
<Assembly Kit>\, puis rouvrez cette copie. Map Data et Dynamic Resources ne travaillent qu'à cet endroit (sinon : « Map Data Process denied »).raw_data\ EmpireDesignData\ campaign_maps\ <carte>\ map.hex
Remplir, valider, exporter§
- 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 pourtrees.png, 2,54 × 2,40 pourdynamic_resources.png.trees.pngsert aussi aux arbres de BOB. Contrôle : les quatre fichiers sont à côté dumap.hex, sous ces noms exacts. - 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é.
- 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_seade la région, et l'hex). - 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 --allles 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. - Exporter (Process) : Map Data, Dynamic Resources, Pathfinding, Borders, Lookup. Enregistrez avant ; Tweak et Terry fermés. Succès de Map Data : dans le Logger, « MapDataBuilder exited with code 0 (Success) » ; la documentation cite aussi « Finished creating map », qui n'est écrit ni par CAIME ni par MapDataBuilder, mais vient de la sortie du kit. Contrôle : dans
<Assembly Kit>\, datés du jour,working_data\ campaign_maps\ <carte>\ map_data.esf(CAIME tient pour raté un fichier de 10 Ko ou moins),pathfinding.ppd,display\etborders\ borders.pbd <campagne>_lookup.bmp. Détail : la section « Exporter ». - 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 et BOB. Depuis la v1.1.0, l'image sort nord en haut ; jusqu'à la 1.0.1, elle sort à l'envers : retournez-la verticalement, sans autre retouche. - 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. Reconstruisez ensuite le pack avec le startpos (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\).
| 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 »). Copiez une ligne de campagne qui marche, champ par champ : mask vide, comme toutes les campagnes du kit ; un masque non vide fait planter la génération du startpos (9.0.2) | campaign_name = ma_campagne ; map_name = ma_carte ; mask vide |
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) ; l'aperçu de l'écran de sélection a le rapport du monde, hauteur 600 (CA : 750 × 600), sinon la carte y paraît déformée | mapname = ma_carte ; campaign_key = ma_campagne ; minx, maxx, miny, maxy ; radar_file (la minicarte) ; preview_width × preview_height ; 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 |
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 ; la documentation officielle les décrit une à une (Creating a New Map, partie Dave). Voici, telle quelle, une ligne de campaign_map_regions.xml du kit de Warhammer III (lue le 25.09.2026, patch 9.0) : la région Tong-Hall rattachée à la carte du prologue. Les attributs record_… sont ceux que Dave écrit ; record_key y colle les deux clés.
<campaign_map_regions record_uuid="{4ba484b4-177d-4524-833f-fc5907111d3a}"
record_timestamp="1552390918186"
record_key="wh3_main_prologue_mapwh3_prologue_region_broken_lands_tong_hall">
<campaign_map>wh3_main_prologue_map</campaign_map>
<region>wh3_prologue_region_broken_lands_tong_hall</region>
</campaign_map_regions>Les tables globales (campaign_ground_types, climates, campaign_map_attritions) sont déjà remplies. Les régions sont indexées dans l'ordre du projet (map.hex : la terre, puis la mer), qui n'a pas à suivre regions.xml : seule la liste des clés doit concorder. Pour les sols, les climats et les attritions, en revanche, l'ordre du projet doit être celui de la base (sinon, Error « name mismatch at index »). Un script qui encode un .hex_layer de régions dans l'ordre de regions.xml sort donc faux. 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.
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.
- 1Ground Typesle type de sol : plaine, forêt, montagne, mer
- 2Climatesle climat : obligatoire sur chaque hex
- 3Regionsla région de chaque hex, et ses frontières
- 4Riversles rivières, avec leurs directions
- 5Town Sprawl · Town Slotsl'emplacement d'une ville (19 hex dans Warhammer III ; un port : 16 + 3) et son étendue
- 6Roads · Impassableles routes, avec leurs directions ; ce qui ne se franchit pas
L'aiguille traverse un même hex : sa fiche
- Ground Types
plains- Climates
emp_lowlands, par exemple- Regions
ma_region- Rivers
- non
- Town Slots
- non
- Roads
- oui, deux côtés
- Impassable
- non
Les couches de Warhammer III, avec les noms que l'éditeur affiche, dans l'ordre par défaut du panneau (celle du haut se dessine par-dessus). Depuis la v1.1.0, cet ordre se change (glisser, ou menu ; Reset order le rétablit) et chaque couche a une opacité de 0 à 100 % : un réglage d'affichage, qui ne change rien aux exports et n'est pas enregistré dans le projet.
| 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) ; anneaux permis |
| 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, à refaire (puis Ctrl+S) après toute retouche des régions : rien ne la recalcule seul |
| 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 classent chaque message en trois niveaux (code de la v1.0.1).
- Error, à corriger avant d'exporter : désaccord base/carte (régions, sols, climats, attritions), index invalide, pont mal posé, emplacement sur l'infranchissable, règles de l'étendue d'une ville. Seule exception : une Error d'étendue sur une ville en col, que la carte de CA a aussi (cinq villes) ; jugez-la en jeu.
- Warning, à lire : 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 : une remarque.
CAIME n'empêche pas d'exporter avec des Error (la documentation dit pourtant : « Fix all errors before processing ») : lisez le Logger (Ctrl+L). Repère : la carte de Warhammer III de CA remonte des centaines de Warning, et s'exporte.
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 frontières ne se recalculent jamais seules. Après toute retouche des formes de régions (pinceau ou import), cliquez Auto-generate sur la couche Region Borders, puis enregistrez, avant Pathfinding : ni l'enregistrement, ni l'import, ni l'export Pathfinding ne recalculent les frontières (Pathfinding lit la couche telle quelle). Contrôle :
validate --regionssans Info « 0 passable region edge hexes » sur une région qui a des voisines de terre. Chez nous, une grille aux régions importées par script avait 0 hex de frontière. - Aucun contrôle ne vérifie que la mer d'un port rejoint les autres mers (aucun des onze validateurs ne parcourt la mer). Après tout changement d'infranchissable en mer ou tout agrandissement de carte, contrôlez vous-même la mer seule, port par port. Chez nous, 434 hex infranchissables, l'ancienne lisière d'une carte agrandie, fermaient un golfe : trois ports donnaient sur une mer close, sans aucun message.
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 de l'intérieur garde ses 19 hex, sans hex de Port. Une ville portuaire garde le même disque, partagé : 16 hex de terre en Main Settlement et exactement 3 hex de Port, consécutifs sur l'anneau 2 (le bord du disque), côté mer : deux en mer et un sur la plage, comme chez CA (mesure sur 290 ports de ses cartes). Les hex de Port en mer gardent la région de mer, pas celle de la ville. L'étendue couvre les 19 hex. MapDataBuilder 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.
- 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.
- Une embouchure se marque Beach ET River. À l'export de
tile_map.png(Baseline Tilemap image), tout hex de terre voisin de la mer qui n'est pas une plage devient une falaise, rivière comprise ; seul un hex à la fois rivière et plage donne « river ending at beach » (peint en plage pour Warhammer III). Sinon, la rivière finit sur une falaise et n'arrive pas à la mer (code de CAIME,BaselineTilemapExporter.cs). - Une plage ne va que sur une terre basse. Chez CA, une plage est posée sur une terre basse ; sur une terre haute, le profil de plage fait une pente raide (une ombre sombre sur l'aperçu, une digue). Règle de l'atelier : une plage dont la terre monte au-delà de 0,8 u dans les 3 hex vers l'intérieur redevient falaise, sauf les plages de port et les embouchures, puis on écarte les suites de moins de 3 cases (sur Expanded : 909 plages ramenées à 621,
validatesans erreur). - 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.
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.
- Relier les villes d'une province, puis les provinces entre elles. Les anneaux et les triangles de routes, de rivières et de routes commerciales sont permis ; tracez les routes en fils, avec peu de carrefours, comme CA : un réseau de routes très maillé (des centaines de carrefours) peut bloquer l'export Pathfinding des dizaines de minutes alors que la validation passe (le validateur n'émet qu'une Info par carrefour à trois branches). Chez nous, des routes reflétées comme une image (331 carrefours à trois branches, 55 à quatre) : 22 minutes sans rien écrire ; refaites en fils (20 carrefours) : 4 secondes. Comptez les carrefours et bornez l'export dans le temps ; un miroir de carte se fait dans le repère des hex, jamais dans celui de l'image.
- Des régions compactes et de taille comparable ; des ports là où le commerce a du sens.
- Une carte accessible : chaque partie doit être proche de l'action. Un coin qui n'est pas littéralement coupé du reste mais loin de tout ce qui se passe, c'est ennuyeux à jouer.
- Des colonies à plus de 5 hex l'une de l'autre : à moins de 5 hex, la garnison de l'une renforce les sièges de l'autre, une mécanique de jeu involontaire.
- 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.
Les noms des couches sont des règles de mouvement, pas du décor§
Les noms des couches de la grille (rivière, pont, route…) n'ont pas à correspondre à ce que le joueur voit. Pour le jeu, ce sont des règles de mouvement, que vous pouvez habiller comme vous voulez :
- Rivière : un hex où une armée perd tout son mouvement en le traversant. Côté visuel, il peut figurer une porte, un passage ou un ascenseur, ou n'avoir aucun indice visuel : vous pouvez vouloir simplement annuler le mouvement des armées pour une raison d'équilibrage, ou pour guider l'IA (le mod de campagne The Old World fait quelque chose de ce genre avec le Royaume de Slaanesh, pour qu'on ne puisse pas s'en servir comme d'un raccourci).
- Pont : pas forcément un pont. L'astuce du pont en est un autre exemple : elle déplace une armée très loin en ne dépensant presque rien de son mouvement.
- Route : les hex de route coûtent très peu de mouvement et correspondent d'ordinaire aux routes visibles en jeu, mais ce n'est pas obligatoire : vous pourriez poser des voies ferrées plutôt que les tuiles de route habituelles.
La tile map visuelle ne se peint pas à la main non plus : l'export Baseline Tilemap image de CAIME dessine les routes et les côtes d'après la grille, pour tous les jeux pris en charge (voir les sections sur l'export et le guide Terry).
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.
| 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 ou importer Regions) | non | d'abord Auto-generate de Region Borders et Ctrl+S ; puis 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'appelletweak.modder.x64.exe. Succès : « MapDataBuilder exited with code 0 (Success) » dans le Logger ; unmap_data.esfde 10 Ko ou moins est tenu pour raté. - Quand Map Data échoue (v1.0.1) : le Logger donne le code de sortie de MapDataBuilder et son sens. Ce code additionne des drapeaux : 1 = arguments manquants, 2 = la DLL du kit (ToolDataBuilder) ne se charge pas (chemin de l'Assembly Kit, dossier
binaries), 4, 8 et 16 = une fonction absente de cette DLL, 32 = l'export du kit a échoué (lemap.hexou les régions de la carte), 64 = même chose pour Dynamic Resources, 128 = la DLL ne se libère pas. CAIME y recopie aussi les journaux de BOB, lus dans%APPDATA%\(The Creative Assembly\ <jeu>\ console_spools\ Command.txt,Errors and assertions (in order).txt). Au-delà de 30 minutes, MapDataBuilder est arrêté. - 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--allle produit.
| Export | Fichier produit |
|---|---|
| Map Data | map_data.esf |
| Pathfinding | pathfinding.ppd (la page « Processing & Exporting » dit .bin par erreur) |
| Borders | display\ |
| 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>\. 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 et les routes en SVG (SVG Borders, SVG Roads), 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. Tools → Shader Resolution Corrector ne s'active que pour Three Kingdoms.
Pour aller plus loin : chaque ouverture de projet crée aussi working_data\. Une version de CAIME compilée en Debug depuis le dépôt y dépose, à chaque Pathfinding, ses fichiers de diagnostic (debug_*.raw, .bmp : zones, coûts des arêtes, ponts) : la vue qu'a l'outil de votre carte, lisible sans le jeu. L'installeur officiel (Release) ne les écrit pas (code de la v1.0.1).
En ligne de commande§
CAIME lancé sans argument ouvre l'éditeur ; avec des arguments, il travaille en console. La documentation officielle 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--allenchaî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 (Settings → Preferences).
processrefuse de tourner sans lui ;validatetourne quand même, mais les contrôles qui comparent la carte à la base n'ont alors rien de sûr à comparer : ne vous fiez pas à leur verdict. validatesort 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) etvalidate; une couche.hex_layers'écrit par script mais s'importe par la fenêtre (Tools → Import → Layer data). process --borderséchoue sans la fenêtre dans la v1.0.1 officielle : les options des frontières (Land, Sea, TI, MI) ne sont initialisées que par la fenêtre de Process → Borders data (BorderExportOptionsViewModel, lu dans le code) ; en ligne de commande, elles restent vides.--all, qui inclut Borders, sort donc toujours en 2 ; il inclut aussi Dynamic Resources, qui a fait planter MapDataBuilder sur Warhammer III chez nous. Listez plutôt les tâches (--map-data --pathfinding --trade-routes --lookup) et faites Borders par le menu Process.
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é.
| 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, division entière) |
| 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 garde ses hex marqués : l'import de Regions ne la recalcule pas, l'enregistrement non plus (il ne recalcule les masques que parmi les hex déjà marqués frontière). Après un import de Regions : Auto-generate sur la couche Region Borders, puis Ctrl+S, avant Pathfinding. (Chez nous, un verbe ajouté à notre copie de CAIME,
generate-region-borders, fait la même chose en ligne de commande ; il n'est pas dans la version officielle.) - 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 (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.
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_bastonnedans Warhammer I estwh_main_brt_bastonnedans 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. Un port n'est jamais grossi à 19 + 3 : la partie plante au chargement (encadré « Ce que le validateur laisse passer »).
- En agrandissant la carte, ouvrez la lisière de mer de l'ancienne (son ancien bord non jouable, souvent infranchissable) et contrôlez la mer seule, port par port : CAIME ne vérifie pas que la mer d'un port rejoint les autres.
- Reprendre les noms de fichiers de la ligne d'origine de
campaign_map_playable_areas(par exemple la colonneradar_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.
Le récit complet : le tutoriel du portage et les neuf murs du portage.
Les pièges qui nous ont coûté le plus§
- 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.
- Confondre triangle peint et triangle exporté : CAIME retire une arête qui fermerait un triangle de routes ou de rivières ; ne gommez pas le réseau par principe.
- 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 ne les voit pas (voir « Exporter »).
- Nom de carte : CAIME le met en minuscules à la création ; déclaré avec des majuscules dans la base, il laisse les swatches vides.
- Ctrl+N et Ctrl+P, affichés dans les menus, ne sont reliés à rien dans la v1.0.1 (d'après le code) : passez par File → Create new map et Settings → Preferences.
- Create new map sur un nom déjà pris : « Overwrite? », et Yes supprime tout le dossier du brouillon.
- 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 sousraw_datadoivent 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.
- Un port en 19 + 3, en 16 + 1 ou en 16 + 2 passe la validation et fait planter le chargement de la partie : 16 + exactement 3, deux en mer et un sur la plage (« Les villes »).
- **Des régions retouchées sans Auto-generate de Region Borders** : les frontières restent les anciennes, et Pathfinding les lit telles quelles, sans message.
campaigns.masknon vide : la génération du startpos plante (« Les tables de la base à déclarer »).- 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 à chaque mise à jour du jeu ou du kit (9.0 le 24.09, 9.0.2 le 27.09) il réécrit
raw_data\, 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 dansdb 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_5et_map_4. Depuis la v1.1.0, l'installeur livre les gabarits, mais ils sont perdus du dossier d'installation à chaque mise à jour (limite connue de la PR #15 de l'équipe). - La documentation se contredit sur quelques points :
.binou.ppdpour le pathfinding (le code écritpathfinding.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 (dans Warhammer III, le code colore les rivières engenericet les embouchures en plage), la configuration du Map Data Editor en.jsonou en.xml, le chemin d'exemple de l'Assembly Kit, le fait de pouvoir peindre ou non sur une couche masquée, et l'annulation « sans limite » (le code la plafonne à 1 000 pas). 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), relus pour la mise à jour 9.0, puis corrigés le 5 octobre 2026 des faits prouvés en 9.0.2 et de CAIME 1.1.0 (validateurs inchangés) : 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.
- Lire et documenter un format de fichier, comme le font RPFM et CAIME : oui. Modifier les programmes de CA ou contourner leurs limites : non, avec une exception assumée de l'atelier, dite franchement dans le guide BOB : BOB lancé sous débogueur pour le terrain d'une carte neuve. 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>\, enregistré, avecraw_data\ EmpireDesignData\ campaign_maps\ <carte>\ map.hex trees.png,tree_database.xml,dynamic_resources.png,dynamic_resources_database.xmlà côté ; Tweak et Terry fermés (l'alerte de CAIME ne détecte pastweak.modder.x64.exe) ; sorties dansworking_data\:campaign_maps\ <carte>\ map_data.esf,pathfinding.ppd,display\,borders\ borders.pbd <campagne>_lookup.bmp. - Nom de carte : CAIME le met en minuscules et retire la ponctuation à la création ; la base doit porter exactement ce nom, casse comprise. Largeur paire, imposée.
- Interface (v1.0.1, d'après le code) : Ctrl+N et Ctrl+P sont affichés mais reliés à rien, passer par les menus ; Ctrl+Z remonte 1 000 pas au plus (4 millions d'hex modifiés au plus).
- Sauvegardes :
map_autosave.hexà côté dumap.hex(5 min),backups\(10 min).map_AAAA_MM_JJ_HH_mm_backup.hex - Base : en mode Assembly Kit, CAIME lit
raw_data\sans y écrire ; en mode RPFM, il y place des tables le temps d'un projet et remet les originaux à la fermeture.db - Après chaque mise à jour du jeu ou du kit (9.0, puis 9.0.2), Steam met l'Assembly Kit à jour et réécrit
raw_data\, lignes ajoutées perdues : vérifiez la clé de la campagne dansdb campaigns.xmlavant de rouvrir ou d'exporter, et restaurez depuis les copies. - Campagne neuve : ligne
campaignscopiée d'une campagne qui marche,maskvide (sinon la génération du startpos plante) ; aperçu decampaign_map_playable_areas(preview_width×preview_height) au rapport du monde, hauteur 600 ; dossier<jeu>\créé avant la génération, sinon nidata\ campaign_maps\ <carte>\ hlp_data.esfnispd_data.esf. - Ligne de commande officielle :
CAIME.exe process|validate --map <map.hex> (--all | drapeaux); codes 0, 1, 2 ; le code 2 devalidatene suffit pas à conclure (un seul Warning le déclenche) : lire le rapport.process --borderséchoue sans la fenêtre en v1.0.1 (options des frontières non initialisées), donc--allaussi ;--allinclut en outre Dynamic Resources (plantage de MapDataBuilder sur Warhammer III chez nous) : lister les tâches, et Borders par le menu. Map Data raté : lire le code de sortie de MapDataBuilder dans le Logger (drapeaux 1 à 128) et les journaux de BOB recopiés. Une couche.hex_layers'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 n'est recalculée ni par le pinceau, ni par l'import, ni par l'enregistrement, ni par Pathfinding : après toute retouche des régions, Auto-generate sur la couche Region Borders, Ctrl+S, puis Pathfinding ; contrôle :
validate --regionssans Info « 0 passable region edge hexes » sur une région qui a des voisines de terre. - Routes :
validate --roadsne voit pas un réseau trop maillé, qui bloque Pathfinding ; des fils, peu de carrefours (comptez les hex à trois branches ou plus), un export borné dans le temps ; un miroir dans le repère des hex, jamais de l'image. - Baseline Tilemap image : une image de 2 × L par 2 × H + 1 pixels, à exporter sans retouche manuelle. Avec CAIME 1.1.0 ou plus, l'image
tile_map.pngsort nord en haut : posez-la telle quelle. Jusqu'à la 1.0.1, elle sort à l'envers (sud en haut) : retournez-la verticalement, et seulement cela. Contrôle : la côte de l'image se superpose à l'export PNG de la couche Ground Types. Pour Warhammer III : mer, falaises côtières et transitions, routes et plages ; tout hex de terre côtier qui n'est pas Beach devient une falaise, rivière comprise ; une embouchure se marque Beach ET River (« river ending at beach », peinte en plage) ; les autres rivières deviennentgeneric(BaselineTilemapExporter.cs). - Contrôles, en conditions : chaque hex a région, sol et climat ;
is_seade 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 de l'intérieur = 19 hex, sans Port ; ville portuaire = 16 hex de terre en principal + exactement 3 hex de Port consécutifs sur l'anneau 2, deux en mer et un sur la plage, comme chez CA, les hex en mer gardant la région de mer (le validateur ne demande qu'un hex en mer et laisse passer 19 + 3, 16 + 1 et 16 + 2, qui font planter le chargement en 9.0.2 : comptez vous-même) ; la mer d'un port rejoint les autres mers (aucun validateur ne le vérifie : contrôlez la mer seule, port par port) ; é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) ; anneaux et triangles de Roads, Rivers et Trade Routes permis (CAIME retire l'arête qui fermerait un triangle de routes ou de rivières). - 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.
- Les index de sols, climats et attritions se recalent par nom, jamais par numéro.
- Droits : rien de commercial ; avant de publier des fichiers produits par CAIME, demander à l'équipe (README et EULA 1.1 se contredisent : voir « Avant de commencer »).
Sources et liens§
- Documentation de CAIME (douze guides, dont Creating a New Map et la ligne de commande), le dépôt (et son code source, branche
main, qui tranche quand la documentation se contredit), ses versions et le Discord de l'équipe (Campaign Map Modding Team). - Campaign Map Making for Warhammer III et Startpos (wiki tw-modding).
- Manuel de RPFM et RPFM For Dummies.
- Terry, introduction et Rules.bob (wiki de Creative Assembly).
- Nos autres guides : les outils, RPFM, Terry, BOB et modder avec une 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 (Settings → Preferences), et que le nom de carte de campaign_map_regions est identique au vôtre, casse comprise : CAIME met en minuscules le nom saisi à la création, la base doit donc l'écrire en minuscules. 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\), 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é (depuis la v1.1.0, à côté de CAIME.exe ; avec l'installeur officiel : %LOCALAPPDATA%\). Puis lisez dans le Logger le code de sortie de MapDataBuilder et les journaux de BOB (voir « Exporter »).
L'export tourne sans fin : pourquoi ?
Une boucle de routes ou de rivières est permise, mais un réseau de routes très maillé (des centaines de carrefours) peut bloquer Pathfinding des dizaines de minutes alors que la validation passe : chez nous, 331 carrefours à trois branches, 22 minutes sans rien écrire ; refait en fils, 20 carrefours, 4 secondes. Tracez des fils, avec peu de carrefours, comme CA ; comptez les carrefours et bornez l'export dans le temps. Sinon, lisez le Logger pour identifier l'étape qui ne finit pas, comparez avec un projet témoin, puis examinez les données de l'export concerné. MapDataBuilder est arrêté au bout de 30 minutes.
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). Restrictions et Areas Of Interest n'ont pas de format d'export : repeignez-les. Si le jeu change, recalez d'abord par nom les index des sols, climats et attritions.
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 jusqu'à 1 000 gestes.
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 de l'intérieur n'a pas d'hex de Port. Une ville portuaire garde le même disque, partagé : 16 hex de terre en Main Settlement et exactement 3 hex de Port consécutifs sur l'anneau 2, deux en mer et un sur la plage, comme chez CA (mesure sur 290 ports) ; les hex en mer gardent la région de mer. L'étendue couvre les 19 hex. Le validateur accepte 19 ou 16 et un seul hex en mer : il laisse passer des ports en 19 + 3, 16 + 1 ou 16 + 2, qui font planter le chargement de la partie. 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 (CAIME refuse une largeur impaire) ; CAIME 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 ?
L'EULA 1.1 permet de les publier sans les monnayer, mais le README demande l'accord d'un fondateur avant de les donner : demandez à l'équipe sur son Discord avant de publier, et rien de commercial. Détail : « Avant de commencer : les droits et les règles de l'équipe ».
Ce guide en texte brut (Markdown), pour les IA et la lecture hors ligne
Ce guide est communautaire
Une erreur, un piège vécu, une astuce ou un outil plus récent : dites-le, et chaque correction sera vérifiée, puis ajoutée avec sa source.