地图模组制作

本页面所适用的版本可能已经过时,最后更新于1.1

十字军之王 III中,可以修改游戏地图。这包括编辑陆地、海洋、河流和省份。关于修改头衔,请见头衔模组制作

如何开始[编辑 | 编辑源代码]

这样打开地图编辑器:

  • Navigate to the Steam Library, right-click on CK3 and open properties.
  • Under the General tab, and within the "LAUNCH OPTIONS" section type -mapeditor in the specified field.
  • Simply open CK3. Do this with a map that functions before you try to use anything you've created. You can import new assets later from within the editor.
  • 导航至STEAM库中,右击CK3打开“属性”
  • 在“通用”菜单下,“启动选项”一栏输入“-mapeditor”
  • 打开CK3。在你尝试使用你所创建的任何东西之前,先用这个方式打开一个能够正常工作的地图。之后你就可以在编辑器内导入新的资源。(英文描述先不要删除,这句话翻译可能有歧义)

高度地图[编辑 | 编辑源代码]

爱尔兰和不列颠部分地区的高度地图示例

高度地图是每张地图的基础,定义了非羊皮纸地图的整体形状。高度地图用灰度图像表示,其中黑色是可能的最低海拔,白色是可能的最高海拔。

创建高度地图[编辑 | 编辑源代码]

对于现实世界的地点,美国航天局通过“Blue Marble project”项目的地形图部分向公众提供详细的高度图。

虚构的高度地图通常是使用软件组合创建的,通常是Photoshop或GIMP等图像编辑器和World Machine或Gaea等地形生成软件。

主高度地图文件[编辑 | 编辑源代码]

高度地图在“[mod]/map_data/heightmap.png”中找到,并且必须保存为16位灰度图像。

高度地图的尺寸必须符合“[mod]/map_data/heightmap.heightmap”中定义的“original_heightmap_size”。

其他高度地图文件[编辑 | 编辑源代码]

除了“heightmap.png”之外,还有两个重要的自动生成高度地图文件,“indirection_heightmap.png”和 “packed_heightmap.png”。当高度地图被重新打包repack并保存时,CK3地图编辑器会创建这两个文件。

Repack.png

重新打包[编辑 | 编辑源代码]

当主heightmap.png被改变时,你必须在地图编辑器中“重新打包repack”以使河流、边界和头衔等符合新的高度地图。如果你有任何问题,如东西似乎不“服从”高度地图,第一个解决问题的步骤应该是重新打包repack

河流地图[编辑 | 编辑源代码]

爱尔兰和不列颠部分地区的河流地图示例

河流地图是一个定义海岸和河流的特殊文件,它既被地形引擎用来在地图上绘制河流,也用来定义军队过河的位置。它不用于通航的河流或其他水体。

错误创建的河流地图将导致游戏崩溃并跳回桌面。它们必须是索引的RGB图像,具有非常特定的调色板;在创建河流地图时,防止崩溃的最好方法是先使用游戏的原始河流地图(在“[CK3目录]/game/map_data/rivers.png”中找到)。除了原始颜色索引中的颜色外,任何其他颜色,包括反锯齿或透明,都会导致游戏崩溃并跳回桌面。

了解河流地图颜色[编辑 | 编辑源代码]

River map color table.png

河流地图应该是有颜色索引的,这意味着它们是用特殊编码保存的,只能使用某些特定的颜色。

每种颜色都有特定的含义,由游戏引擎转化为好看的河流。

  • #00ff00(纯绿色)表示河流系统的源头。
  • #ff0000(纯红色)表示一条支流进入主河。
  • #fffc00(纯黄色)表示河流向外分支。
  • #ff0080(洋红色)表示海洋、湖泊和通航河流。
  • #ffffff(白色)表示陆地。

其余颜色为浅蓝色到深蓝色的渐变,蓝色越深,河流越宽。

像素完美[编辑 | 编辑源代码]

River validity.png

每个河流像素必须与不超过2个其他河流像素正交相邻,分流和流入必须与不超过3个其他河流像素相邻。两个像素宽的河流以及仅用对角线像素连接的河流将无法渲染。

绘制程序[编辑 | 编辑源代码]

River special pixels.png

