Modders' workshop · guide · 48 min read
Terry, the guide: Total War: Warhammer III's terrain editor, from your first battle map to campaign terrain
Terry is the 3D terrain editor in Total War: Warhammer III's Assembly Kit. This guide takes you through it step by step: opening it, reading its window, moving around, painting, making a first battle map and seeing it in game. It then gathers what is known about campaign map terrain, which the kit does not ship, learnt while porting a whole map into Warhammer III.
Reviewed on 25 September 2026, update 9.0. Written against its sources, the Assembly Kit on patch 8.1, CA's wiki and tw-modding; what 9.0 changed on our project has been added, the rest has not been rechecked point by point. When in doubt, check, and tell us.
What Terry is, and what it does in the public kit§
Terry (Terrain Metadata Editor) is Creative Assembly's (CA) 3D terrain editor, shipped with the Total War: Warhammer III Assembly Kit. It is where a terrain is made: relief, textures, vegetation, props, logical zones, lighting and sounds. It is not a separate program: it is a mode of Tweak, the kit's editor.
Terry does not write the files the game reads, but sources, in the kit's raw_data folder. BOB, the kit's builder, builds them into working_data; RPFM puts them into a pack. Terry starts BOB itself: File → Process with BOB.
- In the public kit, Terry makes battle tiles and battle maps, with their logic (deployment, playable area, capture points), and prefabs.
- The kit ships no campaign terrain: in the Warhammer III kit,
raw_data/only holdsterrain/ battles/andtiles/.battle/ - No command drives Terry: you can only open it; the rest happens in its window.
The journey of a battle map, from Terry to the game:
- Terry
You paint the tile (relief, textures, props, logical zones) and place it in a tile map.
.terry,.layer,.tif,tile_map.pnginraw_data - BOB
It builds the tile map, then the tile, into game files.
working_data/terrain/ … - RPFM
The pack: the built files, a
battles_tablesrow, a text, an image.my_map.pack - In game
The map appears in custom battle.
This guide follows that journey, then gathers what is known about campaign map terrain.
Terry's vocabulary§
A few words come up everywhere. Here is the meaning this guide gives them.
| Word | Meaning |
|---|---|
| Tile | a piece of terrain made in Terry: relief, textures, props, logic. A battle map is a tile placed in a tile map. |
| Tile map | the large terrain, assembled from tiles, around the battlefield; your tile has its place in it. On a campaign map, tile_map.png says which kind of tile goes on each hex: land, sea, coast, road. |
| Raster | an image in which each pixel carries a value: a height, a texture blend, a mask. One .tif file per saved raster (relief, texture blend…). |
| Vista | a ready-made tile map, reused as scenery around your tile; the Warhammer III kit ships none (see the FAQ). |
| Layer | a group of entities. A File Layer is a .layer file; a Logical Layer is just for tidying. |
| Prefab | a ready-to-place, reusable assembly of objects; battle or campaign. |
| Logical entity | what the game reads without showing it: deployment zones, playable area, AI hints, no-go zones, capture points. |
| Playable Area | in battle, the logical entity bounding where movement orders can be given; it also sets where units rout and reinforce from, and the minimap's edges (CA). CA's introduction page adds that its edges bound the camera. |
| Campaign playable area | the campaign_map_playable_areas row describing a campaign's map; its terrain_folder column names a battle terrain. |
| BOB | the kit's builder: it turns the sources in raw_data into game files, in working_data. Each execution is called a run here. See the BOB guide. |
raw_data / working_data | what the kit's tools read (your sources) / what they produce (the game files). |
| Catchment | an export variant of the same map (catchment_01…), picked by the catchment_name column of the battles table. On a campaign, catchment maps pick the battle map according to the location. |
Opening Terry§
Since Terry is a mode of Tweak, there are three ways in, all leading to the same window.
- From the kit's launcher
In Steam (Library → Tools), start the Warhammer III Assembly Kit, then pick Play Battle Map Editor: Terry.
According to the tw-modding wiki's Custom Campaign Settlement Skins page (Warhammer III part, ChaosRobie).
- From Tweak
Open
binaries/in the kit folder, then the Plugins → Terry menu.tweak.modder.x64.exe According to the same page.
- From the command line
From the kit's
binariesfolder:tweak.modder.x64.exe /.standalone TerrainMetadataEditor It is the command the launcher option runs; the only known one for Terry.
How to check. The window is titled TWeak - Terry. It takes a while to come up: about 25 seconds for us. On start-up, the Project Wizard appears.
The Project Wizard§
The Project Wizard appears on start-up (Show on startup box) and reopens with File → Project Wizard…: it offers recent projects and the New tab, which it opens on (tw-modding).
In Warhammer III it shows three icons. The right-hand one, a dotted box, creates a prefab, battle or campaign (tw-modding, Custom Campaign Settlement Skins). The kit only knows three project types: tile, tile_map and prefab (file working_data/). So the other two icons are probably the tile and the tile map (not checked on screen).
Terry's window§
Terry's window is made of panels that can be detached and docked: the layout is adjustable, and yours may differ. The figure shows a common layout, with numbered markers: menus and toolbars at the top, scene hierarchy on the left, properties at the bottom and on the right, 3D view in the centre, BOB's messages at the bottom right.
- 1Menus and toolbarsFile, View, Tools; toolbars open from View → Toolbars.
- 2The Basic toolbartools 1 to 4 (select, move, rotate, scale), four painting modes, the Process with BOB globe (Ctrl+P), World or Editor View; then Entity Creation (Visual, Logical, Other).
- 3Scene Hierarchyentities, sorted into layers; a double-click makes a layer active (in red).
- 4Entity Propertiesthe selection's properties, editable for several objects at once.
- 5Project Errorswhatever would stop the map working in game.
- 6The viewportthe 3D scene: the tile grid, the playable area, the deployment zones (Alliance 0 = attacker, blue in Warhammer III's Terry; 1 = defender, dark red; the 2016 docs had it the other way round: trust the number).
- 7Tool Propertiesthe active tool's settings: brush, or a prefab picker.
- 8Map Properties and Settingsthe project's settings; Terry's own (autosave, BOB, camera).
- 9BOB's messagesbottom right, during a run: pop-ups, according to tw-modding.
| Panel | What it is for |
|---|---|
| Viewport | the 3D scene. World View shows a game-like preview; Editor View adds the debug lines. The G key switches between them. |
| Scene Hierarchy | the entities, sorted into layers: a File Layer per .layer file (at least one per project), Logical Layers for tidying. Double-clicking makes a layer active: it turns red, and new objects land in it. Unticking Export turns it into a reference layer, which is not exported. |
| Entity Properties | the selection's properties, editable for several objects at once. Bottom left. |
| Tool Properties | the active tool's settings: the brush, or the choice of a prefab, with a search field. |
| Map Properties | the project's settings. Bottom right. |
| Settings | Terry's own settings, not the map's: autosave, BOB options, overlays, camera, preview environment (Set As Default For Project Type button). |
| Project Errors | whatever would stop the map working in game. |
| Toolbars | through View → Toolbars, or the Tools menu. Basic: tools 1 to 4, the four painting modes, Show in Explorer, World / Editor View, and the export: the globe with an arrow, Process with BOB (Export Map in the first Warhammer). Then Advanced, and Entity Creation (Visual, Logical, Other). |
A project's files§
<project>.terry: an XML file describing the project type, its rasters and its scene.- One
.tifper saved raster (<project>.height.<id>.tif,<project>.blend.<id>.tif…): the relief, the texture blend… The kit's example tile declares eight rasters but saves only two. - The
.layerfiles: one per File Layer, with its entities. <project>.terry.user: the preview settings.
In these XML files, a property carries the name it shows in Terry, in lower case, with spaces turned into underscores: Lighting File is written lighting_file. Handy for finding in a file what you set in the window.
Coordinates§
- The Y axis is altitude, pointing up.
- In battle, three extents: the Usable Area, a 2,048 m square centred on the battlefield, where physics and unit pathfinding apply; the tile map, drawn out to 8 km from the centre; the Playable Area, where movement orders can be given, which also sets where units rout and reinforce from, and the minimap's edges (CA; according to its introduction page, its edges also bound the camera). An 8 × 8 tile is 2,048 m across (read off the kit's example tile): placed in the centre of the tile map, it covers exactly the Usable Area.
- On a campaign map, the axes are those of hex space: see campaign terrain, below.
Getting around: camera and shortcuts§
These shortcuts come from CA's documentation. The keyboard ones are in the Warhammer III kit's shortcut file (working_data/); the mouse ones in CA's pages and the kit's status tooltips (working_data/). Ctrl+S and Ctrl+Shift+S are missing: the file lists “save as” with no key, and “save” not at all.
| Keys | Action |
|---|---|
| W A S D (Shift: faster) · Q / E | move · rotate |
| C / X · R · Z | up / down · top-down view, centred · zoom to the selection |
| wheel · middle button · Alt + middle · Shift + middle | zoom · pan · rotate · up or down |
| right-click or Esc | leave the current tool |
| 1 2 3 4 · Tab | select, move, rotate, scale · edit the entity |
| Shift + drag · Ctrl + drag | duplicate · rotate the selection |
| Ctrl+G / Ctrl+U | group / ungroup |
| Ctrl+A · Ctrl+D · Ctrl+I · Ctrl+H · F | select all · select none · invert the selection · hide · freeze the selection |
| [ / ] · O / P · N / M · , / . | brush size · opacity − / + · “other value” − / + · previous / next palette |
| hold Shift · Alt + click · Ctrl+Alt + mouse | quick smoothing · pick a value · brush size and rotation |
| 5 · Shift+5 · Alt+5 | align · raise · lower the terrain under the selection |
| H · G | coloured relief (topography) · world / editor view |
| Shift+C · L · Shift+T · Shift+2 | switch camera (probably perspective or orthographic) · local or world axes · clamp and orient to the terrain · place tool (meanings deduced from the file's command names: to be checked) |
| Ctrl+N · Ctrl+O · Ctrl+P | new · open · Process with BOB |
| Ctrl+S · Ctrl+Shift+S | save · save as (unconfirmed in Warhammer III) |
Two commands have no default key: CopyCamera and PasteCamera. They copy and paste the viewpoint through the clipboard, in the form camv3;eye x;y;z;target x;y;z: a way to compare two states of a terrain from the same angle. To give them one, the ConfigureKeyset command is probably the shortcut settings (its menu label is still to be checked); keys are stored in keyboard.xml.
The painting and creation modes§
Terry works in modes: pick a mode, a tool, then paint or place. The four painting modes are on the Basic toolbar; the creation modes on the Entity Creation toolbar and in the Tools menu.
Relief: Terrain Height Painting§
- Three panels. Maps: the rasters and their layers (Add Layer on right-click), which blend in order. Operations. Brushes: New Round creates a round brush, with Scale, Hardness, Size Jitter…
- Warhammer III operations: Add, Subtract, Absolute, Smooth, Erase.
- To see slopes steeper than 45° in red: Settings → View 3D → Overlay → Land No Gos.
Textures: Terrain Texture Painting§
- Each channel is one of the project's textures (
grass01,mud01…). - A low flow blends textures into one another.
- Operations: Normal, Smooth, Erase, Replace.
Forests: Terrain Forest Painting§
You don't place trees one by one: you paint the forest texture, and forest grows wherever that texture exceeds 60%.
Logical ground: Terrain Painting (Other)§
This mode paints logical ground types: what the game knows about the ground, regardless of the texture you see.
Objects: Entity Creation (Visual)§
- Entities: Prefab, Building, Prop, Decal, VFX, Polygon Mesh, Terrain Hole, Vegetation (Place or Paint), Procedural Exclusion Zone, and lights.
- While placing, [ and ] set the scale; Shift + mouse, the rotation.
- A lake is a
water_planeprop, Surface Oriented unticked, placed in a hollow of the relief. Water shallower than 0.5 m stays passable, with a penalty; deeper water is impassable (CA).
Logic: Entity Creation (Logical)§
- Entities: AI Hint, No-Go / Go Region, Deployment Zone, Deployment Zone Region, Playable Area, and, in Warhammer III, capture points.
- The kit keeps these entities for battle projects. A campaign project has its own:
CampaignSettlement.
- ATile mapthe scenery all around, borrowed from a vista; drawn out to 8 km from the centre (CA).
- BYour 8 × 8 tilethe ground you fight on, which you paint, in the middle of the tile map.
- CUsable Areathe same square as the tile (B): an 8 × 8 tile is 2,048 m across (read off the kit's example tile); placed in the centre, it covers exactly the Usable Area, 2,048 m centred on the battlefield, the only place with physics and unit pathfinding (CA).
- DPlayable Areawhere move orders can be given; its edges set where units flee and reinforcements arrive, and the minimap's edges (CA, Creating Zones); CA's introduction page adds that they bound the camera.
- EDeployment ZonesAlliance 0 = attacker, 1 = defender; in Warhammer III's Terry, 0 is blue and 1 dark red (the 2016 docs had it the other way round): trust the number. Each zone has its additive region (+), created with it (tutorial); an optional subtractive region (−) cuts a piece out (CA).
- FCapture pointsfor a domination map: type domination 1, 2, 3; importance score; from 80 × 80 to 180 × 180 (tutorial).
- GReinforcement linesAI Hint attacker or defender teleport reinforcement line: a short two-point line; about 20 units long is enough (tutorial).
- HProcedural Exclusion Zonelaid between the playable area and the tile's edge, to make the map lighter: no procedural vegetation outside play, grass but also forest trees; repaint the forests you want by hand (tutorial).
- INo-Goa closed polygon marking an impassable area (CA).
- JDefensive Hillan AI Hint showing the AI a defensive position: a closed polygon; left open, a probable crash (CA).
Advanced tools: Advanced and Other§
A ruler to measure; Snap BBox and Snap Verts to align; the grid and snapping; a perspective or orthographic camera; Sound Marker to place sounds; Camera Bounds, which limits the editor's camera only, not the game's.
Several variants of one map§
A layer can carry an export type (catchment_01…). The catchment_name column of the battles table then picks the variant the game loads. That is how one terrain gives both a domination map and a classic battle.
Your first battle map, step by step§
This walkthrough follows the tw-modding wiki's Warhammer III tutorial, completed with CA's documentation. Two pieces of advice first. Save often: CA warns that Terry sometimes crashes. And set the autosave in Settings (on our install, it was set to 15 minutes). Terry keeps its autosaves in working_data/ and logs its errors in working_data/, in the kit folder.
A battle map is two Terry projects. The tile is the ground where the fighting happens, which you paint in detail; the tile map is the scenery around it, drawn out to 8 km (CA), which you borrow from a vista. Only a 2,048 m square in the centre, the Usable Area, has physics and unit pathfinding (CA). The figure shows both projects one above the other, with their files, BOB's two runs and the battles_tables row that links it all to the game.
- Create the project. In the Project Wizard, on the New tab, choose a battle tile. The exact label of that choice is not confirmed in Warhammer III.
- Save it straight away (File → Save As…): the dialog asks for the map name, in lower case (a folder name, not the name shown in game); the tile set, a folder name of your own, in lower case (the tutorial, which makes a domination map, calls it
domination); the size, 8x8, to stay compatible with Warhammer II's tile maps; the climate (which drives, among other things, grass and trees). Leave the bottom box ticked, as the tutorial says (its label is not confirmed here). Check: going by the kit's example map, the tile is stored inraw_data/. The Show in Explorer button opens the folder: aterrain/ tiles/ battle/ <tile set>/ <map>/ .terry, at least one.layer, some.tiffiles. - Paint the relief, textures and forests, then place the props. To make the map lighter, the tutorial places a Procedural Exclusion Zone between the playable area and the tile's edge: no more grass outside play, but no more trees in that band's forests either; it repaints them by hand. Check in World View (G key), the game-like preview, and with H, the coloured relief.
- Place the logic, with Tools → Entity Creation (Logical). A Playable Area: 2x2 to 3x3, the tutorial advises, without giving the unit; without one, the game sets it between 800 and 1,300 m depending on the number of units, or fits it to the deployment zones, whichever is larger (CA). Two Deployment Zones, each with its additive Deployment Zone Region: Alliance ID 0 for the attacker, 1 for the defender, Zone ID at 0. In Warhammer III's Terry, alliance 0 shows in blue and 1 in dark red (CA's 2016 documentation had it the other way round): trust the number. For a domination map, capture points: type domination 1/2/3, importance score, from 80 × 80 to 180 × 180; the tutorial adds a second region to each deployment zone, of type guerilla exclusion additive, for vanguard deployment (the opposite alliance cannot deploy in it), and makes sure no player can vanguard-deploy onto a capture point. And reinforcement lines: an attacker or defender teleport reinforcement line AI Hint, a short two-point line; about 20 units long is enough, the tutorial says. Check: the zones show in the 3D view, and the Project Errors panel reports nothing.
- Create the tile map with Tools → Create battle for tile…: Terry creates its project in
raw_data/. Once is enough, the tutorial says; after that you work in the files it created. Check: the folder holds aterrain/ battles/ <map>/ .terry,tile_map.png,climate_map.pngandexplicit_tiles. - Place your tile in the tile map. In that folder, replace
tile_map.pngandclimate_map.pngwith those of an existing vista, a ready-made tile map that will serve as scenery. Then, inexplicit_tiles, change the first two numbers of the linex,y,tile path,0(see right after the list): x,y is your tile's top-left corner intile_map.png, in pixels. An 8 × 8 tile in the centre of a 64 × 64 tile map goes at 28,28; the kit's example map has its own in the same place. - Build the tile map: open it in Terry, run File → Process with BOB (Ctrl+P, or the globe on the Basic toolbar), then reload it. Check: your tile is in its place.
- Build the tile. Reopen it. In Map Properties, untick legacy vegetation generation (in the
.terry, theuse_legacy_procedural_vegetationproperty). Then Process with BOB. The tile map always comes before the tile; after that, when you touch up the tile, only the tile needs re-exporting. - Declare the map to the game with RPFM: see the next section.
- Test it in a custom battle, with the pack enabled in the launcher.
By default, the tutorial says, explicit_tiles holds something like this:
3,3,terrain/tiles/battle/lzd_hills_infield/chaqua_pit,0Change only the first two numbers. x,y are read in pixels of tile_map.png, x from the left, y from the top: open the image in your drawing program and point at the top-left corner of the vista's black square, that is 28,28 in a 64 × 64 tile map (tutorial). Check that the path is your tile's, from terrain/, with forward slashes; keep the final 0.
The kit's example map places its tile differently: its tile (raw_data/) declares the colour (0, 255, 127) in its .terry, and its tile map's tile_map.png, 64 × 64 pixels, carries a block of it from 28,28 to 35,35, without explicit_tiles.
Declaring it to the game with RPFM, and testing it§
BOB has produced the game files. What remains is to put them in a pack and tell the game the map exists: that is the job of a battles_tables row, a text and an image. RPFM does all of it; its basic moves are in the RPFM guide.
- Create a pack and add the
working_data/folder to it, as the tutorial does, then remove everything that is not yours: the kit's example map (terrain assembly_kit_example_tile_map,assembly_kit_example_tile,_tile_database/) and any game file you may have extracted there. Check in RPFM that only your folders remain: the tile map, the tile and itsTILES/ test_tiles_assembly_kit_example_tile.* _tile_database/entry.TILES/ <tile set>_<map>.* - Add a row to
battles_tables: right-click the pack → Create… → Create DB →battles_tables, a file named after you (neverdata__, which would replace the game's table); copy aclassicrow from the game, Paste as New Row, and change the key first (the RPFM guide). That way you keep every column; fill them in from the table below. - Add the text
battles_localised_name_<key>: it is the name the player will see. - Add the image at the path given by
screenshot_path: three times as wide as it is tall (tutorial). The space infrontend uiis intended. - Save the pack, then PackFile → Install in RPFM, which copies it into the game's
datafolder. A square image with the same name as the pack serves as its thumbnail (the tutorial plans it for the Workshop). Then enable the pack in the launcher. - Test with a custom battle. A domination map is tested in multiplayer, or with a community mod (see the tw-modding tutorial).
| battles_tables column | What it takes | Example |
|---|---|---|
key | your map's key: a key of your own, never that of a game map | myprefix_my_map |
type | classic or domination | classic |
specification | the tile map's folder, with the trailing slash, as in the tutorial; CA mostly writes terrain\: if you copy a CA row, keep its form | terrain/ |
screenshot_path | the map's image; it must be in the pack | ui/ |
team_size_1, team_size_2 | the size of the two sides | 1, 1 |
singleplayer, multiplayer | where the map is offered | 1, 1 |
battle_environment | the atmosphere: an .environment_group file from weather/ (CA leaves it empty in 715 of its 1,216 rows); not to be confused with battle_environment_audio, right next to it | weather/ |
catchment_name | the export variant to load (see the modes, above) | your layers' export type; with no export type, to be checked (259 CA rows leave it empty) |
Campaign map terrain: what we know§
For a campaign map, the kit ships nothing: no Terry project, no raw terrain data. That is true of the Warhammer III kit, and of the Warhammer I kit. Yet Terry can open a campaign-type project. ChaosRobie, the author of Immortal Empires Expanded, proved it: he rebuilt the Immortal Empires map as a Terry project, and shared that project with the community. Here it is, dissected: it is the blueprint to follow.
| Item | What it is |
|---|---|
the raw_data/ folder | missing from the kits: this is what you create |
<map>.terry | the project, in XML (version 27): the map's settings, one entity per region, named after its database key, and ten terrain layers |
<map>.terry.user | the preview settings: without it, Terry shows neither water nor trees |
rules.bob, two files | BOB's recipe is in the parent folder, raw_data/: [Terrain] with PrefabRoot = art\ (ChaosRobie's project's value; battle for a battle), TileDatabase = terrain\, HeightPatch = true…; the one in the map folder only holds [Copy] and [+AssetGraph], which copy the raw project into the kit's retail folder on every run. Recreate only the map folder and you lose the recipe. |
tile_map.png | the tile map: land, sea, coasts, cliffs, roads, one colour per type |
ten .tif rasters | relief, sea floor, texture blend, colours, shroud, trees, corruption, snow, patch visibility |
one .layer per region | placed objects: set dressing, mountains, water |
Remember that the project is tied to the map's list of regions: one more region means one more entity and one more layer. The logical half (regions, ground, roads, towns) is made in CAIME (Campaign AI Map Editor), the Campaign Map Toolkit's editor: the CAIME guide.
Raster sizes follow from the number of hexes§
Every resolution is proportional to the map's number of hexes, the CAIME one (read from ChaosRobie's project and applied to our map). The last column gives the example of our map, 400 × 440 hexes.
| Layers | Pixels per hex | Example, 400 × 440 hexes |
|---|---|---|
Height, HeightSea, BlendCampaign, ColorOverlay, ColorOverlaySea | 8 (plus 4 rows) | 3200 × 3524 |
HeightShroud | 4 (plus 2 rows) | 1600 × 1762 |
CampaignTree, CorruptionMask, SnowMask, and tile_map.png | 2 (plus 1 row) | 800 × 881 |
PatchVisibilityMask | one cell per patch of p tile-map pixels, p = ceiling(longest side / 128) | 114 × 125 |
The arithmetic: 400 × 8 = 3200 pixels wide, 440 × 8 + 4 = 3524 high. For the patches, the tile map is 800 × 881: p = ceiling(881 / 128) = 7, and you count whole patches (800 / 7 gives 114, 881 / 7 gives 125).
Campaign terrain: conventions, BOB's order and limits§
Conventions§
They were established on our project and on ChaosRobie's; CA does not document them.
- Rasters run north to south; heights are in world units, water at 0.
- x points east, z north, and the world is hex space. Terry stretches the rasters by 2/√3 along z: a world point (x, z) reads a raster at row z × √3/2.
- The sea is declared in
tile_map.png(seatile, colour 83, 141, 213), not by height. The sea floor must be below 0 everywhere, even under land, or the water is not drawn. - The sea surface is made of large water planes placed as objects, at height 0. Their pivot must be inside the map, or BOB drops them (“Failed to find valid quadtree node”).
- Coasts are painted with coast types: a one-hex band (
cliff_gen,sea_coast) along the whole sea. Each hex of the band must have a single run of one to three sea neighbours, or “Failed to find tile” and a hole in the shoreline. Paint it in whole hexes: drawn pixel by pixel, it cost us 148 “Failed to find tile”; by hex, none. - Roads: each road hex is a solid 2 × 2 pixel block of
tile_map.png; a thinned line leaves holes.
- Rivers: Warhammer III has almost no river tiles left. Its rivers are meshes placed as objects, or sea channels lined with coast.
- Starting from CAIME: the CAIME guide has CAIME export
tile_map.png(Tools → Export → Baseline Tilemap) for the Terry project. Caveat: we have not tried it (ourtile_map.pngis written by script); CAIME's documentation contradicts itself on what the image contains; and if it carries rivers, they will call for river tiles, which Warhammer III has almost none of. Count the “Failed to find tile” after the first run. - What the kit lacks (the campaign tile database,
terrain/, with the legend oftiles/ campaign/ _tile_database tile_map.png's colours; the lighting; the sea materials) is extracted from the game's packs with RPFM.
The order of runs§
The tw-modding tutorial on campaign maps gives this order; the details, which are the reference, are in the BOB guide:
- The relief first: the next steps depend on it and read it from your pack. Put it in your pack, in the game's
datafolder, then close and reopen BOB. - The tile map: into the pack again, then close and reopen BOB.
- The global tile map (roads and cliffs).
global_props.bin, the placed objects: redo it whenever a region is added or removed (BOB then reads CAIME'smap.hex); up to ten minutes on a large map, the tutorial says.
From Terry, each Process with BOB starts a new BOB. After each run, read bob_warnings.log, in assembly_kit/, and count the “Failed to find tile”: each one is a hole in the terrain. Check bob.log too: its first line states how many actions were selected (N action(s) were selected for execution.), and each finished action has its (STATUS: Finished) line; how many to expect: see the limits, below. Finally, look in working_data/: the built relief (full_height_map.dds), tile_list.bin and global_props.bin.
Known limits§
- Six actions out of fifteen. A full run on a campaign terrain has 15 actions (for us, about a minute once the relief is compressed, 25 minutes the first time). For a map that the game's database (the one in CA's packs) does not know, BOB runs only 6 of them, without a message; adding the map to the kit's database or to a mod pack changes nothing. We know of no official way to lift this limit: make a control case, then ask the community. A control case is a known-good project copied under another name: if it also stops at 6 actions, your project is not the cause.
- “Generate Camera Height Map” crashes BOB (the tutorial reports this crash too). The camera height map (
camera_heightmap.png) is approximated by the tutorial from the relief, scaled; the corruption mask is painted by hand or by script (by script, for us). - As long as no built terrain exists, Terry crashes when opening the project in 3D: untick 3D View in the opening dialog (Open…).
- A campaign has two terrains: its own, and a battle terrain declared by its campaign playable area (
terrain_foldercolumn,terrain/). Without it, the game crashes at the first land battle, even between two AIs, so often at the very first end of turn. It is a battle tile map, which BOB builds as such; CA's also carries battle locations and catchment maps.battles/ <folder>/
The full story of a port, walls included: the porting tutorial.
Terry's pitfalls§
First, the working_data lock, in four cases:
- An open Terry locks
working_data, including the packs placed there. Before running BOB from its own window, or saving a pack intoworking_data, close Terry and the game; Process with BOB, started from Terry, is not affected. - Tweak and Terry closed during CAIME's exports: during CAIME's Map Data and Dynamic Resources exports, Tweak and Terry must be closed (Terry is a mode of Tweak). Don't rely on CAIME's warning: it looks for a program named
Tweak.AssemblyKit, whereas the Warhammer III kit's one is calledtweak.modder.x64.exe. - The preview is not the game: every culture variant shows at once; decals are white spheres; campaign tree-map forests only show if the matching preview option is on (
show_campaign_tree_map, in the Settings; off on our install), and only for tree families the kit's database knows; map-specific textures are ignored; water is rendered differently. All of that is judged in game. - Create battle for tile…: once per map is enough. What a second run would do to a folder you have edited is not documented: don't rerun it on a tile map you have changed.
- Without
.terry.user, a campaign preview has neither water nor trees: that small file, next to the.terry, holds the preview settings. - CA's documentation dates from the first Warhammer. Its Export Map has become Process with BOB, followed by RPFM; and the deployment zone colours have swapped (2016: 0 red, 1 blue; Warhammer III: 0 blue, 1 red): trust the Alliance ID, never the colour.
- The Defensive Hill AI Hint must be a closed polygon, or a crash is likely.
- BOB rewrites its outputs on every run: a manual touch-up in
working_datadisappears on the next run. - Snow since 9.0: the Immortal Empires snow material (
combi_campaign_snow.xml.material) no longer cites a mask; the game binds the campaign's ownsnow_mask.ddsby itself. Don't copy a snow material for each map.
For an AI reading this page§
If you are an AI helping someone use Terry, here are the essentials, checked on a real project. These facts were gathered on the game's patch 8.1 (September 2026), then reviewed for update 9.0 (for us, the kit update rewrote the raw_data\ tables but touched neither the terrain nor working_data): check them again after an update.
- Ask the human before launching the game, driving the screen or publishing; delete nothing: tidy away, only the human deletes.
- No reverse engineering and no workaround of a CA tool: when a tool gets stuck, a control case, then the community (CAIME's Discord, tw-modding).
- Terry is a mode of Tweak. Assembly Kit Steam launcher: Battle Map Editor: Terry =
tweak.modder.x64.exe /, fromstandalone TerrainMetadataEditor binaries(windowTWeak - Terry, about 25 s); Exporter: BOB =bob.modder.x64.exe -no_console; Database Editor: Dave (Dave, which CA spells DaVE). No command drives Terry; no guessed options. - BOB opens from the Assembly Kit's Steam launcher (Exporter: BOB), from its executable
bob.modder.x64.exe, or from Terry (Process with BOB, Ctrl+P), which hands it the work. On the command line, its only known option is-no_console, the one the launcher passes. - Public kit: battle tiles only. Tile:
raw_data/; tile map:terrain/ tiles/ battle/ <tile set>/ <map>/ raw_data/, created by Create battle for tile… (once is enough); BOB on the tile map, then on the tile.terrain/ battles/ <map>/ explicit_tiles: thex,y,path,0line already exists (tutorial): change its x,y, in pixels oftile_map.png, x from the left, y from the top (the tile's top-left corner); path fromterrain/, with forward slashes. 8 × 8 tile in the centre of a 64 × 64 tile map: 28,28, as in the kit's example map.- Alliance ID 0 = attacker, shown in blue in Warhammer III's Terry; 1 = defender, in red (CA's 2016 documentation says the opposite). Trust the number, never the colour.
battles_tables: copy a game row, Paste as New Row, change the key first; table file never nameddata__.specification=terrain/;battles/ <map>/ battle_environment= an.environment_groupfromweather/;battle/ screenshot_pathimage in 3:1 format; textbattles_localised_name_<key>.- Terry's logs:
working_data/; autosaves inTerry/ local/ terry_error_log.txt working_data/(every 15 minutes on our install, set inTerry/ local/ autosave/ settings.xml). - Campaign: project to create in
raw_data/(terrain/ campaigns/ <map>/ .terryversion 27, one entity per region). Therules.bobrecipe is in the parent folder,raw_data/; the one in the map folder only copies (terrain/ campaigns/ rules.bob [Copy],[+AssetGraph]). - Rasters: 8 px per hex (+ 4 rows),
HeightShroud4 (+ 2), trees, corruption, snow andtile_map.png2 (+ 1).PatchVisibilityMask: one cell per patch of p tile-map pixels, p = ceiling(longest side / 128), i.e. (width // p) × (height // p) cells. - Sea declared in
tile_map.png(sea, 83, 141, 213), floor below 0 everywhere; coast as a one-hex band; roads as 2 × 2 pixel blocks (conventions established on our project and ChaosRobie's). - Order of campaign runs: the relief, put it in the pack (in the game's
data), close and reopen BOB; the tile map, into the pack, close and reopen BOB; the global tile map;global_props.bin, to redo whenever a region is added or removed (it reads themap.hex). The tutorial says restart: you close BOB and reopen it, you don't just “rerun” it. - A full run on a campaign terrain has 15 actions. For a map that the game's database (the one in CA's packs) does not know, BOB runs only 6, without a message; adding the map to the kit's database or to a mod pack changes nothing. No known official way: a control case, then the community. Never promise 15 actions for a new map.
- Before running BOB from its own window, or saving a pack into
working_data, close Terry and the game; Tweak and Terry closed during CAIME's Map Data and Dynamic Resources exports. Readbinaries/andbob.log binaries/. Judge in game, not in the preview.bob_warnings.log - Details: BOB, RPFM, CAIME, the modder's tools, modding with an AI.
Sources and links§
- Creative Assembly wiki, pages written for the first Total War: WARHAMMER's kit (some labels have changed since): Terry introduction, Terry contents, interface, shortcuts, quick start, including zones, navigating the viewport, painting and saving, and Rules.bob.
- tw-modding wiki: Map Making for WH3 (WakaWaka300), Campaign Map Making for Warhammer III, Custom Campaign Settlement Skins (Warhammer III part, ChaosRobie), RPFM For Dummies, and, for Warhammer II, Land Battle Maps and Custom Vistas.
- The Warhammer III Assembly Kit's files, read only: Terry's settings and shortcuts (
settings.xml,keyboard.xml,status_tooltips.xml,entity_configuration.xml), the kit'srules.bobfiles, the example map, thebattlestable (battles.xml). - The Immortal Empires Expanded campaign Terry project, shared by ChaosRobie, and our own project.
- Our other guides: BOB, RPFM, CAIME, the modder's tools, modding with an AI; and the modders' workshop.
Frequently asked questions
Can Terry edit a campaign map?
It can open a campaign-type project, but the public kit ships none, nor any campaign terrain data: you have to rebuild one, on the model of the project ChaosRobie shared for Immortal Empires Expanded.
How do I open Terry?
From the Assembly Kit launcher in Steam (Play Battle Map Editor: Terry, which runs the command below), from Tweak (Plugins → Terry), or with the command tweak.modder.x64.exe /, run from the kit's binaries folder. Don't try any other option.
Can Terry be driven from the command line?
No: you can only open it. Everything else happens in its window, with keyboard and mouse; BOB is started from Terry with File → Process with BOB.
Alliance ID 0 or 1: who attacks?
0 is the attacker, 1 the defender. In Warhammer III's Terry, 0 shows in blue and 1 in red; CA's 2016 documentation had it the other way round. Trust the number, never the colour.
Why doesn't my map show up in custom battle?
Check that the pack is in the game's data folder and enabled in the launcher, that it holds the built files of both the tile map and the tile, that the specification in battles_tables points to the tile map's folder (terrain/ with the trailing slash, as in the tutorial; if you copied a CA row, keep its form), and that the battles_localised_name_<key> text and the image exist.
Why doesn't Terry show my map the way the game does?
Its preview is not the game: every culture variant at once, white spheres instead of decals, no map-specific textures, water rendered differently. Campaign tree-map forests only show if the show_campaign_tree_map option is on in the Settings, and only for tree families the kit's database knows. Fidelity is judged in game.
Why does BOB only build part of my new campaign map's terrain?
A full run on a campaign terrain has 15 actions (for us, about a minute once the relief is compressed, 25 minutes the first time). For a map that the game's database (the one in CA's packs) does not know, BOB runs only 6 of them, without a message; adding the map to the kit's database or to a mod pack changes nothing. We know of no official way to lift this limit: make a control case, then ask the community.
Terry crashes when opening my campaign project: what can I do?
As long as no built terrain exists for that map, Terry crashes when opening it in 3D: untick 3D View in the opening dialog (Open…).
Must I close Terry before running BOB?
Before running BOB from its own window, or saving a pack into working_data, close Terry and the game: an open Terry locks working_data. Process with BOB, started from Terry, is not affected.
Terry crashed: where should I look?
In the kit's working_data/ folder: terry_error_log.txt, where Terry logs its errors, and the autosave folder, where it keeps its autosaves (every 15 minutes on our install; the delay is set in the Settings). Save often: CA warns that Terry sometimes crashes.
My tile doesn't show in the tile map: what should I check?
The explicit_tiles line: x,y in pixels of tile_map.png, x from the left, y from the top, at the top-left corner of the vista's black square; a path starting from terrain/, with forward slashes, to the tile's folder; the final 0. Then run Process with BOB on the tile map and reload it in Terry, as the tutorial says. Finally, read bob_warnings.log, in the kit's binaries folder.
The armies deploy in the wrong place: why?
Check the Alliance ID of both deployment zones: 0 for the attacker, 1 for the defender, whatever their colour. Each zone has its additive Deployment Zone Region, Zone ID at 0. Then redo the BOB run on the tile and put its files back into the pack.
Where can I find a vista?
The Warhammer III kit ships none. The tw-modding tutorial for Warhammer III provides some, taken from Warhammer II; the same wiki's Custom Vistas page, written for Warhammer II, explains how to make one from those in the Warhammer II kit (raw_data/). From a vista you take tile_map.png and climate_map.png, which you place in your tile map's folder.
This guide as plain text (Markdown), for AIs and offline reading
This is a community guide
A mistake, a pitfall you hit, a tip or a newer tool version: tell us, and every correction will be checked, then added with its source.
Suggest an idea