Atlas de Bretonnie

Journal de l'atelier · · 14 min de lecture

Tutoriel : porter une carte de Warhammer I dans Warhammer III

Porter une carte de campagne d'un Total War à l'autre n'est pas un copier-coller : deux moteurs, deux formats, deux repères. Voici l'ordre que j'ai suivi avec Claude pour La Saison de la Révélation, le pourquoi de chaque étape, et les pièges qui nous ont coûté des heures.

La carte de campagne en jeu : le château de Quenelles au bout de sa route, dans la brume, et une rivière à gauche
Capture en jeu : notre carte portée dans Warhammer III, le château de Quenelles au bout de sa route, dans la brume.

Avant de commencer

Ce tutoriel décrit une méthode, pas un bouton magique. Tout y a été vérifié sur notre portage, du 20 au 25 septembre 2026, jusqu'à la mise à jour 9.0 du jeu. Il faut être à l'aise avec les fichiers du jeu, et patient. Il vous faut :

  • Warhammer III et son Assembly Kit, les outils officiels de CA (Steam → Bibliothèque → Outils), avec les DLC des factions de votre carte : sans eux, elles existent dans la base mais pas en jeu.
  • Warhammer I et son Assembly Kit.
  • CAIME (Campaign AI Map Editor), l'éditeur du Campaign Map Toolkit, pour la carte logique, et RPFM pour les packs et les tables.
  • Un langage de script (Python chez nous) pour tout ce qui se répète : couches, tables, contrôles.
  • Un débogueur, cdb (livré avec WinDbg) : c'est lui qui fait parler les plantages.

Voici le chemin complet, d'un coup d'œil. Chaque étape a sa section plus bas, avec ses commandes et ses pièges.

Le portage en huit étapesde 0 à 7, chacune avec ce qu'elle produitL'inventaireCe que livre chaque jeu, ce qui a changé de nom ; un planpar phases.0La carte logique · CAIMEDéclarer la carte dans la base, recaler les couches parnom, valider, exporter.map.hexmap_data.esfpathfinding.ppd1Le startpos · le jeu lui-mêmeLes tables start_pos_* dans un pack de génération ; le jeuécrit le tour 0.startpos.esfhlp_data.esfspd_data.esf2Le terrain · Terry et BOBUn projet de campagne sur le modèle de ChaosRobie, compilépar BOB ; et un terrain de bataille.<carte>.terryfull_height_map.dds3Objets, arbres, montagnesLes fichiers de Warhammer I, à des chemins à vous, dans lebon repère.global_props.bin4Rivières, côte et eauLe fond sous 0 partout, des plans d'eau à 0, des rivièresen maillages.5Scripts et textes · Lua, .locGameplay de Warhammer III, histoire de Warhammer I, desclés à vous.6Les essaisUn démarrage de 45 s, les rapports de plantage, des partiesautomatiques.Le jeu juge : pas Terry, pas un validateur.7Le pack du mod · RPFMexports, terrain, tables, scripts, startpos
Les huit étapes de ce tutoriel, dans l'ordre : l'outil de chacune, ce qu'elle produit, et le pack du mod où tout se retrouve. Chaque étape se détaille plus bas.

Le vocabulaire en une minute

  • Moitié logique, moitié visuelle : une carte de campagne décrit deux fois la même terre. La moitié logique, c'est ce que le jeu calcule (régions, déplacements, villes) ; la moitié visuelle, ce que le joueur voit (relief, textures, arbres, eau).
  • Hex : la case du damier de la moitié logique. Notre carte en compte 400 × 440.
  • map.hex : le projet CAIME, c'est-à-dire la carte logique, couche par couche (régions, sols, climats, rivières, routes, villes).
  • ESF : un format binaire de CA, celui de map_data.esf comme du startpos.
  • Startpos : le fichier qui fige l'état de départ d'une campagne (factions, personnages, villes, diplomatie).
  • Table de base : une table de la base de données du jeu (régions, campagnes, factions…).
  • Pack : l'archive du mod, posée dans le dossier data du jeu.
  • Terry : l'éditeur de terrain de l'Assembly Kit. BOB : le compilateur qui transforme les sources en fichiers du jeu.

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.