你可以认为CK3的河道绘制算法基本上是以三种特殊像素颜色(红、黄、绿)中的一种作为起点来绘制河段,其中绿色的那个是整个河系的起点。每条河段的一端应该有三种像素类型中的一种,另一端则没有。这意味着一条河流不能像现实生活中经常发生的那样,离开母体又重新加入母体。河段边上的红色和黄色像素与这个限制是分开的,因为它们会生成新的河段。三种河流类型中的每一种也决定了它生成的河段的流向。绿色和黄色像素使河流远离它们,红色像素使河流流向它们。

河源[编辑 | 编辑源代码]

每条河流系统应该只有一个源像素;这意味着如果一条河流有任何支流,这些支流不应该有绿色的源像素。

水下河道技巧[编辑 | 编辑源代码]

河流地图上的粉色和白色只是供你参考;它们都有不是河流的编码含义。因此,你可以像在陆地上一样轻松地在水中画出河流,只是不可见而已。当一条河流在湖泊或大海中结束时,建议将河流延续几个像素进入粉色区域(甚至完全穿过小湖泊,如果它在另一边再次出口的话),这样CK3可以更好地理解河流末端的方向性。

如果您有复杂的河流系统,也要穿过湖泊,这也是很有帮助的,因为它为您提供了一个额外的工具来协调现实生活中河流属性和CK3引擎功能之间的差异。

省份地图[编辑 | 编辑源代码]

爱尔兰和不列颠部分地区的省份地图示例

省份地图定义了男爵领和海区。在省份地图中,每个省份/海区都以独特的颜色来定义。就像河流地图一样,省份地图必须避免反锯齿和透明度。

省份地图不能定义伯爵领、公国、王国或帝国。要定义伯爵领、公国、王国和帝国,你需要在landed_titles文件夹中定义它们。

创建头衔[编辑 | 编辑源代码]

创建头衔的方法是将省份地图中的颜色与男爵领、伯爵领、公国、王国和帝国的定义联系起来。这个过程包括以下步骤。

  1. 创建一个省份地图来定义个别男爵领。
  2. 通过“[mod]/map_data/definition.csv”省份地图中的RGB来识别男爵领。
  3. 在“[mod]/common/landed_titles/”中的新文件中定义你的头衔层级。
  4. 在“[mod]/localization/[language]/”中新建一个文件,为你的头衔创建本地化。

定义男爵领[编辑 | 编辑源代码]

要把省份地图的颜色变成可用的男爵领地,你必须在“definition.csv”文件中定义它们。

男爵领定义的格式是

   [ID];[RED];[GREEN];[BLUE];[Barony Name];x;
   # 例如:
   2333;128;183;194;PARIS;x;

ID必须是是连续的,否则你的游戏会崩溃。

   # 这将工作。
   1;42;3;128;CAMELOT;x;
   2;84;6;1;AVALON;x;
   3;126;9;129;TINTAGEL;x;
   
   # 这将导致崩溃。
   1;42;3;128;CAMELOT;x;
   4;84;6;1;AVALON;x;
   19;126;9;129;TINTAGEL;x;

实地头衔[编辑 | 编辑源代码]

实地头衔和法律上的层级必须在“[mod]/common/landed_titles/”中定义。基本结构如下。

名称(e_empire_tier,k_kingdom_tier等)只是举例,“color”可以是任何你喜欢的RGB值,但“color2”是静态的,有效的首都是伯爵领头衔。任意等级头衔都可以包含多个下一等级头衔(比如1个帝国有5个王国)。

男爵领在游戏中出现的顺序与文件中的顺序相同。即第一个将是默认的首府。引擎将使用“[mod]\history\provinces@_title.txt”中设置的在任何设定日期的首府男爵领的文化和宗教来确定其伯爵领的文化和宗教。

 e_empire_tier = {
       color = { 0 0 0 }
       color2 = { 255 255 255 }
       capital = c_county_tier
   
       k_kingdom_tier = {
           color = { 0 0 0 }
           color2 = { 255 255 255 }
           capital = c_county_tier
   
           d_duchy_tier = {
               color = { 0 0 0 }
               color2 = { 255 255 255 }
               capital = c_county_tier
   
               c_county_tier = {
                   color = { 0 0 0 }
                   color2 = { 255 255 255 }
   
                   b_barony_tier = {
                       color = { 0 0 0 }
                       color2 = { 255 255 255 }
                       province = id(在map_data/definition.csv中定义)
                   }
               }
           }
       }
   }

省份的地形[编辑 | 编辑源代码]

You can set each province's terrain in [mod]/common/province_terrain/00_province_terrain.txt.

