<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://tw-modding.com/index.php?action=history&amp;feed=atom&amp;title=Tutorial%3ACampaign_Map_Making_for_Warhammer_III</id>
	<title>Tutorial:Campaign Map Making for Warhammer III - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://tw-modding.com/index.php?action=history&amp;feed=atom&amp;title=Tutorial%3ACampaign_Map_Making_for_Warhammer_III"/>
	<link rel="alternate" type="text/html" href="https://tw-modding.com/index.php?title=Tutorial:Campaign_Map_Making_for_Warhammer_III&amp;action=history"/>
	<updated>2026-05-09T14:37:09Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://tw-modding.com/index.php?title=Tutorial:Campaign_Map_Making_for_Warhammer_III&amp;diff=1381&amp;oldid=prev</id>
		<title>ChaosRobie: Created page with &quot;: ''WIP. Just describing the outputs makes it feel incomplete. Missing CAIME layer explanation. Missing Terry project structure. Need to mention db stuff, including start_pos.'' == Introduction == Let's make one thing clear: There is a &quot;logical&quot; map, and there is a &quot;visual&quot; map.  The &quot;logical map&quot; is mostly made in CAIME, which is sort of like an image editor with layers. That's got stuff like regions, where settlements are placed, terrain type that influences how pathfi...&quot;</title>
		<link rel="alternate" type="text/html" href="https://tw-modding.com/index.php?title=Tutorial:Campaign_Map_Making_for_Warhammer_III&amp;diff=1381&amp;oldid=prev"/>
		<updated>2026-05-09T00:19:15Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;: &amp;#039;&amp;#039;WIP. Just describing the outputs makes it feel incomplete. Missing CAIME layer explanation. Missing Terry project structure. Need to mention db stuff, including start_pos.&amp;#039;&amp;#039; == Introduction == Let&amp;#039;s make one thing clear: There is a &amp;quot;logical&amp;quot; map, and there is a &amp;quot;visual&amp;quot; map.  The &amp;quot;logical map&amp;quot; is mostly made in CAIME, which is sort of like an image editor with layers. That&amp;#039;s got stuff like regions, where settlements are placed, terrain type that influences how pathfi...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;: ''WIP. Just describing the outputs makes it feel incomplete. Missing CAIME layer explanation. Missing Terry project structure. Need to mention db stuff, including start_pos.''&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Let's make one thing clear: There is a &amp;quot;logical&amp;quot; map, and there is a &amp;quot;visual&amp;quot; map.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;logical map&amp;quot; is mostly made in CAIME, which is sort of like an image editor with layers. That's got stuff like regions, where settlements are placed, terrain type that influences how pathfinding is calculated, areas that are impassable by armies, &amp;quot;bridges&amp;quot; that allow armies to cross water without disembarking, and beaches that allow armies to disembark into the sea. All of this is exists in 2d and without any visual component.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;visual map&amp;quot; is mostly made in Terry, which is a 3d map editor. And that's the stuff you can see. Like the ground, mountains, trees, vfx, and props.&lt;br /&gt;