Étape 0 : l'inventaire

Avant de toucher à quoi que ce soit, on mesure. Le kit de Warhammer I livre la carte logique de la mini-campagne (son map.hex : 400 × 440 hex, 61 régions) et sa base de données, mais pas son terrain de campagne. Le terrain compilé, le startpos et les scripts sont dans les packs du jeu, qu'on lit avec RPFM.

Ce que donne Warhammer IWarhammer IDans Warhammer IIILA CARTE LOGIQUEkit : map.hex,400 × 440 hex, 61 régionsCAIME 1.0.1 l'ouvre ;couches recalées par nomLA BASEkit : 297 tables ont deslignes wh_dlc05_des lignes recréées, auxclés de Warhammer IIILE TERRAINkit : rien ; packs : 172fichiers compilésun projet Terry àreconstruire (modèle :ChaosRobie)LE STARTPOSpacks : startpos.esf,4,3 Morégénéré par le jeu, jamaisrecopiéLES SCRIPTSpacks : 2 769 lignes de Luaréécrits sur lesbibliothèques de CALes 30 factions : quatre règles, dans l'ordre1clé identiquewh_dlc03_bst_beastmen12clé sans « _mini »les douze royaumes sylvains…163même culture, même fin de clé…brt_mini_bastonne → wh_main_brt_bastonne94exception écrite, avec sa raisongisoreux → gisoroux ; une tribu orque absente4sans homologue : 0
L'inventaire du 20.09.2026 : le kit de Warhammer I donne la carte logique et la base, pas le terrain ; le reste est dans ses packs. En bas, l'appariement des factions, règle par règle ; la tribu orque absente (Deff Grindaz) a pris la place d'une tribu mineure.

L'inventaire dit aussi ce qui a changé de nom. Les clés de faction changent de préfixe d'un opus à l'autre : on les apparie sur la culture et la fin de la clé, jamais sur le préfixe (wh_dlc05_brt_mini_bastonne devient wh_main_brt_bastonne). Un script applique les règles dans l'ordre et écrit la raison de chaque exception. Chez nous, les 30 factions ont trouvé une contrepartie ; seule une tribu orque manquait, remplacée par une tribu mineure absente de la carte.

Étape 1 : la carte logique avec CAIME

La carte logique dit au jeu où sont les régions, les villes, les rivières, les routes et les zones infranchissables. Prenez CAIME 1.0.1 (23 septembre 2026) ou plus récent : il lit les cartes des mini-campagnes de Warhammer I, que la 1.0.0 n'ouvrait pas, et la base sur les Windows dont le séparateur décimal est la virgule (en français, par exemple).

Déclarer la carte

D'abord la base du kit : la carte, sa campagne et sa zone jouable, ses régions (chacune avec une couleur RVB unique) et ses provinces. Neuf tables sont concernées (campaigns, campaign_map_playable_areas, regions, campaign_map_regions, region_to_province_junctions…), et le nom de la carte y revient partout, casse comprise. Colonne par colonne : le guide CAIME.

Recaler les couches

Puis on reprend dans CAIME les couches du map.hex de Warhammer I. Les index ne survivent pas au changement de jeu : 13 types de sol terrestres et 24 climats dans Warhammer I, 15 et 40 dans Warhammer III. On recale donc par nom, jamais par numéro. Les emplacements de ville grandissent aussi : 7 hex dans Warhammer I, 19 dans Warhammer III, en disque autour du centre, dont 16 sur terre et 3 côté mer pour un port.

De Warhammer I à Warhammer IIICAIME 1.0.1 ouvre les cartes des mini-campagnes de Warhammer IWarhammer IWarhammer IIILes villes7 hexport : 419 hexport : 16 + 3Agrandir chaque emplacement en disque autour de son centre, puis refaireles étenduesTypes de sol et climats13 sols de terre24 climats15 sols de terre40 climatsRecaler les index par nom, jamais par numéroLes clés de factionwh_dlc05_brt_mini_bastonnewh_main_brt_bastonneMême culture (brt), même fin de clé (bastonne) : jamais le préfixeLa minicarteradar_filede la ligne d'origineLe même nom,vérifié dans le packUne colonne qui nomme un fichier se vérifie contre le contenu du packFichiers 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.

