Atlas de Bretonnie

Atelier des moddeurs · guide · 57 min de lecture

RPFM, le guide : ajouter une unité, une faction et un seigneur dans Total War: Warhammer III

RPFM (Rusted PackFile Manager) ouvre et fabrique les packs de Total War. Ce guide montre pas à pas comment s'en servir, puis déroule trois procédures complètes pour Total War: Warhammer III : ajouter une unité, une faction, un seigneur légendaire ou jouable. Les pièges viennent de la communauté et de notre chantier.

Relu le 25 septembre 2026, mise à jour 9.0. Écrit contre ses sources, le code et le manuel de RPFM 5.0.6 (libellés et emplacements), les données du jeu et l'Assembly Kit au patch 8.1 ; ce que la 9.0 a changé sur notre chantier y est ajouté, le reste n'a pas été revérifié point par point. Dans le doute, vérifiez, et dites-le-nous.

Ce que fait RPFM, et ce qu'est un pack§

Un mod de Total War est un fichier .pack, une archive que le jeu lit dans son dossier data. RPFM (Rusted PackFile Manager, de Frodo45127, sous licence MIT) ouvre les packs du jeu en lecture et fabrique les vôtres. Un pack range des tables (db/), des textes (text/db/<fichier>.loc), des scripts Lua (script/), des images (ui/), des définitions de modèles (variantmeshes/) et, pour une campagne, sa position de départ (campaigns/<campagne>/startpos.esf).

