Modding, or creating mods, is the act of modifying the behavior of the base game (often referred as vanilla), either for personal use, or to release publicly to other players, for instance via the Steam Workshop.
As for all Paradox games, Crusader Kings II is moddable to a great extent.
Motivations of modders may vary widely: better translation to native language, more events or decisions, better map, major overhaul, etc.
Modding is not magic or heresy, anybody can learn to build a mod, and this guide is intended to lower the entry barriers to the world of CKII modding.
Yet, however good the documentation, there is still a learning curve to it, and it cannot replace the need to read some working vanilla code and do lots of trial and error!
Guidelines
- Create a mod for your modifications: create a personal mod even for small changes, and never modify directly game files in Steam CKII folder, as they may be overwritten without warning.
- Use a good text editor to edit files and search into multiple files. See text editors.
- Validate your mod with The Validator, it will save you a lot of pain and time troubleshooting crashes and bugs.
- Minimize overwrites of vanilla files by adding separate files and loading from folders whenever possible, to improve mod compatibility and maintenance.
- Use a proper merge tool, to merge between folders, and update modified vanilla files to a new vanilla patch.
- Backup your work to avoid losing everything. In case of a modding team, consider using a source control system like GitHub to act as backup and also manage collaboration.
- Use ANSI (Windows-1252) encoding for text files.
- Indent properly to easily spot unclosed curly braced. Vanilla uses 1 tab for indentation rather than spaces.
- Use comments starting with # character, to remember reasons for writing tricky stuff.
Text editors
Here are text editors with CK2 language support:
- Notepad++: CKII language file
- Sublime Text: Syntax highlighting for Sublime Text 3
- Atom: language-crusader-kings--i-i
Mod structure
If creating a mod for the first time, see the detailed guide about creating a mod. |
Mods are located in folder ~\Paradox Interactive\Crusader Kings II\mod, which must contain:
- the .mod file, to tell the launcher what to do with the mod-folder.
- the mod folder or zip containing the mod data. The mod data must have the same file and folder structure as if it was along with CK2game.exe in the game directory. Note that folder and file names are case sensitive on Mac and Linux.
The name of the .mod file must not contain any white-spaces, otherwise it will not auto-select when re-starting the launcher.
The content of the .mod file is:
Key | Required? | Effect | Example |
---|---|---|---|
name | Yes | Defines the name that shows up in the launcher | name = "My Mod" |
path | Yes | Defines which folder is the mod's folder. It is relative to ~\Documents\Paradox Interactive\Crusader Kings II\ folder. | path = "mod/MyMod" |
user_dir | No | Tells the launcher to store saved games and temporary files in a specific folder. This can be useful for mods incompatible with vanilla saves (because of new titles, flags, religions, cultures, buildings, etc.), so that things don't get mixed up.
Warning: do not set user_dir for sub-mods of a main mod, as all user_dir of active mods are concatenated. |
user_dir = "MyMod" |
archive | No | Defines a zip-file instead of a folder. Alternative to path. It is relative to ~\Documents\Paradox Interactive\Crusader Kings II\ folder. This is the format used for mods downloaded from the Steam Workshop, but when uploading a mod to the workshop, path structure must be used instead. | archive = "mod/mymod.zip" |
replace_path | No | Tells the launcher to override everything in a folder, and load ONLY from the specified paths inside the mod. This is the only way to effectively remove stuff from vanilla, and is most often used for total conversion mods.
Notes:
|
replace_path = "history" replace_path = "history/characters" |
dependencies | No | Tells the launcher that another mod has to be loaded before this one. The other mod will be loaded first, allowing the 2nd mod to override some files (otherwise the 1st mod would win). A dependency is not a hard requirement; you do not need a dependency loaded if the mod has one set. This is simply a way for the mod file to tell the launcher which files should be loaded first. | dependencies = { "Another Mod" "Yet Another Mod" } |
picture | No | Image under mod folder to serve as banner for Steam Workshop (will be displayed as 268px × 268px JPEG) | picture = "MyMod.jpg" |
tags | No | List of tags for Steam Workshop. Warning: don't forget quotes for tags that contain spaces. | tags = { "Tag1" "Tag 2" } |
supported_checksums | No | List of expected checksums for which scripting condition supported_checksums will evaluate to true. This can be used in event modding to display a warning to the player.
|
supported_checksums = { ABCD EFGH } |
Below are some examples mod files, depending on the category of the mod:
Small mod
Small mods are the most common, and should neither use user_dir
nor replace_path
in order to keep compatibility with other small mods.
name = "Small Mod" path = "mod/SmallMod" picture = "SmallMod.jpg" tags = { "Mods" "Small" }
Big mod
Overhaul mods typically use user_dir
as saves wouldn't be loadable outside of the mod anyway.
For total conversion mods, replace_path
can be used to completely ignore vanilla directories that don't make sense in the context of the mod (history, flags, ...)
name = "Big Mod" path = "mod/BigMod" user_dir = "BigMod" replace_path = "history/provinces" picture = "BigMod.jpg" tags = { "Mods" "Big" }
Sub mod
Sub-mods of a main mod typically use dependencies
to be able to override files from main mod.
name = "Sub Mod" path = "mod/SubMod" dependencies = { "Main Mod" } picture = "SubMod.jpg" tags = { "Mods" "Main Mod" }
Game data
- Console commands, useful for debugging mods.
- Defines, which allow to influence some hardcoded vanilla behaviors
- Scopes, conditions, and commands used for scripting
- Modifiers, used to influence calculations made by the game
- Map data
Game structure
The game data is composed of hierarchy of folders, containing game files.
A mod follows the same folder structure as the base game, so that when loading the game the engine will combine files from vanilla and mod(s). In most folders, the engine will load all the files within, which allows a mod to add new definitions (titles, religions, ...) without having to copy and modify vanilla files. To make use of this, it is important to understand how the scripts are loaded both at file level and definition level.
The behavior when loading a mod is the following:
- Engine processes folders and files based on some hardcoded load order.
- If current folder is defined as
replace_path
, all vanilla files in that folder will be ignored, and only mod files will be loaded (if any). - If the mod folder and vanilla folder both contain files with same names, vanilla files will be ignored and mod version will be used.
- Inside a given folder, the order in which files are processed is usually alphanumerical on combined vanilla and mod file names, though some folders may have a different behavior.
- When encountering more than once the same definition (title, religion, decision, ...), the duplicate definition may:
- be ignored (first definition wins)
- fully override the previous definition (last definition wins)
- partially override the previous definition (definitions are merged/additive, which only makes sense if there is actually something to merge: hierarchy, list, etc.)
- coexist/break both (in which case duplicate IDs must be avoided)
Below is a list of CKII game files and folders, with associated modding guide, and loading behavior.
For loading behavior, the cell colours highlight whether the behaviour is the expected one, strange or requiring some attention, or unexpected and to be avoided.
File/Folder | What it contains | How to mod | Loading behavior |
---|---|---|---|
.\common\
|
General information
|
N/A | |
.\common\alternate_start\ | Alternate start modding | [?] Merge | |
.\common\artifact_spawns\ | Artifact modding | Merge. | |
.\common\artifacts\ | Definitions of artifacts | Artifact modding | Merge. |
.\common\bloodlines\ | Bloodline modding | ||
.\common\bookmarks\ | Bookmarks are configured here (scenarios/start dates) | Bookmark modding | Merge. Bookmarks are listed chronologically in-game, whatever the order in files. |
.\common\buildings\ | Buildings folder, all buildings are stored here. | Building modding | [?] Merge |
.\common\cb_types\ | Casus Belli folder, all Casus-belli are stored here. | Casus Belli modding | Merge, but override of casus belli by re-using same name does not work (creates duplicate casus belli) |
.\common\combat_tactics\ | Combat tactics definitions. | Unit modding | [?] Merge |
.\common\council_positions\ | Conditions for an A.I. councillor to adopt a certain category of voting behavior. | Councillor modding | [?] |
.\common\council_voting\ | A.I. rules for how councillors from a behavior category will vote | Councillor modding | [?] |
.\common\cultures\ | Cultures folder, all cultures are stored here. | Culture modding | Merge. Since patch 2.4 cultures are merged like religions, and a new culture may be added to a vanilla culture_group via a separate file. |
.\common\death\ | Death definitions | Death modding | |
.\common\death_text\ | Flavor text for succession screen | Death modding | |
.\common\defines\ | Defines. | Defines | [?] Merge. Entries in files override common/defines.lua values. |
.\common\disease\ | Diseases definitions. | Disease modding | [?] Merge |
.\common\dynasties\ | Dynasties folder, all dynasties are stored here. | Dynasty modding. | Merge. Duplicate dynasties loaded before vanilla (i.e., 000_ prefix) will overwrite dynasty shields. Duplicates loaded after (i.e., z_ prefix) will overwrite dynasty names. To overwrite both, use duplicate files, one with a preceding prefix and one with a succeeding prefix.
|
.\common\event_modifiers\ | Event_modifiers folder, all event modifiers are stored here | Modifiers | Merge. |
.\common\execution_methods\ | Execution methods | Death modding | [?] |
.\common\game_rules\ | Game rules definitions | Game rules modding | Merge. The rules are displayed in UI based on order of files (alphanumerical on file name), then order of rules within the file. |
.\common\government_flavor\ | Government naming definitions | Government modding | [?] |
.\common\governments\ | Government definitions | Government modding | Merge. It is possible to define governments of the same government group in different files. |
.\common\graphicalculturetypes\ | Graphicalculturetypes folder, all graphical culture types are stored here | [?] Merge | |
.\common\heir_text\ | Flavor text for succession screen | Death modding | |
.\common\holding_types\ | Conditions for being allowed to build each holding type. | Government modding | [?]. It is not possible to add new holding types. |
.\common\job_actions\ | Defines councillors actions | Councillor modding | Merge. |
.\common\job_titles\ | Defines councillors titles | Councillor modding | [?] |
.\common\landed_titles\ | Landed_titles folder, all landed titles are stored here. | Title modding | Merge. Merging behaviour is "complicated and might not have been designed that way intentionally"[1] |
.\common\laws\ | Law modding | Merge. A law with the same name as an existing law will append conditions to the allow section, but not the potential section. | |
.\common\mercenaries\ | Mercenaries folder, all mercenaries are stored here | [?] Merge | |
.\common\minor_titles\ | Minor_titles folder, all minor (i.e. honorary) titles are stored here | Minor title modding | Alphanumerical, full override. Last minor title definition wins. |
.\common\modifier_definitions\ | Defines dynamically defined modifiers, in particular special units modifiers. | Unit modding | [?] Merge |
.\common\nicknames\ | Nicknames folder, all nicknames are stored here | Merge. | |
.\common\objectives\ | Objectives folder, all objectives (i.e. ambitions, factions, and plots) are stored here. | Objective modding | [?] Merge |
.\common\offmap_powers\
|
Defines nations not represented on the map, but with a significant influence over it. | Offmap power modding | [?] Merge. Does NOT require Jade Dragon DLC. |
.\common\on_actions\ | On_actions folder, all on_actions are stored here | Event modding | Merge. Since patch 2.4 on_actions are merged, with new events being added to the previous list for a particular on_action, instead of replacing the list. |
.\common\opinion_modifiers\ | Opinion modifiers folder, all opinion modifiers are stored here | Modifiers | [?] Merge |
.\common\province_setup\ | Deprecated since patch 3.0. | ||
.\common\religion_features\ | Religion modding | [?] Merge, but features with the same key get duplicated | |
.\common\religion_modifiers\ | Religion_modifiers folder, all religion modifiers are stored here. | Modifiers | [?] Merge |
.\common\religions\ | Religions folder, all religions are stored here. | Religion modding |
Merge. Vanilla religions can be overridden, without needing to duplicate the whole religion group. Restrictions: need to define reformed religion before the non-reformed. |
.\common\religious_titles\ | Religious_titles folder, all religious titles are stored here | [?] Merge | |
.\common\retinue_subunits\ | Retinue subunits folder, all retinue subunits are stored here | [?] Merge, but retinues with the same key get duplicated | |
.\common\save_conversion\ | Save game compatibility | [?] | |
.\common\scripted_effects\ | Scripted effects | [?] Merge | |
.\common\scripted_score_value\ | Scripted score value | [?] Merge | |
.\common\scripted_triggers\ | Scripted triggers | [?] Merge | |
.\common\societies\ | Definition of societies | Society modding | Merge, but override of societies by re-using same name does not work (creates duplicate societies) |
.\common\special_troops\ | Special units definitions | Unit modding | [?] Merge |
.\common\stories\ | Not used. | N/A | |
.\common\succession_voting\ | Succession modding | [?] Merge | |
.\common\trade_routes\ | Trade route definitions. | Trade route modding | [?] |
.\common\traits\ | Traits folder, all traits are stored here. | Trait modding | Merge, but traits with same name will co-exist, and generated characters may get both versions of the trait at the same time. The last definition gets assigned to a character when using commands. |
.\common\tributary_types\ | Tributary relationship definitions. | Tributary modding | [?] |
.\common\triggered_modifiers\ | Defines global modifiers that trigger under certain conditions | Triggered modifiers | [?] Merge |
.\connectui\ | Appears to be leftover interface for the discontinued Paradox Connect service (used in older Clausewitz games CK2 is based on). | Unusable | |
.\decisions\ | Decisions folder, all decisions are stored here | Decision modding | Merge, but override of decision by re-using same name does not work (breaks the decision effect, that does nothing) |
.\dlc\ | Contains DLC information and zipped content files | DLC files | N/A |
.\dlc_metadata\ | ? | ? | |
.\eu4_converter\ | Europa Universalis 4 Save Converter folder, all files related to the EUIV converter are stored here.
Note: vanilla files were moved inside /dlc/dlc030.zip |
EU4 Converter modding | [?] |
.\events\ | Events folder, all events are stored here. | Event modding | [?] Merge |
.\gfx\
|
Graphics folder, all graphics are stored here. | Graphics modding
Graphics are mapped to a logical name (GFX_xxx) inside .\interface\*.gfx files |
|
.\history\ | Historical data for characters, titles, provinces and wars for the possible start dates. This is a likely the text export of an internal database, which is sometime mentioned in the patch notes.[2] | History modding | N/A |
.\history\characters\ | Historical characters, optionally associated to a dynasty from \common\dynasties\ folder. | Character modding | [?] Merge. Duplicate character IDs break the character history and must be avoided. |
.\history\diplomacy\ | Not used | N/A | N/A |
.\history\offmap_powers\ | History of offmap powers (holder, status, ...) | Offmap power modding | [?] Merge |
.\history\provinces\ | History of provinces (holdings built, change of culture or religion) | Province modding | [?] Merge |
.\history\technology\ | Initial technology of provinces, depending on the start date. | Technology modding | [?] |
.\history\titles\ | History of titles (list of successive holders) | Note: titles that should be deactivated at game start (ex: reformed religion heads) must have an history file that disables the title. | [?] Merge |
.\history\wars\ | Important on-going wars (attacker, defender, Casus Belli, war score, ...), usually for historical bookmarks. | [?] Merge | |
.\interface\
|
Interface graphics | Interface modding |
|
.\interface\coat_of_arms\ | Coats of arms modding | Coat of arms definitions can be split across multiple files. No support for appending existing definitions from a different file. | |
.\interface\portrait_offsets\ | .txt files with external offsets for portrait frames | Portrait modding | |
.\interface\portrait_properties\ | Dynamic rules to select portrait properties values | Portrait modding | [?] |
.\interface\portrait\ | Definitions of spriteType and portraitType elements for portraits. | Portrait modding | Merge |
.\launcher\ | Launcher graphics and configuration | N/A | |
.\localisation\ | All text data for things like country names and event description, has options for other languages | Localisation | Full override. If duplicates are in different files, first file loaded wins (i.e. use 00_ file prefix to override vanilla keys). If in same file, last duplicate in file wins. Warning: files must end with .csv extension, or they will not be taken into account. |
.\localisation\customizable_localisation\ | Custom localisation commands definitions | Localisation#Custom commands | [?] Merge. |
.\map\
|
Map settings, province shapes, continents, regions etc. | Map modding | N/A |
.\map\statics | Map external frame size, and positions of fixed 3D map elements (wonders, etc.) | Map modding | |
.\map\terrain | Map modding | ||
.\mod\ | Dummy mod folder, do not store mods here, use local mod folder | Mod file | Breaks mods, as configurations like replace_path are ignored. |
.\music\ | Music used by the game | Music modding | [?] All .txt files song elements are loaded. |
.\sound\ | All sounds except music | [?] | |
.\tutorial\ | Tutorial configuration | [?] |
Specific guides
- Only includes guides not already linked in the "How to mod" column above or otherwise.
- Troubleshooting - how to find errors in your mod
- Save-game editing - how to change a save game
- Patch 2.4 mod compatibility guide - how to migrate a mod from patch 2.3.6 to patch 2.4.X
- Patch 2.5 mod compatibility guide - how to migrate a mod from patch 2.4.5 to patch 2.5.X
- Patch 2.6 mod compatibility guide - how to migrate a mod from patch 2.5.2 to patch 2.6.X
- Patch 2.7 mod compatibility guide - how to migrate a mod from patch 2.6.3 to patch 2.7.X
- Patch 2.8 mod compatibility guide - how to migrate a mod from patch 2.7.2 to patch 2.8.X
- Patch 3.0 mod compatibility guide - how to migrate a mod from patch 2.8.3.2 to patch 3.0.X
- Merging guide - how to merge mod files with a new vanilla patch
- Total conversion guide - Creating a total conversion mod
- Creating a mod exe installer guide - Advanced guide for creating a Windows installer
Tools & utilities
- These are utilities for modders. For player tools, see utilities.
- Notepad++ - Editor to change files, is better than normal editor
- Notepad++ language file for CKII - very helpful to read code
- The Validator - Support tool to find errors in files
- EU4:JoroDox mod making tool / Forum thread - View mod files & create CK2 compatible 3D models
- CK2 Cultures Parser
- Coat of Arms Builder
- Portrait Builder - Tool to preview character portraits
- Scenario Editor
- Titular Title Generator
- Text Fixer - alphabetize your localisation file
Advanced tips
- For the bigger mods using a source control management tool (Git, ...), it is handy to create a symbolic link between CKII mod folder and the working directory of the local repository, especially if the mod also has sub-mods. Note that you'll still need to copy the .mod file(s) manually, but they rarely change. Run the following command from the parent directory of main git folder, replacing:
- <mod_path_name> by the value of
path
attribute from .mod file - <git_mod_folder> by the name of the sub-folder that contain mod data (folders common, decisions, events, etc...)
- <mod_path_name> by the value of
mklink /J "%HOMEDRIVE%%HOMEPATH%\Documents\Paradox Interactive\Crusader Kings II\mod\<mod_path_name>" ".\<git_mod_folder>"
MOD调试
毫无疑问,更多隐藏的控制台指令(在控制台输入help也不会显示的内容)对MOD测试会起到巨大的作用。
- observe - 让你进入观察者模式。此时你不再控制任何特定的角色——这会让游戏不受打断地自动运行。同时,所有隐藏特质、秘密信仰等对观察者都是可见的。
- run <filename.txt> - 直接运行特定脚本。脚本将从当前玩家控制角色的作用域开始执行。这个功能有助于测试复杂的脚本——你可以直接打开一个窗口编辑脚本,保存,重新载入,调整——省下重新打开游戏的时间。
- reloadevents - 重新载入和编译每一个事件(可能花费一会时间,取决于你的硬件)。对调试事件很有帮助,同样为你省下重新打开游戏的时间。
- reloadloc - 重新载入本地化文件,有助于确定文本是否显示在正确的位置上。
更多控制台指令可以在首页找到,用于实现杀掉某人之类的特定功能,这些对MOD测试同样必不可少。
External links
See also
References
历史 | 角色 • 家族 • 省份 • 头衔 • 剧本 |
脚本 | 指令 • 条件 • 作用域 • 修正 • 事件 • 决议 |
常规 | 定义 • 游戏规则 • 另类开局 • 宗教 • 文化 • 政体 • 特质 • 血脉 • 科技 • 法律 • 建筑 • 宣战理由 • 朝贡国 • 单位 • 目标 • 疾病 • 死亡 • 荣誉头衔 • 社团 • 宝物 • 地图外政权 • 内阁成员 • 贸易路线 • 继承 • 奇观 • 称号 |
图像/音效/本地化 | 地图 • 图形 • 盾徽 • 肖像 • 界面 • 小地图 • 音乐 • 本地化 |
其他 | 故障排除 • 验证器 • 控制台指令 • 编辑游戏存档 • Steam创意工坊 • EU4转档器模组制作 |