Valider, puis exporter

La ligne de commande de CAIME fait les deux. Enregistrez d'abord, gardez le projet à sa place dans raw_data, et fermez Tweak et Terry : l'export Map Data en dépend, et l'alerte de CAIME ne voit pas l'outil du kit de Warhammer III.

CAIME.exe validate --map map.hex --all
CAIME.exe process --map map.hex --map-data --pathfinding --trade-routes --lookup

Les frontières (borders.pbd) se font ensuite par le menu Process → Borders data : en ligne de commande, leurs options restent vides et l'export échoue, c'est pourquoi process --all sort toujours en échec. On obtient map_data.esf, pathfinding.ppd, borders.pbd, trade_routes.ptd et l'image de correspondance des régions. Le succès se lit dans le Logger : « MapDataBuilder exited with code 0 (Success) ».

Une commande, pièce par pièceCAIME.exe process -m <map.hex>--map-data --pathfindingCAIME.exeLe programme ;sans argument, il ouvrel'éditeurprocessLe verbe :process exporte,validate contrôle-m <map.hex>La carte : --mapou son abrégé -m--map-data --pathfindingLes tâches : un drapeaupar export, ou --all seulCodes de sortie0succès1argumentsinvalides2échecvalidate sort en 2 dès un Warning, même sur les cartes de CA :lisez le rapport.--all échoue : Borders veut sa fenêtre (v1.0.1),et Dynamic Resources a planté chez nous surWarhammer III : listez les tâches--map-data --pathfinding --trade-routes--lookupet 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.
  • La ligne 0 du damier est en bas de la carte : une image dessinée « haut en haut » se retourne avant d'être encodée.
  • Dans un fichier de couche (.hex_layer), Impassable vaut 1 pour franchissable. Ne déduisez jamais le sens d'un drapeau de son nom.
  • Si la ligne de votre carte est la dernière de campaign_map_playable_areas, l'export Map Data plante. Une ligne après la vôtre suffit.
  • validate sort en échec dès le premier Warning, et même les cartes de CA échouent : lisez le rapport. Sa règle de l'étendue des villes fait échouer cinq villes en col de la carte des Empires : jugez-les en jeu.
  • Un hex modifié, et il faut réexporter, puis régénérer le startpos : ce qu'il faut refaire.

Étape 2 : le startpos

Le startpos (startpos.esf) est la sauvegarde du tour 0 : factions, régions, personnages, armées, diplomatie. Une campagne n'en a qu'un, et un mod le remplace en entier. C'est le jeu lui-même qui le fabrique, à partir des tables start_pos_* de l'Assembly Kit.

Mais le jeu ne lit pas les XML du kit : on lui sert ces tables dans un pack de génération, chargé seulement le temps de la génération, à côté du pack du mod. Elles n'entrent jamais dans le pack que l'on joue. La génération se commande par %APPDATA%\The Creative Assembly\Warhammer3\scripts\user.script.txt, que le jeu lit au lancement :

mod mon_mod.pack;
mod mes_tables_de_depart.pack;
process_campaign_startpos ma_campagne;
process_campaign_ai_map_data;
quit_after_campaign_processing;
  1. Posez le pack du mod, à jour (scripts compris), et le pack de génération dans le dossier data du jeu.
  2. Gardez une copie de user.script.txt, puis écrivez-y les lignes ci-dessus : une ligne mod par pack.
  3. Steam ouvert, lancez Warhammer3.exe et attendez qu'il se referme seul, sans toucher à sa fenêtre.
  4. Vérifiez la date de startpos.esf, hlp_data.esf et spd_data.esf, copiez-les dans les sources du mod et reconstruisez le pack : il passe devant les copies en vrac, qu'on retire ensuite.
  5. Remettez user.script.txt comme avant : sinon, quit_after_campaign_processing fermera le jeu à chaque lancement.