&lt;br /&gt;
You want those visual things to correspond to the stuff in the logical map. For instance, you'd want a mountain placed where there is an impassable area. You can also think about it in the opposite way: you want an impassable area where you placed a mountain. Getting that correspondence is not very easy, since you're using two editors and don't interact directly. It takes planning, reference images, annotations, and working iteratively to get a good outcome.&lt;br /&gt;
&lt;br /&gt;
== Campaign map files and how to make them ==&lt;br /&gt;
The files you'd put in &amp;lt;nowiki&amp;gt;campaign_maps/&amp;lt;campaign map name&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== map_data.esf ===&lt;br /&gt;
CAIME creates this from a map.hex file. (Technically BOB.exe doing the processing, but there's some missing thing that CAIME is supplying).&lt;br /&gt;
&lt;br /&gt;
This is created very quickly, less than 15 seconds for even the most complex map.&lt;br /&gt;
&lt;br /&gt;
=== pathfinding.ppd ===&lt;br /&gt;
CAIME creates this, lots of processing and calculation involved. BOB.exe is unable to create this.&lt;br /&gt;
&lt;br /&gt;
This can take quite a while, more than a half hour for large maps with lots of settlements and roads with intersections.&lt;br /&gt;
&lt;br /&gt;
This file is critical, if you adjust ''anything'' in the map data, you will need to recreate this.&lt;br /&gt;
&lt;br /&gt;
=== spd_data.esf and hlp_data.esf ===&lt;br /&gt;
These are both created (at the same time) by giving a special command (using a user scrupt) to the game's .exe before you launch the game. But don't worry those details, because RPFM has a nice interface, there's a checkbox when you do Special Stuff -&amp;gt; Build Startpos.&lt;br /&gt;
&lt;br /&gt;
spd_data.esf is always created very quickly, within a minute. For medium sized maps (Immortal Empires) hlp_data.esf takes 5 minutes. However, for larger maps (Old World), it takes well over an hour.&lt;br /&gt;
&lt;br /&gt;
spd_data.esf is critical, if you adjust ''anything'' in the map data, you will need to recreate it. However, hlp_data.esf is bit less critical. It can be out-of-date, and the game will load without crashing. But pathfinding will be super screwed up, so definitely recreate before you release to the public!&lt;br /&gt;
&lt;br /&gt;
=== trade_routes.ptd ===&lt;br /&gt;
CAIME creates this.&lt;br /&gt;
&lt;br /&gt;
Not critical, it can be left out-of-date without any apparent issue.&lt;br /&gt;
&lt;br /&gt;
=== Lookup maps ===&lt;br /&gt;
CAIME does a .bmp output of the regions, colored based on their colors from the regions db table. You can process it yourself with BOB into these three images:&lt;br /&gt;
* &amp;lt;campaign name&amp;gt;_lookup.dds&lt;br /&gt;
* &amp;lt;campaign name&amp;gt;_lookup.tga&lt;br /&gt;
* &amp;lt;campaign name&amp;gt;_minimap.tga&lt;br /&gt;
&lt;br /&gt;
Not critical, it can be left out-of-date without crashing, but the map overlays will look a bit weird.&lt;br /&gt;
&lt;br /&gt;
==== elector_counts and hef_court ====&lt;br /&gt;
Crop the .bmp output and process it like the normal lookups.&lt;br /&gt;
&lt;br /&gt;
=== camera_heightmap.png ===&lt;br /&gt;
Greyscale 16 bit .png image, but with a special &amp;quot;tEXt&amp;quot; png block that gives the scale.&lt;br /&gt;
&lt;br /&gt;
Terry ''should'' be able to generate this, but it crashes when that is attempted.&lt;br /&gt;
&lt;br /&gt;
You can approximate it by using the map's heightmap, scaling it appropriately, and setting that &amp;quot;tEXt&amp;quot; block to the right value.&lt;br /&gt;
&lt;br /&gt;
There's also &amp;lt;nowiki&amp;gt;camera_sea_level_height_map.png&amp;lt;/nowiki&amp;gt; which is an optional greyscale 16 bit .png image. It does not have that special &amp;quot;tEXt&amp;quot; png block, so not exactly sure how it's scaling works. Vanilla uses this for the Realms of Chaos campaign, in the areas around the Realms of Chaos.&lt;br /&gt;
&lt;br /&gt;
=== borders.pbd ===&lt;br /&gt;
It's in a sub directory, but still very important: &amp;lt;nowiki&amp;gt;/display/borders/borders.pbd&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CAIME can create in seconds.&lt;br /&gt;
&lt;br /&gt;
Not critical, it can be left out-of-date without crashing, but the borders drawn on the terrain will look a bit weird.&lt;br /&gt;
&lt;br /&gt;
=== trees.campaign_tree_list ===&lt;br /&gt;
This is a visual map thing, but it is in the campaign_map folder for some ungodly reason. It's in a sub directory: &amp;lt;nowiki&amp;gt;/display/trees/trees.campaign_tree_list&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
BOB creates this from your campaign map Terry project, it uses the heightmap found in your .pack, so you should recreate this anytime you change it.&lt;br /&gt;
&lt;br /&gt;
Put a pin in this.&lt;br /&gt;
&lt;br /&gt;
=== And the rest of the display folder ===&lt;br /&gt;
Everything else in &amp;lt;nowiki&amp;gt;/&amp;lt;campaign map name&amp;gt;/display&amp;lt;/nowiki&amp;gt; (other than borders.pbd and trees.campaign_tree_list) is boiler plate and you should just copy it from a vanilla campaign map.&lt;br /&gt;
&lt;br /&gt;
== More campaign map files and how to make them ==&lt;br /&gt;
The files you'd put in &amp;lt;nowiki&amp;gt;terrain/campaigns/&amp;lt;campaign map name&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For all of these, BOB processes them from your Terry project.&lt;br /&gt;
=== Height map ===&lt;br /&gt;
* full_logic_map.compressed_map&lt;br /&gt;
* full_height_map.dds&lt;br /&gt;
Process this first, because the tile map, global tile map, trees, and even global_props depends on it. Also, put it into your .pack (and restart BOB) before you do those other things, because that's where BOB looks for it.&lt;br /&gt;
&lt;br /&gt;
This combines both the sea and land heights from Terry.&lt;br /&gt;
&lt;br /&gt;
=== Tile map ===&lt;br /&gt;
* tile_list.bin&lt;br /&gt;
* tile_mask.dds&lt;br /&gt;
This is mostly just the ground and sea floor. And also coastal cliffs and (visual) roads.&lt;br /&gt;
&lt;br /&gt;
Process this after the height map has been processed, put into your .pack, and BOB restarted.&lt;br /&gt;
&lt;br /&gt;
==== Global tile map ====&lt;br /&gt;
There's actually a second tile map. The main one has the roads/cliffs as invisible. This global one only has the roads and cliffs.&lt;br /&gt;
&lt;br /&gt;
Sub-directory: &amp;lt;nowiki&amp;gt;/global_map/tile_list.bin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
BOB gets this from the main tile map, the one it finds in your .pack. So that means you should process this only after the real tile map has been processed, put into your .pack, and BOB has been restarted.&lt;br /&gt;
&lt;br /&gt;
==== patch_mask.dds ====&lt;br /&gt;
Despite it's name, this isn't doesn't define the &amp;quot;campaign_terrain_patch_areas&amp;quot; from the db (that's what terrain_visibility_mask.dds is). This is like some sort of optimization for the boring land/sea floor tiles, as far as I can tell. Annoyingly, it screws up for maps of a certain dimension, leaving small holes in the terrain around complex, northerly coastlines. The fix is to edit it in a hex editor, duplicating a horizontal line of data.&lt;br /&gt;
&lt;br /&gt;
=== global_props.bin ===&lt;br /&gt;
This file holds almost everything except the trees and ground. It's pretty big, and can take a few minutes to process (up to 10 minutes).&lt;br /&gt;
&lt;br /&gt;
It's also a little weird, because when BOB processes this it peeks at the map.hex file. So make sure that's synced up with the db, or the process will fail. It also means that you'll want to recreate global_props.bin anytime you add or remove a region. If you don't, it's a mixed bag between weird pop-in/pop-out visual glitches, and I recall seeing a crash too.&lt;br /&gt;
&lt;br /&gt;
==== Models folder ====&lt;br /&gt;
An output of processing global_props.bin, all the rivers. What BOB is doing is making each river spline into a bespoke model and outputting it to &amp;lt;nowiki&amp;gt;&amp;lt;campaign map name&amp;gt;/models&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Lighting ====&lt;br /&gt;
Another output of processing global_props.bin, the environment stuff ends up in this subdirectory: &amp;lt;nowiki&amp;gt;&amp;lt;campaign map name&amp;gt;/lighting&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Blend ===&lt;br /&gt;
The &amp;quot;blend&amp;quot; texture is the ground/terrain texture. Both output to the global folder:&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;&amp;lt;campaign map name&amp;gt;/global_map/global_blend.dds&amp;lt;nowiki&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;&amp;lt;campaign map name&amp;gt;/global_map/texture_arrays.xml&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== And the the rest ===&lt;br /&gt;
Nothing much to say about these:&lt;br /&gt;
* colour_overlay.dds&lt;br /&gt;
* lf_sea_colour.dds&lt;br /&gt;
* snow_mask.dds&lt;br /&gt;
&lt;br /&gt;
==== shroud_heights.dds ====&lt;br /&gt;
Terry has a &amp;quot;Fill from terrain&amp;quot; for the shroud height layer, just click that and process. Good enough.&lt;br /&gt;
&lt;br /&gt;
==== corruption mask.dds ====&lt;br /&gt;
White = Corruption shows at 1%&lt;br /&gt;
Black = Corruption shows at 100%&lt;br /&gt;
There doesn't seem to be a way to automatically generate this using Terry or BOB. So hand-painting it is (or clever python scripts!).&lt;br /&gt;
For each regions, you want white around settlements, then greys slowly getting darker until the borders are reached.&lt;br /&gt;
&lt;br /&gt;
==== lf_normal.dds ====&lt;br /&gt;
You can export a normal texture from Terry, it's in one of the menus. It'll be in .bmp format, and BOB can convert it to .dds&lt;br /&gt;
&lt;br /&gt;
==== terrain_visibility_mask.dds ====&lt;br /&gt;
Optional. This defines the campaign_terrain_patch_areas, which are used in vanilla to hide/show the Realms of Chaos.&lt;/div&gt;</summary>
		<author><name>ChaosRobie</name></author>
	</entry>
</feed>