Each line's format is [prov_id]=[terrain] (plains/farmlands/hills/mountains/desert/desert_mountains/oasis/jungle/forest/taiga/wetlands/steppe/floodplains/drylands).

Note that the modification will take effect immediately in the game.

你可以在[mod]/common/province_terrain/00_province_terrain.txt文件中设置每个省份的地形。

每一行的格式为[prov_id]=[terrain] (plains/farmlands/hills/mountains/desert/desert_mountains/oasis/jungle/forest/taiga/wetlands/steppe/floodplains/drylands)。

注意,修改效果会在游戏内立即生效。

地图定位器[编辑 | 编辑源代码]

一旦定义了男爵领,就可以定义其四个主要定位对象object位置position。这将告诉引擎每块海区被调集军队的放置位置(船的位置),以及地图上每个男爵的地产建筑、被调集军队、军队战斗和攻城武器对象的位置。这四个定位器的位置分别在building_locators.txt、combat_locators.txt、player_stack_locators.txt和siege_locators.txt中定义,这些文件可以在“[mod]/gfx/map/map_object_data/”中找到。

在这些文件中,每个男爵领都由一个实例instance来表示,在这个实例中可以设置地图对象的位置、旋转和比例。例如,下面的代码定义了一个单一的男爵领的定位器,ID=1,标准尺寸,地图上的坐标为x=2000,y=1000:

   instances={
       {
           id=0
           position={ 2000.000000 0.000000 1000.000000 }
           rotation={ 0.000000 0.000000 0.000000 1.000000 }
           scale={ 1.000000 1.000000 1.000000 }
       }
   }

这些数值,特别是被调集军队在海陆省份的位置,用于定义部队移动寻路。在任何时候,都可以使用游戏中地图编辑器中的地图对象编辑器Map Objects Editor来微调这些对象的位置、旋转和比例。

要注意的是,如果一个模组的定位器文件有任何严重的问题,error.log应该会显示在“[用户]/[文档]/Paradox Interactive/Crusader Kings III/generated”文件夹中创建了四个文件(一般是地产建筑、被调集军队、军队战斗和攻城武器定位器文本文件)。您可以将这些文件复制到您的模组的“[mod]/gfx/map/map_object_data/”文件夹中,替换旧文件并重新启动游戏中的地图编辑器。

自动推移[编辑 | 编辑源代码]

游戏中的地图编辑器包含了一个自动推移Auto nudge工具(由对象放置模式object placement mode上的骰子按钮表示),允许用户自动生成陆地省份的对象定位文件,并在给定省份内随机测试新的对象位置。要使用它,编辑器应该使用省份选择工具,选择它想要随机的省份,然后点击推移工具按钮。然后,地图编辑器应该尝试在所有选定的省份上生成每个默认对象。

如果有任何无效的位置(例如,由于缺乏有效的生成空间而在该省份的区域外生成的对象),受影响的省份将在地图上以红色条纹交叉显示。要解决这个问题,用户就应该选择任何被红色条纹划过的省份,然后通过再次点击自动推移按钮尝试新的随机有效位置,或者手动将任何无效的对象拖入该省份。

游戏中的地图编辑器还允许用户对自动推移工具的生成设置进行微调。为了方便使用自动推移工具进行随机放置,用户可以缩小物体的碰撞框,或者调整每个物体之间的最小和最大距离。用户应该注意的是,默认攻城引擎的设置是经过优化的,这样攻城引擎的动画就能正确地与地产建筑对象进行交互。

连接[编辑 | 编辑源代码]

男爵领可以通过两种方式连接:拥有相邻的像素,或者在“[mod]/map_data/adjacencies.csv”中定义连接。

“adjacencies.csv”中的条目采用的格式是:

   ID From;ID To;Type;ID Through;start_x;start_y;stop_x;stop_y;Comment
   #例如:
   1527;1526;river_large;629;948;2791;-1;-1;London-Southwark
   -1;-1;;-1;-1;-1;-1;-1;
  • ID From、ID To和ID Through都是在“definitions.csv”中找到的ID。
  • ID From和ID To是男爵领;ID Through是海洋或可航行的河流。
  • 类型为“sea”或“river_large”。
  • start_x和start_y 是一个军队在“ID From”男爵领中“出发”的坐标(x,y)。
  • stop_x和stop_y是一个军队在“ID To”部落中“登陆”的坐标(x,y)。
  • start_x、start_y、stop_x和stop_y都可以使用“-1”来代替实际坐标,这将默认为军队在该男爵领的正常位置。
  • 保留文件末尾的“-1;-1;;-1;-1;-1;-1;-1;”。