Le startpos : trois endroits,un aller-retourLe script%APPDATA%\The Creative Assembly\Warhammer3\scripts\user.script.txt1écrit à la main : une ligne mod par pack, puis les trois commandes(le code ci-dessus)gardez-en une copie avant ; remettez-le comme avant après,sinon le jeu se referme à chaque lancementlu au lancementLe jeu<jeu>\Warhammer3.exe2lancé directement, Steam ouvert : il charge les deux packs,génère le tour 0, puis se referme seuldata\mon_mod.pack4le mod : campaigns, la carte, les scripts ; au retour,les trois fichiers copiés dans ses sources, puis lepack reconstruitmes_tables_de_depart.packles tables start_pos_* seules ; jamais dans le packjouécampaigns\<campagne>\startpos.esf3campaign_maps\<carte>\chez nous, le jeu les a écrits icihlp_data.esf · spd_data.esfAvec process_campaign_ai_map_data (carte neuve). Duréetrès variable selon la carte : le détail est dans letexte, sous ce schéma.écrits en vrac : une fois remis dans le pack,retirez-les de data, le pack passe devant euxContrôlerdate et heure des trois fichiers : celles de lagénération.bad_mods_report.txt sans reproche, dans :%APPDATA%\The Creative Assembly\Warhammer3\crash_report\campagne scriptée : une partie neuve a son introductionet ses missions (compteur de sauvegarde à 1)
Trois endroits : le script dans %APPDATA%, le jeu et ses deux packs dans <jeu>\, les fichiers produits en vrac dans data. Ils retournent dans le pack du mod, qu'on reconstruit ; puis les copies en vrac s'en vont.

process_campaign_ai_map_data écrit les données de cheminement de l'IA (hlp_data.esf, spd_data.esf), indispensables à une carte neuve : sans elles, le jeu plante au réglage du joueur. Chez nous, 16 secondes pour 400 × 440 hex. Build Startpos de RPFM ne charge qu'un pack ; avec deux, nous écrivons le script à la main. Le détail : le guide des outils.

Ce qu'un startpos exige

Un startpos se génère souvent même quand il est faux : c'est au chargement, ou plus tard, que le jeu plante. Voici chaque symptôme que nous avons vécu, et ce qui manquait :

Quand ça casse,qu'est-ce qui manque ?Pendant la générationLe script_log s'arrête juste après « Loading Mods », sansvidage.→ start_pos_regions : rebel_faction_name etlong_description vides, pas de « PLACEHOLDER ».Au chargement de la campagnePlantage dès le début du chargement.→ Un emplacement primary par colonie(start_pos_region_slot_templates).Plantage au chargement.→ Pour chaque faction, un groupe d'IA qui contient unepersonnalité.Plantage au réglage du joueur (carte neuve).→ hlp_data.esf et spd_data.esf dans le pack.À l'écran de sélectionAucun seigneur à choisir.→ Les lignes destart_pos_starting_general_options.Au premier tourUn personnage dans le coin de la carte, en case (1, 1).→ Son lien dansstart_pos_character_to_settlements(personnage placé en (0, 0)).Ni introduction ni missions.→ Un startpos généré APRÈS les scripts (compteur desauvegarde à 1).D'abord : bad_mods_report.txt nomme la ligne refusée, uneà la fois, dans :%APPDATA%\The Creative Assembly\Warhammer3\crash_report\
Le moment où ça casse dit où chercher : chaque symptôme vécu sur notre chantier, et la ligne ou le fichier qui manquait.

Étape 3 : le terrain avec Terry et BOB

Ni le kit de Warhammer III ni celui de Warhammer I ne livrent le terrain brut d'une campagne. ChaosRobie, l'auteur d'Immortal Empires Expanded, a reconstitué celui des Empires Immortels en projet Terry et l'a partagé : c'est le plan à suivre. Le projet vit dans raw_data/terrain/campaigns/<carte>/, et la recette de BOB dans le rules.bob du dossier parent.

