Journal de l'atelier · · 8 min de lecture
Les 9 murs d'un portage de carte vers Warhammer III
Porter une carte de Warhammer I dans Warhammer III, c'est surtout se cogner à des murs. En quatre jours, j'en ai compté neuf gros. Pour chacun : ce qu'on voyait, ce qui se passait vraiment, comment le franchir, et ce que j'en retiens.

Comment lire ces fiches
Chaque mur suit le schéma de notre journal des erreurs : le symptôme, la cause, la solution, la leçon. Les causes ont été trouvées par Claude, l'assistant IA d'Anthropic, souvent en lisant un rapport de plantage au débogueur. Les symptômes, je les ai souvent vus en jeu, une capture de Warhammer I à côté.
Les termes techniques sont expliqués au passage. Pour la méthode complète, dans l'ordre, voyez le tutoriel.
Mur 1 : le startpos impossible
Le startpos est le fichier qui fige l'état de départ d'une campagne : factions, personnages, villes, diplomatie. Sans lui, pas de partie. C'est le jeu lui-même qui le fabrique, à partir des données qu'on lui donne.
- Symptôme : du 20 septembre au soir jusqu'à 1 h du matin, le jeu plante à chaque génération.
- Cause : le fichier de carte logique (
map_data.esf) sortait dans une variante du format ESF de CA que Warhammer III ne lit pas. Seule différence : la largeur du champ qui donne la longueur de deux tables de texte, en fin de fichier. Changer seulement l'étiquette du format a déplacé le plantage ailleurs. - Solution : une vraie conversion, glissée dans la construction du pack, et prouvée par aller-retour : avec le fichier converti, ce plantage disparaît ; avec l'ancienne variante, il revient à l'identique.
- Leçon : l'étiquette d'un format désigne une grammaire. On lit le fichier des deux côtés, on convertit ce qui diffère, puis on vérifie le résultat.
Deux petits murs attendaient derrière : nos ports n'avaient pas la forme de ceux de CA, et une minicarte déclarée n'existait pas. Le premier startpos est sorti le 21 à 12 h 08.
Mur 2 : BOB qui ne fait rien, sans le dire
BOB est le compilateur de l'Assembly Kit : il transforme le projet de terrain en fichiers que le jeu lit.
- Symptôme : BOB ne lance que 6 actions sur 15. Ni relief, ni textures, et aucune erreur. On a perdu une heure à essayer des fichiers au hasard.
- Cause : une limite de l'outil. Pour une carte que la base du jeu (celle des packs de CA) ne connaît pas, BOB ne lance que 6 de ses 15 actions, sans message ; l'ajouter à la base du kit ou à un pack de mod n'y change rien.
- La bonne voie : d'abord un témoin, pour mettre nos fichiers hors de cause : le projet de ChaosRobie, copié sous un autre nom, échouait pareil. Ensuite la communauté : le Discord de CAIME, tw-modding. Nous ne connaissons pas de voie officielle pour lever cette limite, et nos guides excluent de décortiquer un outil de CA ou de le contourner.
- Leçon : devant un outil qui ne fait rien sans erreur, trois pas, avant de toucher aux fichiers : un témoin connu pour marcher, la commande exacte, puis la communauté.
Mur 3 : Athel Loren sans emplacements de ville
- Symptôme : le terrain est prêt, et mes deux essais du 21, en fin de journée, plantent dès le chargement de la campagne.
- Cause : la veille, les 36 lignes qui donnent leurs emplacements aux 18 villes d'Athel Loren avaient été écartées, sur une vérification fausse : « Warhammer III n'en déclare aucun pour ses régions elfes ». Or le jeu cherche l'emplacement principal de chaque ville. Notre première correction visait autre chose, et le plantage est revenu à l'identique.
- Solution : les lignes rétablies à partir des modèles des Empires Immortels, et un contrôle neuf qui compare notre startpos à celui d'une campagne qui charge. Ce contrôle retrouve seul ce défaut.
- Leçon : « CA n'en a aucun » se prouve par une requête, puis par un contre-essai sous un autre angle : ici, chercher par le lieu plutôt que par la faction. Et avant de corriger un plantage, on lit dans le vidage ce que le code cherchait : ici, le mot primary.
Mur 4 : l'IA sans carte, et le pack qui passe devant
- Symptôme : plantage au moment où le jeu règle le joueur humain. Pire, deux essais tournaient sur un ancien startpos, et on a cru la correction inefficace.
- Cause : trois causes, l'une derrière l'autre. Le startpos était généré sans les données de carte de l'IA, les deux fichiers qui lui servent à trouver son chemin (
hlp_data.esfetspd_data.esf). Une faction avait un groupe d'IA vide. Et le startpos rangé dans le pack passait devant la copie posée à côté. - Solution : générer avec l'option qui produit les données de l'IA, et les embarquer ; donner à chaque faction le groupe d'IA que CA lui donne dans les Empires Immortels, sinon celui de sa culture.
- Leçon : un ordre fixe. Régénérer, copier dans le projet, reconstruire le pack, et seulement ensuite essayer.
Ce mur franchi, la campagne s'est enfin chargée.
ça fonctionne !!!! […] la carte ressemble à rien mais au moins ça charge
Mur 5 : le plantage de fin de tour que personne n'a vu
- Symptôme : ma partie du 21 au soir s'arrête à la fin du premier tour. Je ne l'ai pas signalé ; Claude l'a trouvé le lendemain, un peu par hasard, dans les rapports de plantage.
- Cause : une campagne a deux terrains. Le second, un terrain de bataille, sert dès la première bataille, même entre deux IA. Le nôtre n'avait jamais été livré.
- Solution : fabriquer ce terrain de bataille à la manière de CA, le compiler avec BOB, et faire vérifier par la construction du pack que chaque fichier déclaré existe.
- Leçon : à chaque reprise, relire les rapports de plantage et les sauvegardes récentes, même si personne n'a rien dit.
Mur 6 : « je ne reconnais pas la map »
- Symptôme : le 21 à 22 h 50, en jeu : « c'est un peu n'importe quoi », puis « je ne reconnais pas la map ».
- Cause : des modèles de Warhammer III à la place de ceux de Warhammer I ; 5 277 décors du Chaos rendus visibles de tous par une règle fausse ; la neige de la clairière d'hiver effacée, prise pour un défaut. Tout avait été contrôlé par des chiffres, rien à l'image.
- Solution : les fichiers de Warhammer I eux-mêmes, ce qui rend le mod strictement privé ; seul le décor naturel visible de tous ; la neige refaite à la manière de Warhammer III.
- Leçon : aucun visuel ne part sans comparaison à l'image avec les captures de Warhammer I. Et une bizarrerie de Warhammer I se re-rend ; elle ne se supprime pas.
Mur 7 : des trucs qui volent partout
- Symptôme : le 22 à 22 h 40, des objets flottent un peu partout. Les audits de Claude n'en trouvaient que 45.
- Cause : un repère. Dans Warhammer III, les objets vivent dans l'espace des hex, alors que le relief est rangé en pixels carrés, sur une profondeur plus courte d'un facteur √3/2. Nos objets avaient été convertis à tort : tassés de 13 % vers le sud, ils flottaient ou s'enfonçaient. Les audits, faits dans le même repère faux, ne voyaient rien.
- Solution : ne jamais convertir les positions des objets, et lire le relief à la ligne z × √3/2. Vérifié dans Terry à 23 h 23 : les pierres de lien étaient de retour dans le sol.
- Leçon : un repère se vérifie dans l'outil qui affiche. Nous l'avons prouvé en posant la caméra de Terry sur des points précis, pour voir s'ils tombaient sur la terre ou sur la mer.
Mur 8 : la mer sans eau
- Symptôme : le 23 à 3 h 40 : « sur le côté de la mer il n'y a pas d'eau, que le fond de sable ». Ni mer, ni rivières, ni lacs.
- Cause : pour adoucir la côte, la même surface avait été écrite dans les deux cartes de hauteur du terrain. Or chez CA,
heightporte la surface de l'eau etsea_heightle fond. Même valeur, profondeur nulle : le jeu ne dessine rien. Terry, lui, montrait l'eau. - Solution : rendre à chaque carte son sens. L'eau était de retour à 4 h 06.
- Leçon : avant de changer le sens d'une donnée, on la mesure chez CA. Et l'eau se juge en jeu, pas dans l'éditeur.
Mur 9 : la nouvelle partie qui se croyait une sauvegarde
- Symptôme : pas de cinématique, pas de « Comment jouer », pas de mission de victoire, et une caméra bizarre.
- Cause : le startpos datait d'avant les scripts de campagne. Or son compteur de sauvegarde (
__save_counter) ne passe à 1 que si les scripts tournent pendant la génération. Resté à 0, il faisait passer chaque nouvelle partie pour une sauvegarde. C'est la session de Claude chargée des scripts qui l'a trouvé. - Solution : régénérer le startpos après tout changement de scripts, et un contrôle automatique qui vérifie que le compteur vaut 1.
- Leçon : le startpos est une photo. Tout ce qu'il doit connaître au premier tour doit exister avant qu'on la prenne.
Ce que les neuf murs ont en commun
Relus ensemble, ces murs racontent quatre règles simples.
- Comparer à ce qui marche. Un témoin connu pour bon tranche plus vite que dix hypothèses.
- Lire ce que le code cherchait. Un vidage de plantage dit quelle donnée manquait ; une différence entre deux fichiers n'est qu'une piste.
- Juger à l'image, et en jeu. Les chiffres étaient bons quand la carte était méconnaissable.
- Respecter l'ordre des choses. Le startpos est une photo, le pack passe devant les copies, et chaque changement se teste seul.
Chacune de ces erreurs est consignée dans notre journal, avec la règle qui l'évite. J'explique comment on le tient dans Travailler avec une IA sur un gros mod. Et pour voir où tout cela nous mène, la carte de la Bretonnie entière vous attend.