Anatomie d'un packatlas_chevaliers.packvotre mod : une archive, posée dans le dossier data du jeudb/land_units_tables/ne jamais le renommer ni le déplacer (RPFM)atlas_land_unitsle vôtre, à votre préfixe ; @ ou ! devant : seulement pourmodifier une ligne du jeudata__le nom de la table du jeu : jamais dans votre packtext/db/atlas.locune clé par phrase ; vaut pour toutes les languesscript/campaign/mod/atlas_script.luachargé tout seul par le jeuui/units/icons/<carte>.pngla carte d'unité : 60 × 130ui/flags/<faction>/les drapeauxui/portraits/portholes/portrait_settings*.binles réglages des portraits, par art setvariantmeshes/variantmeshdefinitions/*.variantmeshdefinitionun modèle neufcampaigns/<campagne>/startpos.esfproduit par le jeu ; un par campagnecampaign_maps/<carte>/hlp_data.esf · spd_data.esfproduits par le jeu, pour une carte neuvesettings.rpfm_reserved · notes.rpfm_reservedles réglages et notes de RPFM, ignorés par le jeuTables et .loc : fusionnés par clé.Autres fichiers : même chemin, un seul gagne.
Un pack range chaque fichier à son chemin. Les fragments d'une même table (un dossier _tables), comme les .loc, se fusionnent par clé ; pour tout autre fichier, deux fichiers au même chemin ne se chargent pas tous les deux : un seul gagne. En or, ce que le jeu produit ; en gris, ce que seul RPFM lit.

Ce guide suit RPFM 5.0.6, dernière version stable au 24 septembre 2026, et des tables relevées sur le patch 8.1. Pour la mise à jour 9.0, sortie le même jour, les schémas de RPFM ont été publiés dès ce jour-là ; les tables citées ici n'ont pas été relues une à une depuis : dans le doute, vérifiez. Toute modification suit ces six étapes :

  1. Trouver

    La ligne du jeu la plus proche.

    View → Toggle Global Search Window (Ctrl+Shift+F)

  2. Copier

    Dans votre table (db/<table>_tables/<fichier>), sous une clé à vous (la même pour modifier une ligne du jeu).

    clic droit sur le pack → Create… → Create DB, puis Paste as New Row

  3. Nommer

    Les textes affichés au joueur, dans text/db/<fichier>.loc.

    clic droit sur le pack → Create… → Create Loc

  4. Contrôler

    Références, clés, champs vides.

    panneau Diagnostics → Check PackFile

  5. Essayer

    Le pack installé dans <jeu>\data\, en jeu.

    clic droit sur la racine du pack → Install

  6. Publier

    La version optimisée.

    clic droit sur la racine du pack → Save Pack For Release… (sur une copie)

Les mots du métier§

MotSens
Packl'archive d'un mod, posée dans le dossier data du jeu
Tableun tableau de la base du jeu, rangé dans db/<table>_tables/
Cléce qui identifie une ligne, unique dans sa table (parfois plusieurs colonnes)
Fragmentun fichier de table ; le jeu lit tous les fragments d'une table, les siens et ceux des mods
Datacoreun fragment nommé comme celui du jeu (data__), qui remplace la table entière
.locun fichier de textes : une clé par phrase affichée
Schémala description des tables : colonnes, clés, liens (celle de RPFM, ou celle du kit : TWaD_*.xml)
Cache des dépendancesles données du jeu, préparées par RPFM pour chercher et contrôler
Assembly Kitle kit officiel de Creative Assembly (Steam → Bibliothèque → Outils)
Sous-typele type exact d'un personnage (agent_subtypes)
Art setl'ensemble des apparences d'un personnage (campaign_character_art_sets)
Startposstartpos.esf, la sauvegarde du tour 0 d'une campagne
Racine du packla première ligne de l'arbre du pack, à son nom ; son clic droit porte Install, Uninstall, Save Pack For Release… et Build Startpos
Palettela recherche par nom de RPFM : Ctrl+Shift+P pour une action, Ctrl+P pour un fichier
%APPDATA%le dossier des réglages de votre compte Windows : tapez %APPDATA% dans la barre d'adresse de l'Explorateur
Groupe militairemilitary_group, le groupe de recrutement d'une faction : une unité permise à un groupe l'est à toutes ses factions (chez CA, les factions de Bretonnie ont wh_main_group_bretonnia)
twad_key_deletesla table qui retire des lignes du jeu au lancement (Warhammer III, depuis le patch 6.3) : colonnes table_name et key
MixerMIXER – Mixu's Unlocker, un mod de Mixu : son startpos rend jouables toutes les factions des Empires Immortels et des Royaumes du Chaos ; selon le wiki, c'est le seul mod de startpos de la plupart des joueurs
Error / Warning / Infoles trois gravités des diagnostics : Error, un problème en jeu ; Warning, un problème probable ; Info, à savoir. Visez zéro Error

Installer et configurer RPFM 5.0.6§

Téléchargez RPFM depuis ses versions publiées, puis, une fois pour toutes :

  1. PackFile → Settings. Game Paths : le Game Folder (le dossier de l'exécutable du jeu) et l'Assembly Kit Folder. Extra Paths : le MyMod's Folder, hors de Program Files, où Windows protège l'écriture. Default Game : Warhammer 3.
  2. About → Check Updates, puis, dans le gestionnaire de mises à jour, le bouton de la ligne Schema Updates : le schéma dit à RPFM comment lire chaque table du patch en cours (vous pouvez aussi cocher Check Schema Updates on Start dans les réglages).
  3. Game Selected → Generate Dependencies Cache, quelques minutes : RPFM prépare les données du jeu pour ses recherches et ses contrôles. Sans Assembly Kit configuré, il prévient que ses diagnostics donneront de faux positifs.
Régler RPFM : trois gestesPackFile → SettingsSettingsGame PathsWarhammer 3Game Folder<jeu>Assembly Kit Folder<Assembly Kit>Extra PathsMyMod's Folder<MyMod>pas dans Program Files : Windows y protège l'écritureDefault GameWarhammer 31About → Check UpdatesUpdate ManagerProgram Updates:Schema Updates:Lua Autogen Updates:Old AK Updates:à cocher aussi, dans Settings : Check Schema Updates on Start2Game Selected → Generate Dependencies Cacheles données du jeule cachequelques minutes ; pour ses recherches et ses contrôlesSans Assembly Kit configuré, RPFM prévient : de fauxpositifs dans les diagnostics.3Après une mise à jour du jeu : refaites 2 et 3.
Schéma, disposition courante. Trois réglages à faire une fois, dans l'ordre : les dossiers (1), les schémas des tables (2), le cache des dépendances (3) ; après une mise à jour du jeu, on refait 2 et 3.

Les gestes de base§

La fenêtre de RPFM 5.0.6, zone par zone :

atlas_chevaliers.packPackFile MyMod View Game Selected Tools Aboutatlas_main_unitsatlas.locPack Contentsatlas_chevaliers.packdbmain_units_tablesatlas_main_unitstextdbatlas.locunitland_unitcasteatlas_chevaliersatlas_chevaliersmelee_cavalrySave Pack As…Save Pack For Release…InstallUninstallChange PackFile Type ▸Optimize PackFileBuild StartposDependenciesGame FilesParent FilesAssembly Kit Filesclic droit → ImportDiagnosticsCheck PackFileErrorWarningInfoErrorInvalid referenceatlas_main_unitsland_unitGlobal Search · Ctrl+Shift+F123456789
  1. Les menusPackFile, MyMod, View, Game Selected, Tools, About. Les réglages : PackFile → Settings (Ctrl+,) ; les schémas : About → Check Updates ; le cache : Game Selected → Generate Dependencies Cache.
  2. Les ongletsun par fichier ouvert.
  3. Pack Contentsl'arbre du pack ; sa première ligne, la racine, porte le nom du pack.
  4. Le clic droit sur la racineSave Pack As…, Save Pack For Release…, Install, Uninstall, Change PackFile Type, Optimize PackFile, Build Startpos (et d'autres actions) : ce qui touche au pack entier.
  5. Dependenciesles fichiers du jeu, des mods parents et de l'Assembly Kit, en lecture seule ; clic droit → Import en amène un dans votre pack.
  6. La table ouvertevotre ligne, surlignée ; en rouge, une référence invalide : aucune ligne de land_units ne porte encore cette clé. Le fichier atlas_main_units n'a pas de @ : il ajoute une clé neuve.
  7. DiagnosticsCheck PackFile relit le pack ; chaque ligne a sa gravité : Error, Warning ou Info. Visez zéro Error.
  8. Global Searchmasquée au départ : View → Toggle Global Search Window (Ctrl+Shift+F) ; sources Game Files ou Assembly Kit Tables.
  9. La barre d'étatles messages brefs de la dernière opération.
Schéma, disposition courante. Les réglages, les schémas et le cache sont dans les menus (1) ; ce qui touche au pack entier, au clic droit sur sa racine (4). Toute action se retrouve aussi par son nom dans la palette : Ctrl+Shift+P. Les menus Special Stuff et Edit → Preferences des anciens tutoriels n'existent pas dans la 5.0.6.

Créer son mod§

MyMod → New MyMod. Choisissez le jeu (Warhammer 3) et un nom avec des soulignés, sans espace ni .pack (auteur_description). RPFM crée le pack <MyMod>\warhammer_3\<nom>.pack et, à côté, le dossier <MyMod>\warhammer_3\<nom>\ pour vos fichiers de travail (plus un dépôt Git ou un projet VSCode si vous les cochez), puis ouvre le pack. Le dossier MyMod doit être réglé avant, sinon RPFM refuse.

Trouver une donnée du jeu§

View → Toggle Global Search Window (Ctrl+Shift+F) : source Game Files (ou Assembly Kit Tables), type DB (Loc pour les textes), puis la clé, soulignés compris ; un clic ouvre la table à la bonne ligne, en lecture seule. Autres voies : PackFile → Load All CA Packs (lecture seule ; grisée quand le cache des dépendances est chargé), ou View → Toggle Dependencies Window, clic droit → Import, qui amène un fichier du jeu dans votre pack : renommez aussitôt une table amenée ainsi (F2), car sous le nom data__ elle remplacerait celle du jeu.

Créer une table§

Clic droit sur le pack → Create… → Create DB ; choisissez la table (land_units_tables) et nommez le fichier avec votre préfixe : db/land_units_tables/atlas_land_units. Le nom compte : quand votre fichier et celui du jeu (data__) donnent la même clé, celui dont le nom trie en premier gagne. Pour ajouter des lignes (clés neuves), tout nom à vous convient ; pour modifier une ligne du jeu (même clé), commencez le nom par @ ou !.

Partir d'une ligne du jeu§

  1. Dans la table du jeu, sélectionnez la ligne modèle (cliquez son numéro) : Copy… → Copy.
  2. Dans votre table : Paste as New Row (Ctrl+Shift+V). Pour ajouter une ligne, changez la clé en premier : sinon votre ligne n'ajoute rien, elle entre en concurrence avec celle du jeu.
  3. Pour dupliquer une de vos lignes : Clone… → Clone and Append.

Suivre une clé§

Clic droit sur une cellule → Go To… → Go To Definition (la ligne citée), Go To Loc Entry (son texte) ou Find References (tout ce qui cite cette clé) ; Rename References renomme une clé partout (le manuel l'appelle Cascade Edition). C'est ainsi qu'on démonte une unité ou un seigneur, table après table.

Suivre une cléatlas_chevaliersclic droit sur une celluleGo To…Find References3Rename References4Go To Definition1Go To Loc Entry2building_units_allowed · unitunits_custom_battle_permissions · unit…3Find Referencesqui la citemain_unitsunitatlas_chevaliers3land_unitatlas_chevaliers11Go To Definitionla ligne citéeland_unitskeyatlas_chevaliers22Go To Loc Entryson textetext/db/atlas.locland_units_onscreen_name_atlas_chevalierstextle nom affiché4Rename References : renomme la clé partoutle manuel l'appelle Cascade Edition
Schéma : au clic droit sur une cellule, quatre gestes suivent une clé d'une table à l'autre : la ligne qu'elle cite (1), son texte (2), tout ce qui la cite (3) ; Rename References la renomme partout (4). Chaque cellule porte le numéro du geste qui en part.

Écrire les textes§

  1. Clic droit sur le pack → Create… → Create Loc, par exemple text/db/atlas.loc.
  2. Trois colonnes : key (la clé), text (le texte affiché) et tooltip, dont le rôle est inconnu selon le manuel de RPFM : faites comme les lignes de CA.
  3. La clé a la forme <table>_<colonne>_<clé de la ligne>. Exemple : le nom de l'unité atlas_chevaliers (colonne onscreen_name de land_units) a pour clé land_units_onscreen_name_atlas_chevaliers.
  4. Clic droit sur le pack → Generate Loc Data produit deux fichiers. zzz_… : les clés qui manquent à vos tables ; renommez-le ou recopiez ses lignes dans votre .loc, puis remplissez-les. aaa_… : les textes du jeu que vos tables citent ; n'en gardez que ce que vous changez. Ne publiez aucun des deux sous son nom d'origine : RPFM les réécrit à chaque génération, et l'optimiseur retire aaa_… (et zzz_… s'il est vide).
Une clé de texteland_unitsla table+_onscreen_name_la colonne+atlas_chevaliersla clé de la ligneland_units_onscreen_name_atlas_chevaliersdans votre .loc : le nom de l'unitéClic droit sur le pack → Generate Loc Datazzz_…vos clés sans texte : renommez-le, ou recopiez ses lignes dansvotre .loc, puis remplissez-lesaaa_…des textes du jeu que vos tables citent : n'en gardez que ce quevous changezNi l'un ni l'autre sous son nom d'origine : RPFM les réécrità chaque génération ; l'optimiseur retire aaa_… (et zzz_…s'il est vide).
Une clé de texte suit la forme <table>_<colonne>_<clé de la ligne>. Generate Loc Data produit deux fichiers : zzz_… pour vos clés sans texte, aaa_… pour les textes du jeu que vos tables citent.

Vérifier, tester, publier§

Les diagnostics§

View → Toggle Diagnostics Window → Check PackFile, avant chaque essai : un défaut repéré ici épargne un lancement du jeu pour rien. Chaque ligne porte une gravité : Error (un problème en jeu), Warning (un problème probable), Info (à savoir) ; visez zéro Error. La figure suit un mod du diagnostic jusqu'au jeu.

Du diagnostic au jeuCheck PackFiledans le panneau DiagnosticsError, Warning, Info : visez zéro Error.1Ctrl+Senregistre les packs ouverts.2Clic droit sur la racine → InstallRPFM copie le pack dans le dossier data du jeu.3Cocher le moddans le lanceur, Kaedrin's Mod Manager ou Runcher.Absent de la liste : clic droit sur la racine → ChangePackFile Type → Mod, et Index Includes Timestamp décoché.4Essayer en jeuune unité : bataille personnalisée ; une faction, unseigneur : campagne neuve.Le jeu plante au lancement : retour à 1Invalid reference, Value Cannot be Empty,Banned TableUn script ne fait rien : lisez son journalscript/enable_console_logging →script_log_*.txtLe jeu se referme à chaque lancement : une ligne restéeuser.script.txt :quit_after_campaign_processing;5
Cinq marches, dans l'ordre : chaque essai en jeu commence par Check PackFile. Si le jeu plante, si un script se tait ou si le jeu se referme sans cesse, la sortie rouge dit où regarder.

RPFM contrôle :

Essayer en jeu§

  1. Ctrl+S (enregistre les packs ouverts), puis clic droit sur la racine du pack (la première ligne de l'arbre, à son nom) → Install : RPFM copie le pack dans <jeu>\data\.
  2. Cochez le mod dans le lanceur de Creative Assembly, ou dans un gestionnaire tiers (Kaedrin's Mod Manager, Runcher).
  3. Même menu → Uninstall : retire la copie.

Publier§

Gardez votre pack de travail : copiez-le d'abord (ou Save Pack As… sous un autre nom), car Save Pack For Release… enregistre la version optimisée à la place du pack ouvert. Clic droit sur la racine du pack → Save Pack For Release… : l'optimiseur s'ouvre, puis le pack est enregistré ; Optimize PackFile, au même menu, fait le même travail sans enregistrer, pour relire avant. L'optimiseur ne fait que ce que vous cochez :

Publier sans rien casserD'abord, une copiePack de travailgardé tel quelSa copiecelle qu'on publieSave Pack As…, sous un autre nom, fait aussi une copie.1Dans la copie : Save Pack For Release…, au clicdroit sur la racineatlas_chevaliers.packSave Pack As…Save Pack For Release…Optimize PackFileOptimize PackFile, au même menu : le même travail, sansenregistrer, pour relire avant.Il enregistre la version optimisée à la place du packouvert.2L'optimiseur ne fait que ce qui est cochéIdentiques au jeu, doublons, fichiers videscoché par défautCompresser le packcoché par défautArt sets et variantes inutilisés des portraitsdécoché par défautImport datacores into twad_key_deletesdécoché par défaut ; cochez-le si votre pack contient unetable recopiée (Warhammer III)3Après l'option des datacorestwad_key_deletestable_name · keyvérifiez-la, puis renommez-la : RPFM la réécriraitdb/land_units_tables/data__la table recopiée du jeu : supprimez-la vous-même4
Schéma. Save Pack For Release… remplace le pack ouvert par sa version optimisée : travaillez sur une copie. L'optimiseur ne fait que ce qui est coché (ici, ses réglages par défaut) ; son option des datacores inscrit dans twad_key_deletes les lignes retirées, et c'est à vous de supprimer ensuite la table recopiée.

Après une mise à jour du jeu§

  1. About → Check Updates, bouton des schémas.
  2. Game Selected → Generate Dependencies Cache : sinon RPFM compare vos tables à un jeu périmé.
  3. Sur chaque table signalée Outdated table : clic droit → Update Table.
  4. Relisez les colonnes nouvelles : RPFM y met des valeurs par défaut, pas forcément les bonnes pour vos lignes.

À la 9.0, les schémas de RPFM sont sortis le jour même de la mise à jour. Si vous écrivez aussi dans l'Assembly Kit : Steam le met à jour après le jeu (chez nous, une heure plus tard) et réécrit raw_data\db ; les lignes que vous y aviez ajoutées disparaissent. Vérifiez-les et restaurez-les avant de régénérer le cache des dépendances et de reconstruire quoi que ce soit.

Les règles des packs : qui passe devant qui§

Le jeu lit tous les fragments d'une table, les siens et ceux de chaque mod : tant que les clés diffèrent, les lignes s'additionnent. Quand deux fragments donnent la même clé, celui dont le nom trie en premier gagne ; et un fragment qui porte le chemin exact d'un fichier du jeu le remplace tout entier.

La figure ci-dessous montre qui gagne quand plusieurs fragments d'une même table donnent la même clé.

Les fragments d'une tabledb/land_units_tables/! # $ % & ' ( ) + , - ; = @ 0-9 a-z [ ] ^ _ ` { } ~lus par ordre de nom, du premier au dernier (wiki, page Submodding)@mon_modwh_dlc07_brt_cav_knights_errant_0 · valeur Avotre mod, trié avant le jeudata__wh_dlc07_brt_cav_knights_errant_0 · valeur Bla table du jeuzmon_modperdwh_dlc07_brt_cav_knights_errant_0 · valeur Cvotre mod, trié après le jeu : la ligne du jeu gagne, votre valeurest ignoréeLe jeu garde la valeur A : le premier nom trié gagne.data__ · dans votre modMême chemin que le fichier du jeu : il le remplace en entier(un « datacore »). Les mises à jour de CA sur cette table nepassent plus ; deux datacores de la même table s'excluent.Retirer une ligne du jeutwad_key_deletes : table_name = land_units · key = <clé>clic droit sur les lignes du jeu→ Add Selection to Key DeletesWarhammer III, depuis le patch 6.3
Trois fragments d'une même table donnent la même clé : le jeu garde celui dont le nom trie en premier, les autres sont ignorés. Un nom en z sert à des lignes neuves que d'autres mods doivent pouvoir corriger (manuel de RPFM, page Datacores). Un fragment nommé comme le fichier du jeu le remplace tout entier ; pour retirer une ligne du jeu, une table twad_key_deletes.

Exemple : la table des unités de bataille du jeu est le fichier db/land_units_tables/data__. Selon le manuel de RPFM, @mon_mod passe devant, zmon_mod derrière, et un fragment nommé data__ la remplace entière : c'est un « datacore », que les diagnostics signalent (« Leaving them named data__ will overwrite the base game files », prévient Casualfield).

Quatre règles qui évitent les pires surprises§

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).

Votre premier mod, en dix minutes§

Avant les trois procédures, un essai court qui vérifie aussi votre installation : rendre une unité du jeu plus chère en bataille personnalisée. Le tutoriel RPFM For Dummies du wiki commence de même, par une modification de table trouvée avec la recherche globale.

Un premier mod en dix minutesMyMod → New MyModWarhammer 3 ; RPFM crée le pack, puis l'ouvre.moi_premier_mod.pack1View → Toggle Global Search WindowCtrl+Shift+F ; Game Files, DB, puis la clé :wh_dlc07_brt_cav_knights_errant_0main_units_tablesla table du jeu, en lecture seule2Copy… → Copyun clic sur le numéro de la ligne, puis clic droit3Create… → Create DBclic droit sur votre pack : table main_units_tables, nom@moi_main_unitsles deux fichiers, lus par ordre de nom :@moi_main_unitsle vôtre, trié avant : il gagnedata__celui du jeu4Paste as New Row · Ctrl+Shift+Vmême clé : vous modifiez l'unité du jeumultiplayer_cost700999son prix en bataille personnalisée ; 700 chez CA5Panneau Diagnostics → Check PackFileaucune ligne Error6Ctrl+S, puis clic droit sur la racine → Installcochez le mod dans le lanceurEn bataille personnalisée, les Chevaliers errantscoûtent 999.7
Sept gestes, de la table du jeu à l'essai en jeu : votre fichier @moi_main_units trie avant celui du jeu (data__), sa ligne gagne donc, et les Chevaliers errants passent de 700 à 999 en bataille personnalisée. Pour ajouter une unité au lieu de la modifier, on change la clé : c'est la procédure 1.
  1. MyMod → New MyMod : jeu Warhammer 3, nom moi_premier_mod.
  2. View → Toggle Global Search Window (Ctrl+Shift+F) : source Game Files, type DB ; cherchez wh_dlc07_brt_cav_knights_errant_0, puis cliquez le résultat de main_units_tables : la table du jeu s'ouvre à la bonne ligne, en lecture seule.
  3. Cliquez le numéro de la ligne, puis clic droit → Copy… → Copy.
  4. Clic droit sur votre pack → Create… → Create DB : table main_units_tables, nom @moi_main_units. Le @ fait trier votre fichier avant celui du jeu (data__) : c'est donc le vôtre qui gagne.
  5. Clic droit dans la table vide → Paste as New Row (Ctrl+Shift+V). Gardez la clé : ici, on modifie l'unité du jeu. Passez multiplayer_cost (son prix en bataille personnalisée ; 700 chez CA) à 999.
  6. Panneau Diagnostics → Check PackFile : aucune ligne Error.
  7. Ctrl+S, puis clic droit sur la racine du pack → Install ; cochez le mod dans le lanceur. En bataille personnalisée, les Chevaliers errants de Bretonnie coûtent 999.

Pour ajouter une unité au lieu de la modifier, on change la clé : c'est la procédure 1.

Procédure 1 : ajouter une unité§

La voie sûre : copier une unité du jeu qui ressemble à la vôtre, puis changer ce qui doit changer. Exemple suivi : les Chevaliers errants de Bretonnie, wh_dlc07_brt_cav_knights_errant_0.

Avant de commencer : l'unité modèle§

La figure suivante montre les tables d'une unité et les colonnes qui les relient.

Une unitémain_unitsclé : unitland_unit → land_unitscoûts, caste, ui_unit_group_landminimumland_unitsclé : key (la même que unit chez CA)caractéristiques, armesman_entity → battle_entitiesprimary_melee_weapon → melee_weaponsminimumunit_variantsclé : faction + unitunit → land_unitsvariant → variantsunit_card → ui/units/iconsminimumui/units/icons/<carte>.pngune image PNG de 60 × 130minimumvariantsclé : variant_nameseulement pour un modèle neuf→ .variantmeshdefinitionfacultatifunit_description_short_texts· unit_description_historical_textsun texte propre à l'unitéfacultatifunits_to_groupings_military_permissionsclés : unit, military_groupmilitary_group = factions.military_group(wh_main_group_bretonnia)campagnebuilding_units_allowedclé : key (un nombre unique)building → building_levelsécuries 2 à 5 : une ligne chacunecampagneunits_custom_battle_permissionsclé : unit + faction + general_unitla bataille personnaliséegeneral_unit = 0minimumtext/db/<mod>.locland_units_onscreen_name_<clé>minimum
Les tables d'une unité, en arbre : chaque fiche donne sa clé et ses liens. Minimum : ce qu'il faut pour la bataille personnalisée ; campagne : en plus, pour la recruter en campagne ; facultatif : selon l'unité. La carte d'unité est une image (PNG de 60 × 130), pas une table.

Les étapes de l'unité§

  1. Global Search sur la clé du modèle : elle figure dans 24 tables du kit ; le tableau ci-dessous donne celles qu'il faut.
  2. Pour chacune : Create DB (un fichier à votre préfixe), Paste as New Row, puis changez ce qui fait l'unité et gardez le reste (voir « Ce qui change, ce qui reste »). Comme CA, donnez la même clé à main_units.unit et à land_units.key.
  3. Réglez caractéristiques, coûts, apparence et carte, puis le recrutement, la bataille personnalisée et les textes.
  4. Contrôle : clic droit sur votre clé → Find References. Le manuel de RPFM conseille ce contrôle après l'ajout d'une unité : il montre si elle est reliée partout où il faut (coûts, recrutement, factions).
  5. Diagnostics, Install, essai en bataille personnalisée.
TableÀ mettreCléLiens
main_unitsla copie ; coûts, caste, ui_unit_group_landunitland_unit → land_units.key
land_unitsla copie ; caractéristiques, armeskeyman_entity → battle_entities ; primary_melee_weapon → melee_weapons ; short_description_text → unit_description_short_texts ; historical_description_text → unit_description_historical_texts
unit_variantsname = votre clé (comme CA), faction vide (= toutes les factions), variant, unit_cardfaction + unitunit → land_units.key ; variant → variants.variant_name ; la carte : ui/units/icons/<unit_card>.png
variantsseulement pour un modèle neuf : variant_filenamevariant_name→ variantmeshes/variantmeshdefinitions/<nom>.variantmeshdefinition
units_to_groupings_military_permissionsl'unité et le groupe militaireles deux colonnesmilitary_group = factions.military_group (par exemple wh_main_group_bretonnia)
building_units_allowedbuilding, unit, key (un nombre unique), faction videkeybuilding → building_levels.level_name ; unit → main_units
units_custom_battle_permissionsla faction de bataille (chez CA : wh_main_brt_bretonnia), general_unit = 0unit + faction + general_unit→ main_units, factions
unit_description_short_texts, unit_description_historical_textsseulement pour un texte propre à l'unitékeycitées par land_units
Copier une unité de CAclé de CAwh_dlc07_brt_cav_knights_errant_0votre cléatlas_chevaliersEn vert, ce qui change ; « gardé », la valeur de CA.Vos fichiers : db/<table>_tables/atlas_…sans @ : vous ajoutezmain_unitsunitclé de CA→atlas_chevaliersland_unitclé de CA→atlas_chevalierscastemelee_cavalrygardéland_unitskeyclé de CA→atlas_chevaliersmelee_attack28gardéunit_variantsnameclé de CA→atlas_chevaliersfaction(vide)gardéunitclé de CA→atlas_chevaliersvariantwh_dlc07_brt_knights_errantgardéunit_cardwh_dlc07_brt_knights_errantgardéname : hors clé ; CA y met la clé de l'unité, etunit_variants_colours le cite.units_to_groupings_military_permissionsunitclé de CA→atlas_chevaliersmilitary_groupwh_main_group_bretonniagardébuilding_units_allowedkey→4 nombres neufsunitclé de CA→atlas_chevaliersbuildingwh_main_brt_stables_2 … _5gardéchez CA : 60317, 60343, 63497, 63640, une ligne par écurie ; et deuxports de Copher.les nombres : clic droit → Generate Ids.units_custom_battle_permissionsunitclé de CA→atlas_chevaliersfactionwh_main_brt_bretonniagardégeneral_unit0gardétext/db/atlas.locun fichier à vouskeyland_units_onscreen_name_atlas_chevalierstextle nom affichéUne clé de CA oubliée : votre ligne concurrence celle de CA.
L'exemple du guide, rempli avec les lignes de CA des Chevaliers errants (Assembly Kit, patch 8.1) : votre clé partout où figure celle de CA (name de unit_variants compris) et des nombres neufs dans building_units_allowed, en vert ; le reste gardé pour un premier essai, en gris. Contrôle : clic droit sur votre clé → Find References.

Ce qui change, ce qui reste§

RPFM a aussi un Unit Editor, expérimental selon son manuel ; ce guide suit la voie des tables.

Les tables facultatives de l'unité§

D'après le guide de Casualfield, selon ce que l'unité doit faire :

Les textes de l'unité§

Le minimum viable de l'unité§

Les pièges de l'unité§

Ce que l'unité demande au startpos§

Rien, sauf pour exister dès le tour 0 (start_pos_land_units, start_pos_settlement_garrisons, réserves de mercenaires) ; même alors, un script dispense du startpos : cm:create_force_with_general pose une armée, cm:add_unit_to_faction_mercenary_pool garnit une réserve.

Vérifier que l'unité marche§

  1. Diagnostics : ni référence invalide ni texte manquant.
  2. Bataille personnalisée avec la faction de bataille choisie : l'unité est dans la liste, avec sa carte et son nom ; en bataille, le modèle est entier.
  3. Campagne neuve : l'unité se recrute à chaque niveau de bâtiment listé.

Procédure 2 : ajouter une faction§

Une faction tient en quelques tables, mais elle n'existe sur la carte que par le startpos.

Avant de commencer : ce qu'il faut réunir§

Une campagne cible, une culture et une sous-culture existantes, les drapeaux, et le temps de générer un startpos.

La figure montre les tables d'une faction, et le chemin des tables de départ jusqu'au startpos.

Une factionfactionsclé : keysubculture → cultures_subculturesname_group → names_groupsmilitary_group → groupings_militaryflags_path = ui\flags\<clé>ui/flags/<clé>/mon_24.png · mon_64.png · mon_256.png…les drapeaux : des images à fournirfaction_agent_permitted_subtypesclé : faction + agent + subtypesubtype → agent_subtypesles seigneurs et héros permistext/db/<mod>.locfactions_screen_name_<clé>factions_screen_adjective_<clé>factions_screen_name_when_rebels_<clé>factions_attack_desc_<clé>factions_defend_desc_<clé>start_pos_factionsclé : ID (un entier neuf)faction, campaign, playable, is_majorcai_personality_groupobligatoirestart_pos_regionsclé : region + campaignowning_faction → start_pos_factions.IDstart_pos_charactersclé : IDfaction → start_pos_factions.IDType = generalministerial_position = faction_leaderstart_pos_land_unitsclé : idgeneral → start_pos_characters.IDunit_type → main_unitsPuis le startposstart_pos_*vos tablesle jeugénèrestartpos.esfdans le packUn seul startpos par campagne ; Empires Immortels et Royaumesdu Chaos : Mixer.
Une faction : sa ligne de factions, ses drapeaux, ses seigneurs permis, ses textes et ses tables start_pos_*. Le jeu en tire le startpos, un seul par campagne, que votre mod remplace en entier : pour les Empires Immortels et les Royaumes du Chaos, la communauté passe par Mixer.

Les étapes de la faction§

  1. factions : copiez une faction voisine (wh_main_brt_bordeleaux) sous une clé neuve ; réglez subculture, name_group, military_group, flags_path = ui\flags\<clé> et les couleurs (ou Tools → Faction Painter).
  2. Les drapeaux : un dossier ui/flags/<clé>/ comme ceux de CA : mon_24.png, mon_64.png, mon_256.png (24, 64 et 256 pixels), mon_64_glow.png, mon_icon.png, mon_rotated.png, mon_banner.dds (noms de fichiers de CA, « mon » compris, relevés au patch 8.1). Lesquels sont indispensables n'est pas confirmé : fournissez tout le jeu.
  3. faction_agent_permitted_subtypes : les lignes du modèle, qui disent quels seigneurs et héros la faction peut avoir (Bordeleaux en a 12 : general, colonel, minister, champion, wizard).
  4. Les textes, puis les tables de départ du tableau, dans le kit (Dave) ou dans le pack (RPFM), plus start_pos_character_to_settlements pour un chef en garnison et start_pos_diplomacy.
  5. Le startpos régénéré (voir « Ce qui exige un nouveau startpos »), rangé dans campaigns/<campagne>/startpos.esf du pack ; puis Diagnostics, Install (sauf pour un pack ouvert depuis le dossier data, qu'Install refuse), campagne neuve.
TableÀ mettreCléLiens
factionsla factionkeysubculture → cultures_subcultures ; name_group → names_groups ; military_group → groupings_military
faction_agent_permitted_subtypesles seigneurs et héros permisfaction + agent + subtype→ agent_subtypes
start_pos_factionsID (un entier neuf), faction, campaign, playable, is_major, cai_personality_groupID→ factions, campaigns
start_pos_regionsowning_faction = cet ID, faction_capitalregion + campaign→ start_pos_factions.ID
start_pos_charactersle chef : Type = general, subtype, ministerial_position = faction_leader, portrait_id, startx et starty, Name et SurnameIDfaction → start_pos_factions.ID ; Name → names.id ; portrait_id → campaign_character_art_sets
start_pos_land_unitsl'armée : unit_type, general, soldiersid→ main_units ; → start_pos_characters.ID
Les drapeaux d'une factionfactionsflags_pathui\flags\<clé>ui/flags/<clé>/mon_24.png24 pxmon_64.png64 pxmon_256.png256 pxQuatre autres fichiers :mon_64_glow.png100 × 100mon_icon.png256 × 256mon_rotated.png112 × 90mon_banner.dds256 × 256 (DXT5)« mon » : le nom de fichier de CA ; noms et tailles relevés sur lesfichiers du jeu (patch 8.1)?Lesquels sont indispensables : non confirmé.Fournissez tout le jeu.
Le dossier ui/flags/<clé>/ d'une faction, comme ceux de CA : trois tailles (24, 64 et 256 pixels) et quatre autres fichiers, noms et tailles relevés sur les fichiers du jeu (patch 8.1), « mon » compris. Lesquels sont indispensables n'est pas confirmé : fournissez tout le jeu.

Les textes de la faction§

factions_screen_name_<clé>, factions_screen_adjective_<clé>, factions_screen_name_when_rebels_<clé>, factions_attack_desc_<clé> et factions_defend_desc_<clé> ; le nom du chef vient de names_name_<id>.

Le minimum viable de la faction§

factions, les drapeaux, faction_agent_permitted_subtypes, les textes, start_pos_factions, une région ou un chef avec son armée, et le startpos régénéré.

Les pièges de la faction§

Ce que la faction demande au startpos§

Tout ce qui la fait exister : le wiki range parmi ce qui demande un startpos les factions jouables, comme celles qui apparaissent en cours de partie. Une fois la faction dans le startpos, le script prend le relais : cm:transfer_region_to_faction(region, faction), cm:create_force_with_general(...), ou le système Campaign Custom Starts de CA (régions, armées, diplomatie, effets).

Vérifier que la faction marche§

  1. Diagnostics propres ; campaigns/<campagne>/startpos.esf est bien dans le pack, daté de la génération.
  2. Tables de départ passées par un pack de mod : %APPDATA%\The Creative Assembly\Warhammer3\crash_report\bad_mods_report.txt nomme l'enregistrement fautif, un à la fois.
  3. Campagne neuve : la faction est sur la carte, dans sa région, avec son drapeau et son nom ; son chef mène son armée.
  4. Jouable, elle se choisit à l'écran de sélection, une fois la procédure 3 faite pour son chef.

Procédure 3 : ajouter un seigneur légendaire ou jouable§

Trois paliers : A, le seigneur existe dans la base de données ; B, un script le fait apparaître dans une faction existante ; C, il se choisit à l'écran « Nouvelle campagne », et ce palier seul demande un startpos. Prérequis : son unité de bataille (procédure 1), son modèle, son portrait.

Un seigneur en trois paliersSans startposALa base de donnéesagent_subtypesunits_custom_battle_permissionset l'apparence, les compétences, les textes ;general_unit = 1 : pour la bataille personnaliséeIl se choisit en bataille personnalisée.BUn script?cm:spawn_character_to_poolpour une faction qui existe déjàà tester : non éprouvé dans Warhammer IIIPartie neuve : parmi les seigneurs à recruter.Avec un startpos régénéréCL'écran « Nouvelle campagne »start_pos_charactersstart_pos_starting_general_optionsfrontend_faction_leadersstartpos.esfet playable = 1 dans start_pos_factionsSa fiche paraît à l'écran de sélection.
Trois paliers : A, le seigneur existe dans la base ; B, un script le fait paraître dans une faction qui existe déjà (à tester) ; C, il se choisit à l'écran « Nouvelle campagne ». Seul le palier C demande un startpos régénéré.

Palier A : le seigneur dans la base de données§

  1. agent_subtypes : copiez un seigneur voisin (wh_dlc07_brt_alberic) ; auto_generate décoché pour un personnage unique, associated_unit_override = son unité, recruitment_category = legendary_lords, recruitable = 1 et cap = -1 (comme Alberic). Laissez magic_lore vide : rempli, avec legendary_lords, il peut masquer les autres seigneurs légendaires de la réserve de recrutement (wiki, page Agent subtypes tables).
  2. L'apparence : campaign_character_art_sets → campaign_character_arts (un id unique) → agent_uniforms → variants.
  3. Le portrait : Warhammer III le lit dans ui/portraits/portholes/portrait_settings*.bin, rangé par art set (pour Alberic, portrait_settings__3.bin, vignette de 300 × 164 : relevés sur les fichiers de CA, patch 8.1). Dans RPFM : Create… → Create Portrait Settings, puis son éditeur. Chez CA, campaign_character_arts.portrait reste vide.
  4. Les compétences : character_skill_node_sets (colonne agent_subtype_key), character_skill_node_set_items (set, item), character_skill_nodes (tier = colonne de l'arbre, indent = ligne), character_skills puis character_skill_level_to_effects_junctions, character_skill_node_links pour les flèches.
  5. faction_agent_permitted_subtypes (la faction, general, le sous-type) et names (de nouveaux id pour le prénom et le nom). Pour la bataille personnalisée : units_custom_battle_permissions avec general_unit = 1, general_portrait et general_uniform.
Palier A : la base de donnéesagent_subtypesclé : keyassociated_unit_override → main_unitsrecruitment_category = legendary_lordsauto_generate décoché : un personnage uniquecampaign_character_art_setsclé : art_set_idagent_subtype → agent_subtypescampaign_character_artsclé : iduniform → agent_uniformsagent_uniformsclé : uniform_namefilename, battle_filename → variantsui/portraits/portholes/portrait_settings*.binles réglages des portraits, par art setcharacter_skill_node_setsclé : keyagent_subtype_key → agent_subtypescharacter_skill_node_set_itemsclé : set + itemitem → character_skill_nodescharacter_skill_nodesclé : keytier : la colonne (sous 48) ; indent : la lignecharacter_skill_key → character_skillscharacter_skillsses effets :character_skill_level_to_effects_junctionsfaction_agent_permitted_subtypesclé : faction + agent + subtypeagent = generalla faction peut l'avoirnamesclé : idde nouveaux id pour le prénom et le nom ; leurs textes :names_name_<id>
Palier A : les tables du seigneur en arbre, de son sous-type à son apparence, son portrait, son arbre de compétences, sa faction et son nom.
TableÀ mettreCléLiens
agent_subtypesle sous-typekeyassociated_unit_override → main_units
campaign_character_art_setsl'art setart_set_idagent_subtype → agent_subtypes
campaign_character_artsl'apparence, par niveauiduniform → agent_uniforms
agent_uniformsles modèles de la carte et de la batailleuniform_namefilename, battle_filename → variants
character_skill_node_setsl'arbre de compétenceskeyagent_subtype_key → agent_subtypes
character_skill_node_set_itemsles nœuds de l'arbreset + item→ character_skill_nodes
character_skill_nodesla place d'une compétencekeycharacter_skill_key → character_skills
frontend_faction_leadersla fiche de l'écran de sélectionkey (libre)agent_subtype_record, faction
start_pos_starting_general_optionsle lien du personnage à sa ficheidgeneral → start_pos_characters.ID
L'arbre de compétences : une grilletier→ la colonne01234indentla ligne ↓012Ce nœud : tier = 2, indent = 1les flèches :character_skill_node_linksl'arbre du seigneur :character_skill_node_set_itemstier : sous 48 (wiki) ; au-delà, le nœud ne marche pas
Dans character_skill_nodes, tier donne la colonne d'un nœud et indent sa ligne (schéma de l'Assembly Kit) ; tier reste sous 48 (wiki). Les flèches viennent de character_skill_node_links.

Les textes du seigneur§

Le minimum viable du seigneur§

agent_subtypes, l'unité de bataille, l'art set, les arts, l'uniforme et la variante, faction_agent_permitted_subtypes, names, les textes, et un appel de script.

Palier B : le faire apparaître par script§

Sans startpos, un script peut ajouter le seigneur à une faction qui existe déjà. Ce squelette suit les signatures des scripts de CA, à tester :

-- squelette à tester : un seigneur dans la réserve d'une faction existante
cm:add_first_tick_callback(function()
  if cm:is_new_game() then
    cm:spawn_character_to_pool("wh_main_brt_bordeleaux", "names_name_<id>", "names_name_<id>",
      "", "", 30, true, "general", "<sous-type>", true, "<art set>")
  end
end)
Un appel, pièce par piècecm:spawn_character_to_pool(1"wh_main_brt_bordeleaux",La faction (elle existe)2"names_name_<id>",Le prénom (names)3"names_name_<id>",Le nom (names)4"",Le clan : vide5"",L'autre nom : inutilisé, vide630,L'âge7true,Masculin8"general",Le type d'agent9"<sous-type>",Votre sous-type10true,Immortel11"<art set>"Son art set)?À tester : squelette non éprouvé dans Warhammer III.cm:is_new_game() : l'appel n'a lieu qu'au début d'unepartie neuve
L'appel du palier B, argument par argument, dans l'ordre des scripts de CA : la faction, le prénom et le nom (des clés names_name_<id>), le clan, l'autre nom, l'âge, masculin, le type, le sous-type, immortel, l'art set. À tester.

Palier C : le choisir à l'écran « Nouvelle campagne »§

  1. start_pos_characters : le personnage (voir la procédure 2).
  2. start_pos_starting_general_options : general (le personnage) → frontend_faction_leader (sa fiche). Sans cette table, aucun seigneur n'est choisissable.
  3. Une fiche frontend_faction_leaders, à la clé libre : character_image (portrait de 85 × 115, relevé sur ceux de CA au patch 8.1), uniform (scène .csc), video, loading_screen_image, agent_subtype_record, faction.
  4. start_pos_factions.playable = 1, puis le startpos régénéré.
Palier C : l'écran de sélectionstart_pos_factionsclé : IDplayable = 1start_pos_charactersclé : IDle personnage : voir la procédure 2start_pos_starting_general_optionsclé : idsans cette table, aucun seigneur n'est choisissablefrontend_faction_leadersclé : key (libre)startpos_map = defaultagent_subtype_record, factioncharacter_image (85 × 115)loading_screen_imageoverride_force_location_x/yune fraction de la carte ; −1 = par défautfactionsa factiongeneralle personnagefrontend_faction_leadersa fichePuis un startpos régénéré : seul ce palier en exige un.
Palier C : start_pos_starting_general_options relie le personnage du startpos à sa fiche frontend_faction_leaders (startpos_map = default), puis le startpos se régénère.

Les pièges du seigneur§

Le pointeur de l'écran de sélectionla carte de campagne, en hex0↔ largeur↕ hauteurxyoverride_force_location_x = x / largeuroverride_force_location_y = y / hauteurchez CA, Eltharion : 0,398 et 0,420−1 : la position par défaut ; un seigneur en garnison,sans réglage, reste dans le coin de l'onglet Carte.
override_force_location_x et _y placent le pointeur d'un seigneur sur la carte de l'écran de sélection : sa position en hex, divisée par la largeur de la carte pour x et par sa hauteur pour y ; −1 garde la position par défaut.

Vérifier que le seigneur marche§

  1. Diagnostics : ni art set ni variante non déclarés, aucune référence invalide.
  2. Palier A : en bataille personnalisée, il se choisit comme général de sa faction, avec son portrait et son uniforme.
  3. Palier B : dans une partie neuve de la faction, il figure parmi les seigneurs à recruter, ou à la tête de son armée. Sinon, lisez le journal des scripts : un fichier script/enable_console_logging non vide dans un pack chargé fait écrire au jeu des script_log_*.txt.
  4. Palier C : à l'écran « Nouvelle campagne », sa fiche paraît avec son portrait et sa description, son pointeur est à sa place sur l'onglet Carte, et la partie commence avec lui.

Ce qui exige un nouveau startpos§

Startpos ou script ?Un seul startpos par campagne ; Empires Immortels et Royaumesdu Chaos : Mixer.Il faut le startposFactions jouables, ou quiapparaissent en cours departieTypes d'agents d'une cultureEmplacements de monumentsPotentiel des factionsNon-agression et accèsmilitaireUn identifiant (CQI) fixepour le chef : pour unebataille de quêteNoms proposés au recrutementScript ou baseRégiments de renomcm:add_unit_to_faction_mercenary_poolRégion, chef, armée, objets :Campaign Custom Startscm:create_force_with_generalcm:transfer_region_to_factionPointeur de l'écran desélectionoverride_force_location_x/yArbre de technologies : nœudsà colonne faction, plus unscriptFonctions d'une faction,horde ou non (feature forest)cm:add_or_remove_faction_featuresEn base seule : unités, sous-types, apparences,compétences, textes, la table factions.
Le startpos enregistre le tour 0 : ce qu'il contient ne change que s'il est régénéré, et un mod le remplace en entier. D'après la page Startpos du wiki : à gauche, ce qui l'exige ; à droite, ce qu'un script ou la base font sans lui.

Le startpos est la sauvegarde du tour 0 : ce qu'il enregistre ne change que si on le régénère. Le schéma de l'Assembly Kit marque d'un indicateur, requires_startpos_reprocess, les colonnes qui y entrent : lisez-le dans TWaD_<table>.xml. Au patch 8.1, 42 tables en portent un :

Unités, sous-types, apparences, compétences, textes et table factions se modifient en base de données seule. Trois voies produisent un 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.

Build Startpos, dans RPFM§

Clic droit sur la racine du pack → Build Startpos fait générer le startpos par le jeu lui-même (dans la palette, Ctrl+Shift+P : « Build Startpos »). La 5.0.6 n'a plus de menu Special Stuff : les chemins « Special Stuff → … » des anciens tutoriels et du wiki valent pour les versions 4.

Build StartposLes tables de départ dans le packà créer, ou à importer de l'Assembly Kit par le panneauDependencies.start_pos_*campaigns1Le pack ouvert depuis le dossier data du jeuSave Pack As… dans data, ou PackFile → Open From Data ;sinon RPFM refuse.<jeu>\data\<mod>.pack2Clic droit sur la racine → Build Startposchoisir la campagne ; Process HLP and SPD data : pour unecarte neuve seulement.Avec cette case, durée très variable : RPFM annonce 10 à 30minutes, tw-modding bien plus d'une heure pour une grande carte.3Bouton Build Startpos : le jeu se lance, génère, serefermeSteam ouvert ; Play dans le lanceur si besoin.RPFM a d'abord écrit votre user.script.txt (l'ancien, gardé en.bak) ; la troisième ligne, seulement avec Process HLP and SPDdata :mod <mod>.pack;process_campaign_startpos <campagne>;process_campaign_ai_map_data;quit_after_campaign_processing;4Ne fermez pas RPFM ici.Hit this when the game is closedRPFM range startpos.esf (et les fichiers hlp et spd) dansle pack et remet votre user.script.txt.campaigns/<campagne>/startpos.esf5Ctrl+S, puis une campagne neuvele pack est déjà dans data.Avant de publier : retirez du pack les tables start_pos_*.6
Build Startpos fait générer le startpos par le jeu lui-même, à partir des tables de départ du pack ouvert depuis data. Ne fermez pas RPFM avant le clic de l'étape 5 : il range startpos.esf dans le pack et remet votre user.script.txt, sans quoi le jeu se refermerait à chaque lancement.
  1. Mettez dans le pack les tables start_pos_* et campaigns : créez-les, ou importez-les de l'Assembly Kit par le panneau Dependencies. La consigne affichée par RPFM réclame aussi db/victory_objectives.txt, mais pas pour Warhammer III (code de RPFM ; journal des changements, version 4.3.11).
  2. Le pack ouvert doit être enregistré dans le dossier data du jeu (Save Pack As…, ou PackFile → Open From Data) : sinon RPFM refuse.
  3. Clic droit sur la racine du pack → Build Startpos ; choisissez la campagne (la liste vient de votre table campaigns). Ne cochez Process HLP and SPD data (les données de carte de l'IA, hlp_data.esf et spd_data.esf) que pour une carte neuve. Durée très variable : 16 s chez nous (400 × 440 hex) ; le tutoriel de carte de campagne de tw-modding compte moins d'une minute pour spd, environ cinq minutes pour hlp sur une carte moyenne et bien plus d'une heure sur une grande ; RPFM annonce 10 à 30 minutes.
  4. Cliquez Build Startpos : le jeu se lance (Steam ouvert ; cliquez Play dans le lanceur si besoin), génère, puis se referme tout seul. Ne fermez pas RPFM entre-temps.
  5. Une fois le jeu refermé, cliquez Hit this when the game is closed : RPFM range campaigns/<campagne>/startpos.esf (et, si l'option était cochée, les fichiers hlp et spd) dans le pack, et remet votre user.script.txt comme avant.
  6. Enregistrez le pack (Ctrl+S), puis lancez une campagne neuve.

Une précision : on écrit les tables start_pos_* dans le kit (Dave) ou dans RPFM, mais le jeu ne lit pas les XML du kit ; pour la génération, elles doivent donc être dans un pack chargé (pour Build Startpos, le pack même qu'il génère). Une fois le startpos produit, retirez-les du pack publié : elles ne servent plus. Chez nous, le jeu valide à chaque lancement les tables start_pos_* d'un pack de mod, et %APPDATA%\The Creative Assembly\Warhammer3\crash_report\bad_mods_report.txt nomme alors l'enregistrement fautif.

RPFM pour une IA : le serveur MCP§

Depuis sa version 5, RPFM a un serveur, rpfm_server.exe. Il parle MCP (Model Context Protocol), la prise standard des assistants IA : une IA branchée dessus ouvre les packs, lit et écrit les tables, cherche partout et lance les diagnostics, dans sa propre session, séparée de la fenêtre de RPFM.

  1. Si la fenêtre de RPFM est ouverte, son serveur tourne déjà : elle le lance elle-même. Sinon, lancez rpfm_server.exe sans argument (il n'a pas d'option --help : il démarre aussitôt). Il écoute sur 127.0.0.1:45127 et s'arrête quand plus aucune session n'est ouverte.
  2. Branchez votre assistant sur http://127.0.0.1:45127/mcp (Streamable HTTP). Avec Claude Code : claude mcp add --transport http rpfm http://127.0.0.1:45127/mcp. Tout client MCP compatible Streamable HTTP convient.
  3. Demandez-lui de lire d'abord la ressource « Initialization guide » du serveur : elle décrit l'ordre des appels (choisir le jeu, vérifier le schéma, ouvrir le pack).
Une IA branchée sur RPFMUne session par connexionl'IA ne voit pas vos packsouverts.La fenêtre de RPFMvos packs ouvertsrpfm_server127.0.0.1:45127L'assistantvotre IA/ws/mcpStreamable HTTPPour le startposDemander à l'humain avant de lancer le jeu.build_starpos« Success » = jeu lancéattendre que le jeu se refermebuild_starpos_postrange startpos.esf, remet user.script.txtsave_packfilepour abandonner : build_starpos_cleanup
La fenêtre de RPFM lance elle-même rpfm_server ; l'assistant s'y branche par /mcp et reçoit sa propre session : il ne voit pas les packs ouverts dans la fenêtre. Pour le startpos, build_starpos ne fait que lancer le jeu ; build_starpos_post range le fichier.
set_game_selected   (warhammer_3, rebuild_dependencies: true)
→ is_schema_loaded            (sinon update_schemas)
→ open_packfiles              (rend le pack_key)
→ open_pack_info              (l'arbre du pack)
→ decode_packed_file          (ex. db/land_units_tables/<fichier>)
→ fields_processed            (la forme des lignes)
→ save_packed_file_from_view
→ diagnostics_check
→ save_packfile

Pour une IA qui lit cette page§

Pour une IA qui aide à modder Total War: Warhammer III avec RPFM, l'essentiel en faits vérifiables, relevés sur RPFM 5.0.6 et le patch 8.1 du jeu (septembre 2026), relus pour la mise à jour 9.0 : à revérifier après une mise à jour (schémas, cache des dépendances ; et, si l'Assembly Kit sert aussi, les lignes ajoutées à raw_data\db, que Steam réécrit).

Sources et liens§

Questions fréquentes

Quelle version de RPFM utiliser pour Warhammer III ?

La 5.0.6, dernière stable au 24 septembre 2026, dont ce guide suit les menus. Le manuel en ligne décrit cette même version, parfois avec d'autres libellés que la fenêtre : la palette (Ctrl+Shift+P) retrouve l'action par son nom.

Mon mod fait planter le jeu au lancement : que vérifier ?

Les diagnostics de RPFM (Check PackFile). Une référence invalide est l'une des premières causes de plantage au lancement, et un champ obligatoire vide peut faire planter le jeu, souvent sans message d'erreur.

Faut-il un nouveau startpos pour ajouter une unité ?

Non. Seules les armées et garnisons de départ et les réserves de mercenaires l'exigent, et un script peut s'en charger (cm:create_force_with_general, cm:add_unit_to_faction_mercenary_pool).

Peut-on ajouter une faction sans toucher au startpos ?

Non : tout ce qui la fait exister passe par le startpos, dont chaque campagne n'a qu'un exemplaire, qu'un mod remplace en entier. Votre mod sera donc incompatible avec tout autre mod de startpos de cette campagne. Pour les Empires Immortels et les Royaumes du Chaos, demandez plutôt l'ajout de votre faction à Mixer, le mod de startpos de la plupart des joueurs, puis faites le reste par script.

Pourquoi mon unité n'apparaît-elle pas en bataille personnalisée ?

Il lui faut main_units, land_units, unit_variants, sa carte (PNG de 60 × 130), son nom en .loc et une ligne units_custom_battle_permissions pour la faction de bataille, avec general_unit à 0.

Comment rendre un seigneur choisissable à l'écran de nouvelle campagne ?

Le personnage dans start_pos_characters, une ligne start_pos_starting_general_options qui le relie à une fiche frontend_faction_leaders (startpos_map à default), start_pos_factions.playable à 1, puis un startpos régénéré.

Mes textes remplacent ceux du jeu dans toutes les langues : pourquoi ?

Le jeu charge les .loc d'un mod quelle que soit la langue du joueur. N'ajoutez que des clés neuves, et faites un pack par langue.

Comment brancher une IA sur RPFM ?

Si la fenêtre de RPFM est ouverte, son serveur tourne déjà ; sinon, lancez rpfm_server.exe (RPFM 5). Ajoutez ensuite le serveur MCP http://127.0.0.1:45127/mcp à votre assistant ; avec Claude Code : claude mcp add --transport http rpfm http://127.0.0.1:45127/mcp.

Mon mod n'apparaît pas dans le lanceur : pourquoi ?

Vérifiez qu'il est installé dans le dossier data du jeu et qu'il est de type Mod : clic droit sur la racine du pack, Change PackFile Type, Mod. Dans le même sous-menu, la case Index Includes Timestamp doit être décochée : selon RPFM, un pack qui l'a cochée n'apparaît pas dans le lanceur officiel.

Ma modification d'une unité du jeu ne change rien : pourquoi ?

Votre fichier de table trie après celui du jeu (data__) : c'est donc la ligne du jeu qui gagne. Commencez le nom de votre fichier par @ ou !, puis réinstallez le pack.

Des tables sont signalées Outdated après une mise à jour du jeu : que faire ?

Mettez à jour les schémas (About, Check Updates), puis le cache (Game Selected, Generate Dependencies Cache). Ensuite, clic droit sur chaque table signalée, Update Table, et relisez les colonnes neuves : RPFM y met des valeurs par défaut.

Comment retirer une ligne du jeu ?

Avec la table twad_key_deletes (Warhammer III, depuis le patch 6.3), jamais en recopiant la table du jeu : créez une fois twad_key_deletes_tables dans votre pack, sélectionnez les lignes dans la table du jeu, puis clic droit, Add Selection to Key Deletes. Ne retirez pas une ligne encore citée par une autre table : le jeu planterait.

Le jeu se ferme dès son lancement : pourquoi ?

Une ligne quit_after_campaign_processing; est restée dans user.script.txt (%APPDATA%\The Creative Assembly\Warhammer3\scripts) : une génération de startpos a été interrompue avant sa fin. Retirez la ligne ou remettez le fichier d'avant. Avec Build Startpos, cliquez toujours Hit this when the game is closed, qui le remet.

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.

Proposer une idée
↑ Sommaire