Le projet de campagne, dossier par dossierd'après le projet partagé par ChaosRobieraw_data/terrain/campaigns/absent du kit : à créerrules.bobla recette de BOB, dans le dossier parent[Terrain]PrefabRoot = art\prefabs\campaignTileDatabase = terrain\tiles\campaign\_tile_databaseHeightPatch = true…<carte>/le dossier de la carte, à créer aussi<carte>.terryle projet, en XML (version 27) : pour Terry,une tile map sur la base de tuiles campaign ;dix couches de terrain, un File Layer par région,nommé comme sa clé dans la base<carte>.terry.userles réglages d'aperçu : sans lui, ni eau ni arbrestile_map.pngune couleur par type : terre, mer, côte, falaise, route*.tifdix rasters : relief, fond marin, mélange des textures,couleurs, brouillard de guerre, arbres, corruption,neige, visibilité des parcelles*.layerun par File Layer : un par région (les objetsposés : décors, montagnes, eau),plus ceux que vous ajoutezlighting/les éclairages (.environment)rules.bob[Copy][+AssetGraph][Copy] recopie le projet brut dans le dossierretail du kit, à chaque passageQui ne recrée que <carte>/ perd la recette.Une région de plus :un File Layer de plus (son entité dans le .terryet son fichier .layer).
Le kit ne livre aucun projet de campagne : on le reconstitue sur le modèle de celui de ChaosRobie. La recette de BOB est dans le rules.bob du dossier parent ; celui du dossier de la carte ne fait que recopier le projet (par [Copy]).

Les rasters se dimensionnent sur le nombre d'hex : 8 pixels par hex (plus 4 lignes) pour le relief, le fond marin et les textures, soit 3200 × 3524 chez nous ; 4 pour le brouillard de guerre ; 2 pour les arbres, la neige, la corruption et tile_map.png. La mer se déclare dans tile_map.png (la tuile sea), pas par la hauteur. Le détail : le guide Terry.

Compiler avec BOB