使用自定义分辨率创建地图[编辑 | 编辑源代码]

注意:宽度和高度是您为您的模组设置的新宽度和高度。

  • common/defines/00_defines.txt:
   WORLD_EXTENTS_X # 应该是地图宽度 - 1 
   WORLD_EXTENTS_Z # 应该是地图高度 - 1 
   WATERLEVEL # Corresponds to the heights from the heightmap - if too low, no oceans/lakes will appear. If too high, the entire map will be covered with water
  • common/defines/graphics/00_graphics.txt
   PANNING_WIDTH # 无论你想让玩家从左到右平移多远。平移到边缘将意味着这等于地图的宽度
   PANNING_HEIGHT # 无论你想让玩家上下平移多远。平移到边缘将意味着这等于地图的高度


  • /gfx/map/surround_map/surround_mask.dds # 大小应该是:(宽度 x 高度)* 1/2
  • /gfx/map/surround_map/surround_fade.dds # 大小应该是:(宽度 x 高度)* 1/8
  • /gfx/map/terrain/ # 所有名称中拥有_mask(截至1.3版本有63个文件)或者.tga(截至1.3版本有2个文件)需要调整大小到:(宽度 x 高度)
    • flatmap.dds # 大小应该是:(宽度 x 高度)
    • colormap.dds # 大小应该是:(宽度 x 高度)* 1/4
    • detail_intensity.tga # 大小应该是:(宽度 x 高度)
    • detail_index.tga # 大小应该是:(宽度 x 高度)
    • ..._mask.png # 大小应该是:(宽度 x 高度)


  • /gfx/map/water/flowmap.dds # 大小应该是:(宽度 x 高度)* 1/4
  • /gfx/map/water/foam_map.dds # 大小应该是:(宽度 x 高度)* 1/8
  • /gfx/map/water/watercolor_rgb_waterspec_a.dds # 大小应该是:(宽度 x 高度)* 1/2
  • /map_data/heightmap.png # 大小应该是:(宽度 x 高度)确保这是RGB格式而不是RGBA。如果你得到一片白雾,可能是因为高度图以RGBA格式导出。为了修复此问题,你需要删除alpha(透明)图层
  • /map_data/provinces.png # 大小应该是:(宽度 x 高度)# 注意,即使这个尺寸是错误的,游戏也会加载
  • /map_data/rivers.png # 大小应该是:(宽度 x 高度)
  • /map_data/indirection_heightmap.png # 大小应该是:(宽度 x 高度)* 1/32
  • /map_data/heightmap.heightmap
   original_heightmap_size # 应该是 { 宽度 高度 } 
  • /content_source/map_objects/masks # 所有拥有_mask的文件(截至1.0版本有21个文件)需要调整大小到(宽度 x 高度)* 1/2


如何导入高度地图[编辑 | 编辑源代码]

如果您在加载或重新打包自定义高度地图时遇到困难(尤其是大的高度地图,这可能会有问题),请尝试以下步骤。这在1.1.3时有效。

  1. 将游戏本体的indirection_heightmap.png和packed_heightmap.png复制到模组的map_data目录下。
  2. 删除游戏本体文件夹中的indirection_heightmap.png和packed_heightmap.png。
  3. 加载地图编辑器并重新打包地图。重新打包的地图文件应该在游戏本体map_data目录下。
  4. 将新的indirection_heightmap.png和packed_heightmap.png从游戏本体目录中复制到模组的 map_data 目录中。
  5. 对于Steam用户,请验证游戏缓存的完整性,重新下载游戏本体indirection_heightmap.png和packed_heightmap.png文件。

常见问题[编辑 | 编辑源代码]

为什么我不能一直向右滚动?[编辑 | 编辑源代码]

你必须打开common/defines/graphics/00_graphics.txt,并设置为 PANNING_WIDTH = 8192 或任何你的地图的等效像素宽度。

为什么我不能使用自动推移(骰子)按钮来放置我的建筑和定位器?[编辑 | 编辑源代码]

由于一个错误,在你可以自动推移之前,你需要一些定义。幸运的是,游戏会为你生成它们。

复制以下目录中的所有文件:

   C:\Users\[user]\Documents\Paradox Interactive\Crusader Kings III\generated

将它们粘贴到:

   \gfx\map\map_object_data