BOB compile le projet en une minute environ ; le tout premier passage, qui compresse le relief, a pris environ 26 minutes. On itère donc sans lancer le jeu. Après chaque passage, lisez bob.log (le nombre d'actions annoncées, puis une ligne STATUS: Finished par action faite) et comptez les « Failed to find tile » de bob_warnings.log : chacun est un trou dans le terrain.

Le mur d'une carte neuve est là : pour une carte que la base du jeu (celle des packs de CA) ne connaît pas, BOB ne lance que 6 actions, sans relief ni textures, et sans message ; l'ajouter à la base du kit ou à un pack de mod n'y change rien. C'est une limite de l'outil : faites un témoin, puis demandez à la communauté (le Discord de CAIME, tw-modding), sans décortiquer l'outil de CA ni le contourner.

Six actions seulement ?Combien d'actionsannonce bob.log ?plus de 6Pas la limite12 chez nous pour unpassage complet ; puiscomptez lesFailed to find tile debob_warnings.log6Faites un témoinun projet connu pourbon, copié sous unautre nom, puis passédans BOBEt le témoin ?plus de 6Votre projetest en cause :cherchez dans vosfichiers6 aussiLimite du kitvotre projet n'est pasen cause : demandez àla communauténe forcez pas l'outilLes 6 actions d'une carte inconnuele fichier Terry et cinq masques ; ni relief, nitextures, ni carte logique, ni brouillard ; et aucunmessage.
Six actions au lieu d'une douzaine, sans message : un témoin dit si c'est votre projet ou la limite du kit.
  • L'action Generate Camera Height Map fait planter BOB : fabriquez camera_heightmap.png vous-même, à partir du relief.
  • BOB ne produit pas lf_normal.dds, l'éclairage lointain du relief. Nous avons d'abord repris celui de Warhammer I, canal vert inversé ; nous le recalculons aujourd'hui depuis notre relief.
  • Il écrit le brouillard de guerre (shroud_heights.dds) à plat : nous le recalculons après chaque passage.
  • Il réécrit ses sorties à chaque passage : une retouche faite à la main dans working_data disparaît.
  • Une campagne a deux terrains : le sien, et un terrain de bataille, nommé par la colonne terrain_folder de sa zone jouable. Sans lui, le jeu plante à la première bataille terrestre, même entre deux IA, donc souvent dès la première fin de tour.
  • Terry ouvert verrouille working_data : fermez-le avant de lancer BOB depuis sa fenêtre ou de construire le pack. Et tant qu'aucun terrain n'est compilé, ouvrez le projet avec 3D View décoché, sinon Terry plante.

Étape 4 : objets, arbres et montagnes

C'est là que la carte prend sa personnalité. Je voulais la carte de Warhammer I à l'identique : ses objets, ses arbres, ses montagnes. Warhammer III lit encore les modèles de Warhammer I, mais pas toujours leurs matériaux : calez chaque conversion sur les objets que CA a lui-même convertis.

Warhammer I : la Clairière Royale, le Chêne des Âges au loin, une mare turquoise bordée de rochers au premier planWarhammer I
Warhammer III : la Clairière Royale de près, ses arbres, ses pierres dressées et la mare bordée de rochersWarhammer III
La Clairière Royale et sa mare : dans Warhammer I, vue de haut ; dans notre carte de Warhammer III, de plus près (24 septembre). Les arbres, les rochers et les pierres dressées sont ceux de Warhammer I.
  • N'écrasez jamais un fichier de Warhammer III : le pack le remplacerait dans toutes les campagnes. Rangez les versions de Warhammer I à des chemins que CA n'emploie pas (chez nous, _wh1/) : sinon le moteur va chercher les textures de CA posées à côté.
  • Seul le décor naturel est visible de tous ; les décors du Chaos ou des vampires s'affichent selon la culture ou la corruption de la région, comme chez CA.
  • Les Empires posent leurs montagnes comme des objets (3 044 poses) : nous avons fait de même avec les reliefs sculptés de Warhammer I : ses 514 montagnes et ses 635 falaises intérieures, 1 149 poses. Ses 233 falaises de côte, faites pour sa côte en escalier, sont retirées : sur une côte lissée, elles dessinaient des murs.
  • La liste d'arbres de Warhammer I a déjà le format de Warhammer III : ses arbres s'embarquent à leurs positions.

Le piège qui nous a coûté le plus : deux repères. Les objets vivent dans l'espace des hex, le relief dans une grille de pixels carrés, et Terry étire l'un sur l'autre. Un point (x, z) lit donc le relief à la ligne z × √3/2 ; lu à la ligne z, les objets volent ou s'enterrent. Et un objet « volant » se juge au bas réel de sa boîte, jamais à son point d'origine.

Deux repères pour une cartele mondeespace des hex338,9 unitésle rasterpixels carrés293,5 unités(x, z)zz × √3/2Terry étire les rasters de 2/√3 vers le nord : lu à la lignez, le relief tombe au mauvais endroit, et les objets volent ous'enterrent.Un objet « volant » ?le solun tertre : un autre objetsa boîtel'origine ne dit rienBas de la boîte sur son support (le sol ou un autreobjet) : l'objet est posé.Warhammer I faisait une partie de son relief avec des objets, et 961 deses 45 354 objets flottent déjà de 0,03 à 0,3 : on les descend aucontact.
En haut : les objets vivent dans l'espace des hex, le relief dans des rasters à pixels carrés ; un point (x, z) lit le relief à la ligne z × √3/2 (chez nous, 338,9 unités de monde pour 293,5 de raster). En bas : un objet se juge au bas de sa boîte et à son support, pas à son origine.

Étape 5 : rivières, côte et eau

L'eau se juge en jeu : Terry ne la montre pas comme le jeu. Trois règles la font apparaître : sa surface est à 0, faite de grands plans d'eau posés comme objets ; le fond (sea_height) passe sous 0 partout, même sous la terre ; la mer se déclare dans tile_map.png.

L'eau, en coupe012341Le plan d'eaude grands Polygon Mesh au matériau d'eau, posés à 0, pivotdans la carte (997 aux Empires). Sans eux, pas de mer.2Le fond (sea_height)sous 0 partout, même sous la terre (−0,91 aux Empires ;chez nous, au plus −0,1). Sinon, l'eau ne se dessine pas.3La côteune berge en pente d'environ une unité, jamais une marched'un pixel ; à moins de deux unités des terres, la merpleine reste au fond.4La rivièreun maillage au matériau d'eau de la mer, 1 à 5 cm d'eausur un lit sombre, berges basses ; river_depth_max_point à0,2, sinon elle blanchit de loin.Terry ne montre pas l'eau comme le jeu : jugez-la en jeu.
Une coupe schématique, hauteurs exagérées : la surface de l'eau est à 0, faite de plans d'eau ; le fond passe sous 0 partout ; la côte descend en pente douce ; une rivière est un ruban d'eau de quelques centimètres. Chiffres relevés sur les Empires Immortels et sur notre carte.

Les rivières de Warhammer III sont des maillages qui portent le matériau d'eau de la mer. Nous avons reconstruit celles de Warhammer I en surfaces continues, quelques centimètres d'eau sur un lit sombre, avec un courant calculé le long du réseau jusqu'à l'embouchure : le sens de l'eau ne se lit pas dans les tuiles de Warhammer I.

Pour la côte, les tuiles de rivage de Warhammer III n'acceptent qu'une bande régulière : une pointe de terre d'un seul hex laisse un trou. Et de loin, le jeu simplifie le relief : une marche d'un pixel entre la terre et le fond y devient un escalier de plusieurs cases. La côte de Warhammer I ne reste lisse en jeu qu'avec une berge en pente douce et une mer qui reste au fond près des terres.

Une côte de notre carte vue de haut, en marches d'escalier, avec une bande d'eau pâle le long du rivageAvant
L'estuaire de Mousillon vu de haut : une côte lisse, une eau sombre près du rivage, la cité au bord de l'eauAprès
Avant : une côte de notre carte le 24 septembre, en marches d'escalier, bordée d'une bande d'eau pâle. Après : l'estuaire de Mousillon le 25 septembre, berge en pente douce et eau sombre près du rivage, comme dans Warhammer I.

Étape 6 : scripts et textes

Notre règle : gameplay de Warhammer III, histoire de Warhammer I. Les scripts de campagne sont réécrits en Lua sur les bibliothèques de CA. Bonne surprise : les 43 répliques doublées de la mini-campagne sont toujours dans les banques de sons de Warhammer III, en anglais comme en français.

  • Prenez des clés à vous et ne remplacez jamais une table de CA : les autres campagnes doivent rester intactes, mod actif. Un fragment qui porte le nom du fichier du jeu le remplace tout entier (qui passe devant qui).
  • Un mod ne pose que les clés de texte que le jeu ne connaît pas : sinon, il remplace le texte de CA dans toutes les langues. Deux langues, deux packs : le second ne contient que ses textes et passe devant le premier.
  • Vérifiez chaque nom dans les textes français du jeu : c'est Gasconnie, Aquitanie et Bastogne, pas Carcassonne, Aquitaine et Bastonne.
  • Régénérez le startpos après tout changement de scripts : c'est pendant la génération que les scripts passent le compteur de sauvegarde à 1. Sinon, chaque nouvelle partie se prend pour une sauvegarde, sans introduction ni missions.
Vos textes, dans toutes les languesLe jeu charge vos .loc quelle que soit la langue dujoueur.Une clé neuveland_units_onscreen_name_atlas_chevaliersvotre texte, dans toutes les languesUne clé du jeu reprisefactions_screen_name_wh_main_brt_bordeleauxremplace le texte officiel, dans toutes les languesPour une seconde langue : un second packdans text/db/, lus par ordre de nom :!atlas_de.locexemple : le pack de traduction, vos clés traduites ; trié avant,il gagneatlas.locvotre mod
Un .loc de mod vaut pour toutes les langues : n'y mettez que des clés neuves. Pour une seconde langue, un second pack reprend vos clés dans un .loc dont le nom commence par ! (wiki, page Submodding).

Étape 7 : les essais

Tout pack qui ajoute ou change une table de base passe un essai de démarrage avant d'être annoncé : le jeu doit tenir 45 secondes. Chez nous, une seule table de trop (une table de propriété de contenu, qui n'a pas sa place dans un pack de mod) a suffi à fermer le jeu en huit secondes, sans message. Ensuite, à chaque reprise, on relit les rapports de plantage : l'arbre du diagnostic.

Pour les parties longues, Claude a mis en place des parties automatiques. Un pack d'essai séparé contient un script Lua qui clique dans l'interface comme un joueur, ferme les notifications une à une, puis finit le tour ; le pack est retiré à la fin, user.script.txt remis comme avant.

Pendant la partieLa campagne s'ouvrecustom_loading_screen > bottom_parent> button_continueCaméra posée sur le chef, à hauteur de jeu : l'essaidoit reproduire ce que vit un joueur.3La boucle du touravant la fin de tour, fermer d'abord les notifications, uneà une :end_turn_docker > notification_frame> button_skip× chaque notificationhud_campaign > faction_buttons_docker> button_end_turnMode joueur : la boucle à chaque tour. Mode all_players_ai :au tour 1 seulement, les suivants se jouent seuls.4Le bilantours joués, erreurs du script_log, vidages ; puisuser.script.txt remis comme avant et le pack d'essairetiré, même après un arrêt forcé.Témoin : un cas connu pour bon, même commande, optionscomprises.Un plantage qui va et vient : au moins dix essais parvariante ; d'ici là, « piste », pas « cause ».5tour suivant
La campagne s'ouvre, puis la boucle du tour : les notifications passées une à une, puis la fin de tour. Le bilan ne vaut que face à un témoin.
  • Le mode où l'IA joue tout (all_players_ai) éprouve la stabilité, pas l'histoire : aucune mission n'est émise pour une IA. L'histoire d'un seigneur se teste en mode joueur.
  • Un évènement qui n'arrive jamais : chez nous, FactionTurnStart n'arrivait à aucun script. Dans le jeu publié, une condition d'écouteur qui plante annule l'évènement pour tous, sans rien écrire au journal. Trois écouteurs de CA attendaient des systèmes de Kislev et de Cathay que notre campagne ne charge pas ; retirés au démarrage (core:remove_listener), l'évènement est revenu.
  • Steam doit être lancé : sinon le jeu se referme en quelques secondes, et l'on croit à un plantage.

Dernier conseil : si quelqu'un est devant l'ordinateur, prévenez-le avant de lancer le jeu. J'ai moi-même cliqué dans des parties d'essai, et on a cru à des plantages.

Le récapitulatif

  1. Inventaire : ce que livre chaque jeu, les clés appariées, un plan par phases.
  2. Carte logique : base déclarée, couches recalées par nom, validation, export (Borders par le menu).
  3. Startpos : tables de départ dans un pack de génération, données de l'IA, pack reconstruit, user.script.txt remis.
  4. Terrain : projet Terry sur le modèle de ChaosRobie, BOB et ses journaux, terrain de bataille.
  5. Objets et montagnes : fichiers de Warhammer I à des chemins à vous, repère vérifié.
  6. Eau : surface à 0, fond sous 0 partout, rivières continues, côte en pente douce, jugement en jeu.
  7. Scripts et textes : clés à vous, noms vérifiés, startpos régénéré.
  8. Essais : démarrage de 45 secondes, rapports de plantage, parties automatiques.
Le pack du mod ouvert dans RPFM : les dossiers campaign_maps, campaigns, composite_scene et db, puis les premières tables
Où tout finit : notre pack ouvert dans RPFM. Les exports de la carte et les données de l'IA dans campaign_maps, le startpos dans campaigns, nos fragments de tables dans db, un dossier par table.

Le récit de ces journées est dans cet article, et les leçons de méthode dans celui-ci. La suite se dessine sur la carte de la Bretonnie entière.

Proposer une idéeVoir la carte