Lhy19981018(讨论 | 贡献) |
|||
第8行: | 第8行: | ||
''重要'':大多数模组会改变校验码,将禁止玩家获得成就。在{{Cite file|Crusader Kings III\game}}中的{{Cite file|checksum_manifest.txt}}查看校验文件夹和文件。唯一安全的是替换纹理、字体、着色器或音乐的模组。 | ''重要'':大多数模组会改变校验码,将禁止玩家获得成就。在{{Cite file|Crusader Kings III\game}}中的{{Cite file|checksum_manifest.txt}}查看校验文件夹和文件。唯一安全的是替换纹理、字体、着色器或音乐的模组。 | ||
== | ==提示 & 指引== | ||
* '''创建一个mod对游戏进行修改''': 即使是很小的改动,也不要直接修改CK3游戏本体的游戏文件,而是要单独创建一个mod。因为本体更新时会直接覆盖这些修改,并且没有任何提示。 | |||
* '''使用好的文本编辑器''' 用来编辑和搜索文件。以下软件均免费: | *'''创建一个mod对游戏进行修改''': 即使是很小的改动,也不要直接修改CK3游戏本体的游戏文件,而是要单独创建一个mod。因为本体更新时会直接覆盖这些修改,并且没有任何提示。 | ||
** [https://code.visualstudio.com/ Visual Studio Code]. 有一个粉丝自制的CWTools扩展,具有Paradox语法高亮、验证以及触发器和效果的工具提示。要安装它,请到VS左侧面板的扩展,搜索CWTools。(注意:验证规则是不完整的,会在gui和本地化文件中显示许多错误) | *'''使用好的文本编辑器''' 用来编辑和搜索文件。以下软件均免费: | ||
** [https://notepad-plus-plus.org/downloads/ Notepad++]。选择Perl作为你的语言,因为它可以提供良好的高亮显示,并允许折叠代码块和注释。要将其设置为默认语言,请进入 "设置","样式器配置器",在左侧列表中找到Perl,并在底部的 "User ext. "字段中添加 "gui txt"(不加引号)。 | **[https://code.visualstudio.com/ Visual Studio Code]. 有一个粉丝自制的CWTools扩展,具有Paradox语法高亮、验证以及触发器和效果的工具提示。要安装它,请到VS左侧面板的扩展,搜索CWTools。(注意:验证规则是不完整的,会在gui和本地化文件中显示许多错误) | ||
** [https://atom.io/ Atom]。不包括本地化文件所需的UTF-8-BOM编码。除此之外,它是非常可定制的。选择Perl 6作为你的语言以获得更好的效果。要将其设置为默认,请到文件,配置,找到 "core:",并在下面添加。"customFileTypes: "source.perl6"。["txt""gui"]",比如[https://discuss.atom.io/t/how-do-i-make-atom-recognize-a-file-with-extension-x-as-language-y/26539 这个例子]。 | **[https://notepad-plus-plus.org/downloads/ Notepad++]。选择Perl作为你的语言,因为它可以提供良好的高亮显示,并允许折叠代码块和注释。要将其设置为默认语言,请进入 "设置","样式器配置器",在左侧列表中找到Perl,并在底部的 "User ext. "字段中添加 "gui txt"(不加引号)。 | ||
** [https://www.sublimetext.com/ Sublime Text]. There is an extension for it released by the developers of Imperator which could be used with CK3: [https://forum.paradoxplaza.com/forum/index.php?threads/sublime-tools-for-imperator.1274246/ Sublime Tools]. It adds colored highlighting for effects and triggers. If you want to toggle comments in Sublime, you also need to add [https://cdn.discordapp.com/attachments/563655919892692996/649656191173263370/PDXComments.tmPreference this file] to the same "User" folder. | **[https://atom.io/ Atom]。不包括本地化文件所需的UTF-8-BOM编码。除此之外,它是非常可定制的。选择Perl 6作为你的语言以获得更好的效果。要将其设置为默认,请到文件,配置,找到 "core:",并在下面添加。"customFileTypes: "source.perl6"。["txt""gui"]",比如[https://discuss.atom.io/t/how-do-i-make-atom-recognize-a-file-with-extension-x-as-language-y/26539 这个例子]。 | ||
* '''总是通过 error.log 文件检查mod运行中出现的bug'''。<nowiki>...\Documents\Paradox Interactive\Crusader Kings III\logs</nowiki> | **[https://www.sublimetext.com/ Sublime Text]. There is an extension for it released by the developers of Imperator which could be used with CK3: [https://forum.paradoxplaza.com/forum/index.php?threads/sublime-tools-for-imperator.1274246/ Sublime Tools]. It adds colored highlighting for effects and triggers. If you want to toggle comments in Sublime, you also need to add [https://cdn.discordapp.com/attachments/563655919892692996/649656191173263370/PDXComments.tmPreference this file] to the same "User" folder. | ||
* '''The log folder also contains lists of effects, triggers and scopes.''' Use "script_docs" and "DumpDataTypes" console commands in the game to generate them. | *'''总是通过 error.log 文件检查mod运行中出现的bug'''。<nowiki>...\Documents\Paradox Interactive\Crusader Kings III\logs</nowiki> | ||
* '''Start the game with -debug_mode -develop''' launch options to use the console and "reload gui", "reload gfx" commands. | *'''The log folder also contains lists of effects, triggers and scopes.''' Use "script_docs" and "DumpDataTypes" console commands in the game to generate them. | ||
** On Steam: right-click the game on Steam -> Properties -> Set Launch Options -> add -debug_mode -develop | *'''Start the game with -debug_mode -develop''' launch options to use the console and "reload gui", "reload gfx" commands. | ||
** Windows: Create a shortcut for the .exe file -> right-click it -> Properties -> add -debug_mode -develop at the end of the Target field | **On Steam: right-click the game on Steam -> Properties -> Set Launch Options -> add -debug_mode -develop | ||
* '''CK3文件夹在Linux系统的路径 ''' <nowiki>~/.local/share/Paradox Interactive/Crusader Kings III</nowiki> | **Windows: Create a shortcut for the .exe file -> right-click it -> Properties -> add -debug_mode -develop at the end of the Target field | ||
* Clearly communicate whether your mod is ironman-friendly to players. | *'''CK3文件夹在Linux系统的路径 ''' <nowiki>~/.local/share/Paradox Interactive/Crusader Kings III</nowiki> | ||
* Remove your local mod when you subscribe to the Steam version, otherwise it may not work in the game. | *Clearly communicate whether your mod is ironman-friendly to players. | ||
* Backup your work. Either manually or with a source control system like Git. Also consider using GitHub for team collaboration. | *Remove your local mod when you subscribe to the Steam version, otherwise it may not work in the game. | ||
* Use a proper merge tool (like [https://winmerge.org/?lang=en WinMerge]) to merge between folders and update modified files for a new patch. | *Backup your work. Either manually or with a source control system like Git. Also consider using GitHub for team collaboration. | ||
* If you're replacing text across dozens or hundreds lines of code, you may want to use regular expressions. They are available in all of the text editors above. Learning resources: [https://regexone.com/ RegexOne], [https://regexr.com/ RegExr]. | *Use a proper merge tool (like [https://winmerge.org/?lang=en WinMerge]) to merge between folders and update modified files for a new patch. | ||
*If you're replacing text across dozens or hundreds lines of code, you may want to use regular expressions. They are available in all of the text editors above. Learning resources: [https://regexone.com/ RegexOne], [https://regexr.com/ RegExr]. | |||
===本地化文件=== | |||
*本地化文件夹中的yml后缀结尾的文件必须以'''UTF-8 + BOM'''编码保存,以便游戏正确读取。 | *本地化文件夹中的yml后缀结尾的文件必须以'''UTF-8 + BOM'''编码保存,以便游戏正确读取。 | ||
*为了保证游戏正确读取文件,文件名需要以'''*l_<language>.yml'''形式保存。例如'''council_l_english.yml'''。 | *为了保证游戏正确读取文件,文件名需要以'''*l_<language>.yml'''形式保存。例如'''council_l_english.yml'''。 | ||
== Creating a mod == | ==Creating a mod== | ||
{{main|Mod structure#Creating initial files}} | {{main|Mod structure#Creating initial files}} | ||
It is recommended to use the game launcher to create the mod's initial files. | It is recommended to use the game launcher to create the mod's initial files. | ||
==上传/更新mod==。 | ==上传/更新mod==。 | ||
再次上传您的MOD更新, | 再次上传您的MOD更新, | ||
#打开启动器, | #打开启动器, | ||
#导航到 "mods "部分, | #导航到 "mods "部分, | ||
第49行: | 第53行: | ||
#*在Paradox Mods上,mod将在验证过程后被发布。你可能需要编辑你的描述,因为网站通常会删除换行符和BBCode格式。 | #*在Paradox Mods上,mod将在验证过程后被发布。你可能需要编辑你的描述,因为网站通常会删除换行符和BBCode格式。 | ||
==保存修改的内容== | |||
Save files are located in: | |||
*Windows: Documents\Paradox Interactive\Crusader Kings III\save games | |||
* Windows: Documents\Paradox Interactive\Crusader Kings III\save games | *Linux: ~/.local/share/Paradox Interactive/Crusader Kings III/save games | ||
* Linux: ~/.local/share/Paradox Interactive/Crusader Kings III/save games | |||
''It is not possible to edit an ironman save!'' | ''It is not possible to edit an ironman save!'' | ||
第62行: | 第64行: | ||
First start the game in the debug mode and save. | First start the game in the debug mode and save. | ||
* On Steam: right-click the game on Steam -> Properties -> Set Launch Options -> add -debug_mode | *On Steam: right-click the game on Steam -> Properties -> Set Launch Options -> add -debug_mode | ||
* Windows: Create a shortcut for the .exe file -> right-click it -> Properties -> add -debug_mode at the end of the Target field | *Windows: Create a shortcut for the .exe file -> right-click it -> Properties -> add -debug_mode at the end of the Target field | ||
PC(Windows): | PC(Windows): | ||
# Find the save file in the save games folder. | |||
# Right-click the save file and extract it like an archive with 7-Zip or WinRar. | #Find the save file in the save games folder. | ||
# | #Right-click the save file and extract it like an archive with 7-Zip or WinRar. | ||
# Right-click it and open with your text editor (Windows Notepad is not recommended as the save files are very big). | #将提取出的'gamestate'文件的扩展名重名为.ck3 | ||
# Edit the file and save it. | #Right-click it and open with your text editor (Windows Notepad is not recommended as the save files are very big). | ||
# | #Edit the file and save it. | ||
#游戏中会直接加载mod(不需要重复压缩)。 | |||
Autosaves can be edited directly without extracting the gamestate. | Autosaves can be edited directly without extracting the gamestate. | ||
Mac: | Mac: | ||
# | |||
# | #打开终端 | ||
# | #确认当前路径是正确的 | ||
# | #输入命令 "unzip FileName.ck3" | ||
# | #将提取出的'gamestate'文件的扩展名重名为.ck3 | ||
# | #保存此纯文本 | ||
#游戏中会直接加载mod(不需要重复压缩) | |||
{| class="wikitable" | {| class="wikitable" | ||
! | !平台!!保存方式!!路径 | ||
|- | |- | ||
| Windows || | |Windows||本地||<code>C:\Users\%USERPROFILE%\Documents\Paradox Interactive\Crusader Kings III\save games</code> | ||
|- | |- | ||
| Windows || Steam 云端|| <code>C:\Program Files (x86)\Steam\userdata\####\1158310\remote\save games</code> | |Windows||Steam 云端||<code>C:\Program Files (x86)\Steam\userdata\####\1158310\remote\save games</code> | ||
|- | |- | ||
| Mac || | |Mac||本地||<code>$HOME/Documents/Paradox Interactive/Crusader Kings III/save games</code> | ||
|- | |- | ||
| Linux || | |Linux||本地||<code>$HOME/.local/share/Paradox Interactive/Crusader Kings III/save games</code> | ||
|} | |} | ||
=== Contents of the gamestate file === | ===Contents of the gamestate file=== | ||
The table below contains the possible first-level blocks in the gamestate file. Entries are provided in order of appearance. | The table below contains the possible first-level blocks in the gamestate file. Entries are provided in order of appearance. | ||
{| class="wikitable" | {| class="wikitable" | ||
! Block | !Block | ||
! Description | !Description | ||
|- | |- | ||
| meta_data | |meta_data | ||
| Contains metadata about the game, such as the game version. Used by the main menu screen. | |Contains metadata about the game, such as the game version. Used by the main menu screen. | ||
|- | |- | ||
| ironman_manager | |ironman_manager | ||
| Related to ironman saving. | |Related to ironman saving. | ||
|- | |- | ||
| (various variables) | |(various variables) | ||
| These variables do not belong in a block. | |These variables do not belong in a block. | ||
{| class="wikitable" | {| class="wikitable" | ||
! Variable | !Variable | ||
|- | |- | ||
| date | |date | ||
|- | |- | ||
| bookmark_date | |bookmark_date | ||
|- | |- | ||
| first_start | |first_start | ||
|- | |- | ||
| speed | |speed | ||
|- | |- | ||
| random_seed | |random_seed | ||
|- | |- | ||
| random_count | |random_count | ||
|} | |} | ||
|- | |- | ||
| variables | |variables | ||
| Contains script flags. | |Contains script flags. | ||
|- | |- | ||
| game_rules | |game_rules | ||
| Contains the save's current game rules. | |Contains the save's current game rules. | ||
|- | |- | ||
| provinces | |provinces | ||
| Contains province data, including buildings. | |Contains province data, including buildings. | ||
|- | |- | ||
| landed_titles | |landed_titles | ||
| Contains the following sub-blocks: | |Contains the following sub-blocks: | ||
{| class="wikitable" | {| class="wikitable" | ||
! Sub-block | !Sub-block | ||
! Description | !Description | ||
|- | |- | ||
| dynamic_templates | |dynamic_templates | ||
| | | | ||
|- | |- | ||
| landed_titles<br>''(repetition)'' | |landed_titles<br>''(repetition)'' | ||
| Contains an entry for each landed title in the game, in the format: | |Contains an entry for each landed title in the game, in the format: | ||
<pre> | <pre> | ||
# Exact formatting in file is different in terms of spaces and lines | # Exact formatting in file is different in terms of spaces and lines | ||
第207行: | 第211行: | ||
In vanilla CK3, this block ends at entry ~12369. | In vanilla CK3, this block ends at entry ~12369. | ||
|- | |- | ||
| index=(value)<br>''(variable)'' | |index=(value)<br>''(variable)'' | ||
| | | | ||
|} | |} | ||
|- | |- | ||
| dynasties | |dynasties | ||
| Contains the following sub-blocks: | |Contains the following sub-blocks: | ||
* dynasty_house (ends at entry ~6401) | |||
* dynasties (ends at entry ~6239) | *dynasty_house (ends at entry ~6401) | ||
* static_dynasties (list of numbers) | *dynasties (ends at entry ~6239) | ||
* static_dynasty_houses (list of numbers) | *static_dynasties (list of numbers) | ||
*static_dynasty_houses (list of numbers) | |||
|- | |- | ||
| deleted_characters | |deleted_characters | ||
| | | | ||
|- | |- | ||
| living | |living | ||
| Contains entries of living characters. The following format is used for each character: | |Contains entries of living characters. The following format is used for each character: | ||
<pre> | <pre> | ||
index={ | index={ | ||
第309行: | 第314行: | ||
</pre> | </pre> | ||
|- | |- | ||
| dead_unprunable | |dead_unprunable | ||
| Contains character entries. | |Contains character entries. | ||
|- | |- | ||
| characters | |characters | ||
| Contains the following sub-blocks: | |Contains the following sub-blocks: | ||
* dead_prunable (contains character entries) | |||
* prune_queue | *dead_prunable (contains character entries) | ||
* dummy_female (contains a character entry) | *prune_queue | ||
* dummy_male (contains a character entry) | *dummy_female (contains a character entry) | ||
* unborn (contains unborn data entries) | *dummy_male (contains a character entry) | ||
* natural_deaths | *unborn (contains unborn data entries) | ||
* current_natural_death | *natural_deaths | ||
* sexuality_chances | *current_natural_death | ||
*sexuality_chances | |||
|- | |- | ||
| character_lookup | |character_lookup | ||
| | | | ||
|- | |- | ||
| units | |units | ||
| | | | ||
|- | |- | ||
| activities | |activities | ||
| | | | ||
|- | |- | ||
| opinions | |opinions | ||
| Contains the following sub-blocks: | |Contains the following sub-blocks: | ||
* active_opinions (contains opinion entries) | |||
*active_opinions (contains opinion entries) | |||
|- | |- | ||
| relations | |relations | ||
| Encompasses hooks, alliances, Contains the following sub-blocks: | |Encompasses hooks, alliances, Contains the following sub-blocks: | ||
* active_relations | |||
*active_relations | |||
|- | |- | ||
| schemes | |schemes | ||
| Contains the following sub-blocks: | |Contains the following sub-blocks: | ||
* active (contains scheme entries) | |||
*active (contains scheme entries) | |||
|- | |- | ||
| stories | |stories | ||
| Contains the following sub-blocks: | |Contains the following sub-blocks: | ||
* active (contains story entries) | |||
* next=(date) ''(variable)'' | *active (contains story entries) | ||
*next=(date) ''(variable)'' | |||
|- | |- | ||
| pending_character_interactions | |pending_character_interactions | ||
| Contains the following sub-blocks: | |Contains the following sub-blocks: | ||
* data | |||
* player | *data | ||
*player | |||
|- | |- | ||
| secrets | |secrets | ||
| Contains the following sub-blocks: | |Contains the following sub-blocks: | ||
* secrets (contains entries of secrets) ''(repetition)'' | |||
* known_secrets | *secrets (contains entries of secrets) ''(repetition)'' | ||
*known_secrets | |||
|- | |- | ||
| armies | |armies | ||
| Contains the following sub-blocks: | |Contains the following sub-blocks: | ||
* regiments | |||
* army_regiments | *regiments | ||
* armies | *army_regiments | ||
*armies | |||
|- | |- | ||
| religion | |religion | ||
| Contains the following sub-blocks: | |Contains the following sub-blocks: | ||
* religions | |||
* faiths | *religions | ||
* great_holy_wars | *faiths | ||
* holy_sites | *great_holy_wars | ||
*holy_sites | |||
|- | |- | ||
| wars | |wars | ||
| Contains the following sub-blocks: | |Contains the following sub-blocks: | ||
* active_wars | |||
* names | *active_wars | ||
*names | |||
|- | |- | ||
| sieges | |sieges | ||
| Contains the following sub-blocks: | |Contains the following sub-blocks: | ||
* sieges ''(repetition)'' | |||
*sieges ''(repetition)'' | |||
|- | |- | ||
| raid | |raid | ||
| Contains the following sub-blocks: | |Contains the following sub-blocks: | ||
* raid ''(repetition)'' | |||
*raid ''(repetition)'' | |||
|- | |- | ||
| succession | |succession | ||
| | | | ||
|- | |- | ||
| holdings | |holdings | ||
| | | | ||
|- | |- | ||
| ai | |ai | ||
| Contains the following sub-blocks: | |Contains the following sub-blocks: | ||
* war_coordinator_db | |||
* war_plan_db | *war_coordinator_db | ||
* ai_stategies | *war_plan_db | ||
*ai_stategies | |||
|- | |- | ||
| county_manager | |county_manager | ||
| Contains the following sub-blocks: | |Contains the following sub-blocks: | ||
* counties | |||
* monthly_increase (list of values) | *counties | ||
*monthly_increase (list of values) | |||
|- | |- | ||
| fleet_manager | |fleet_manager | ||
| Contains the following sub-blocks: | |Contains the following sub-blocks: | ||
* fleets | |||
*fleets | |||
|- | |- | ||
| council_task_manager | |council_task_manager | ||
| Contains the following sub-blocks: | |Contains the following sub-blocks: | ||
* active | |||
*active | |||
|- | |- | ||
| important_action_manager | |important_action_manager | ||
| Contains the following sub-blocks: | |Contains the following sub-blocks: | ||
* active | |||
*active | |||
|- | |- | ||
| faction_manager | |faction_manager | ||
| Contains the following sub-blocks: | |Contains the following sub-blocks: | ||
* factions | |||
*factions | |||
|- | |- | ||
| culture_manager | |culture_manager | ||
| Contains the following sub-blocks: | |Contains the following sub-blocks: | ||
* cultures | |||
* template_cultures (list of numbers) | *cultures | ||
* era_discovery | *template_cultures (list of numbers) | ||
*era_discovery | |||
|- | |- | ||
| mercenary_company_manager | |mercenary_company_manager | ||
| Contains the following sub-blocks: | |Contains the following sub-blocks: | ||
* mercenary_companies | |||
*mercenary_companies | |||
|- | |- | ||
| holy_orders | |holy_orders | ||
| Contains the following sub-blocks: | |Contains the following sub-blocks: | ||
* holy_orders | |||
* religion_name | *holy_orders | ||
* faith_name | *religion_name | ||
*faith_name | |||
|- | |- | ||
| coat_of_arms | |coat_of_arms | ||
| Contains the following sub-blocks: | |Contains the following sub-blocks: | ||
* coat_of_arms_manager_name_map | |||
* coat_of_arms_manager_database (ends at entry ~17278) | *coat_of_arms_manager_name_map | ||
* next_id=(id) ''(variable)'' | *coat_of_arms_manager_database (ends at entry ~17278) | ||
*next_id=(id) ''(variable)'' | |||
|- | |- | ||
| (triggered events) | |(triggered events) | ||
| Each triggered event has its own block, started using triggered_event={ | |Each triggered event has its own block, started using triggered_event={ | ||
|- | |- | ||
| next_player_event_id=(value) ''(variable)'' | |next_player_event_id=(value) ''(variable)'' | ||
| | | | ||
|- | |- | ||
| played_character | |played_character | ||
| Contains the following sub-blocks: | |Contains the following sub-blocks: | ||
* name="..." ''(variable)'' | |||
* character=(character id) ''(variable)'' | *name="..." ''(variable)'' | ||
* player=(value) ''(variable)'' | *character=(character id) ''(variable)'' | ||
* important_decisions | *player=(value) ''(variable)'' | ||
* legacy | *important_decisions | ||
* rally_points | *legacy | ||
*rally_points | |||
|- | |- | ||
| currently_played_characters={ (character id...) } | |currently_played_characters={ (character id...) } | ||
| List of character ids. | |List of character ids. | ||
|} | |} | ||
== Extracting files From Microsoft Store version == | ==Extracting files From Microsoft Store version== | ||
If you want to read the files using the Microsoft Store version, you can use a program called UWPDumper to extract the files. | If you want to read the files using the Microsoft Store version, you can use a program called UWPDumper to extract the files. | ||
# Download the latest x64 binary of [[Modding#Tools & utilities|UWPDumper]] | |||
# Enable Developer Mode (Windows Settings -> Update and Security -> For Developers -> Developer Mode). | #Download the latest x64 binary of [[Modding#Tools & utilities|UWPDumper]] | ||
# Run CK3. | #Enable Developer Mode (Windows Settings -> Update and Security -> For Developers -> Developer Mode). | ||
# Run UWPInjector.exe from the program you just downloaded. | #Run CK3. | ||
# Enter the number next to ck3.exe : ParadoxInteractive.ProjectTitus_zfnrdv2de78ny as the processID. | #Run UWPInjector.exe from the program you just downloaded. | ||
# Check where it is going to store the files (probably somewhere like C:\Users\%USERPROFILE%\AppData\Local\Packages\ParadoxInteractive.ProjectTitus_zfnrdv2de78ny\TempState\DUMP | #Enter the number next to ck3.exe : ParadoxInteractive.ProjectTitus_zfnrdv2de78ny as the processID. | ||
# Wait for the program to finish. | #Check where it is going to store the files (probably somewhere like C:\Users\%USERPROFILE%\AppData\Local\Packages\ParadoxInteractive.ProjectTitus_zfnrdv2de78ny\TempState\DUMP | ||
#Wait for the program to finish. | |||
The files should then be present in the directory specified earlier. If you want to edit the files, create a mod and copy the desired files there. | The files should then be present in the directory specified earlier. If you want to edit the files, create a mod and copy the desired files there. | ||
== | ==工具与实用程序== | ||
* [[Exporters]] (Maya and Photoshop) | |||
* [https://forum.paradoxplaza.com/forum/threads/information-and-faq.924764/ Clausewitz Maya Exporter]: 一个可以创建和导出3D模型并且在CK3和其他Clausewitz游戏中使用的工具。 | *[[Exporters]] (Maya and Photoshop) | ||
* [https://github.com/Wunkolo/UWPDumper UWPDumper]: 一个从微软商店游戏中提取文件的工具 | *[https://forum.paradoxplaza.com/forum/threads/information-and-faq.924764/ Clausewitz Maya Exporter]: 一个可以创建和导出3D模型并且在CK3和其他Clausewitz游戏中使用的工具。 | ||
*[https://github.com/Wunkolo/UWPDumper UWPDumper]: 一个从微软商店游戏中提取文件的工具 | |||
==外部链接== | |||
*[https://forum.paradoxplaza.com/forum/forums/crusader-kings-iii-user-mods.1080/ CK3 User Mods] P社论坛 | |||
* [https://forum.paradoxplaza.com/forum/forums/crusader-kings-iii-user-mods.1080/ CK3 User Mods] P社论坛 | *[https://discord.gg/ck3 Crusader Kings] 官方Discord模组频道。Go to the server-roles channel and choose CK3 Modding in the [https://discordapp.com/channels/616881873506795550/710484698924711976/710490306788982804 Channel Access post]. | ||
* [https://discord.gg/ck3 Crusader Kings] 官方Discord模组频道。Go to the server-roles channel and choose CK3 Modding in the [https://discordapp.com/channels/616881873506795550/710484698924711976/710490306788982804 Channel Access post]. | *[https://discord.gg/apEvxDZ CK3 Mod Coop] A community Discord server dedicated to modding for CK3. | ||
* [https://discord.gg/apEvxDZ CK3 Mod Coop] A community Discord server dedicated to modding for CK3. | |||
<br> | <br> |
2020年11月17日 (二) 20:25的版本
模组制作(Modding),或者说创建模组,是一种修改游戏资源或行为的方式,有时候仅仅是为了个人使用,有时候制作者也会发布出来供其它玩家一起使用。可以通过以下途径了解mod制作Paradox Mods和Steam Workshop。
在所有的P社游戏中,十字军之王3的可修改程度都是相当高的。mod制作者可以修改的内容也相当宽泛,比如语言翻译,更多的事件和决议,更优秀的地图,更大程度上的内容修改和作弊。
这篇引导的目的在于降低制作mod的门槛。但是学习的曲线总是曲折的,这需要你通过不断的练习和阅读他人优秀mod代码来提升自己制作mod的水平。
重要:大多数模组会改变校验码,将禁止玩家获得成就。在Crusader Kings III\game
中的checksum_manifest.txt
查看校验文件夹和文件。唯一安全的是替换纹理、字体、着色器或音乐的模组。
提示 & 指引
- 创建一个mod对游戏进行修改: 即使是很小的改动,也不要直接修改CK3游戏本体的游戏文件,而是要单独创建一个mod。因为本体更新时会直接覆盖这些修改,并且没有任何提示。
- 使用好的文本编辑器 用来编辑和搜索文件。以下软件均免费:
- Visual Studio Code. 有一个粉丝自制的CWTools扩展,具有Paradox语法高亮、验证以及触发器和效果的工具提示。要安装它,请到VS左侧面板的扩展,搜索CWTools。(注意:验证规则是不完整的,会在gui和本地化文件中显示许多错误)
- Notepad++。选择Perl作为你的语言,因为它可以提供良好的高亮显示,并允许折叠代码块和注释。要将其设置为默认语言,请进入 "设置","样式器配置器",在左侧列表中找到Perl,并在底部的 "User ext. "字段中添加 "gui txt"(不加引号)。
- Atom。不包括本地化文件所需的UTF-8-BOM编码。除此之外,它是非常可定制的。选择Perl 6作为你的语言以获得更好的效果。要将其设置为默认,请到文件,配置,找到 "core:",并在下面添加。"customFileTypes: "source.perl6"。["txt""gui"]",比如这个例子。
- Sublime Text. There is an extension for it released by the developers of Imperator which could be used with CK3: Sublime Tools. It adds colored highlighting for effects and triggers. If you want to toggle comments in Sublime, you also need to add this file to the same "User" folder.
- 总是通过 error.log 文件检查mod运行中出现的bug。...\Documents\Paradox Interactive\Crusader Kings III\logs
- The log folder also contains lists of effects, triggers and scopes. Use "script_docs" and "DumpDataTypes" console commands in the game to generate them.
- Start the game with -debug_mode -develop launch options to use the console and "reload gui", "reload gfx" commands.
- On Steam: right-click the game on Steam -> Properties -> Set Launch Options -> add -debug_mode -develop
- Windows: Create a shortcut for the .exe file -> right-click it -> Properties -> add -debug_mode -develop at the end of the Target field
- CK3文件夹在Linux系统的路径 ~/.local/share/Paradox Interactive/Crusader Kings III
- Clearly communicate whether your mod is ironman-friendly to players.
- Remove your local mod when you subscribe to the Steam version, otherwise it may not work in the game.
- Backup your work. Either manually or with a source control system like Git. Also consider using GitHub for team collaboration.
- Use a proper merge tool (like WinMerge) to merge between folders and update modified files for a new patch.
- If you're replacing text across dozens or hundreds lines of code, you may want to use regular expressions. They are available in all of the text editors above. Learning resources: RegexOne, RegExr.
本地化文件
- 本地化文件夹中的yml后缀结尾的文件必须以UTF-8 + BOM编码保存,以便游戏正确读取。
- 为了保证游戏正确读取文件,文件名需要以*l_<language>.yml形式保存。例如council_l_english.yml。
Creating a mod
主条目:Mod structure#Creating initial files
It is recommended to use the game launcher to create the mod's initial files.
==上传/更新mod==。 再次上传您的MOD更新,
- 打开启动器,
- 导航到 "mods "部分,
- 按 "Mod工具",从下拉菜单中选择你的MOD,
- 选择什么平台 上传它,
- 输入任何描述。(如果更新,请确保启动器从网站上复制最新的描述。)
- 添加一个缩略图
- 对于Steam Workshop,把thumbnail.png放在mod文件夹里。使用1:1的比例,最大1MB。工作室显示的最大缩略图约为600x600像素。
- 对于Paradox Mods,将缩略图拖到描述下方的区域。建议最小尺寸为900x500,png或jpg,最大1MB。
- 按下 "上传"。
- 在Steam上,mod将以私人模式上传,并出现在你的Steam资料->工作室项目中。打开它,并将侧栏上的可见性改为 "公开",即可实际发布。
- 在Paradox Mods上,mod将在验证过程后被发布。你可能需要编辑你的描述,因为网站通常会删除换行符和BBCode格式。
保存修改的内容
Save files are located in:
- Windows: Documents\Paradox Interactive\Crusader Kings III\save games
- Linux: ~/.local/share/Paradox Interactive/Crusader Kings III/save games
It is not possible to edit an ironman save!
First start the game in the debug mode and save.
- On Steam: right-click the game on Steam -> Properties -> Set Launch Options -> add -debug_mode
- Windows: Create a shortcut for the .exe file -> right-click it -> Properties -> add -debug_mode at the end of the Target field
PC(Windows):
- Find the save file in the save games folder.
- Right-click the save file and extract it like an archive with 7-Zip or WinRar.
- 将提取出的'gamestate'文件的扩展名重名为.ck3
- Right-click it and open with your text editor (Windows Notepad is not recommended as the save files are very big).
- Edit the file and save it.
- 游戏中会直接加载mod(不需要重复压缩)。
Autosaves can be edited directly without extracting the gamestate.
Mac:
- 打开终端
- 确认当前路径是正确的
- 输入命令 "unzip FileName.ck3"
- 将提取出的'gamestate'文件的扩展名重名为.ck3
- 保存此纯文本
- 游戏中会直接加载mod(不需要重复压缩)
平台 | 保存方式 | 路径 |
---|---|---|
Windows | 本地 | C:\Users\%USERPROFILE%\Documents\Paradox Interactive\Crusader Kings III\save games
|
Windows | Steam 云端 | C:\Program Files (x86)\Steam\userdata\####\1158310\remote\save games
|
Mac | 本地 | $HOME/Documents/Paradox Interactive/Crusader Kings III/save games
|
Linux | 本地 | $HOME/.local/share/Paradox Interactive/Crusader Kings III/save games
|
Contents of the gamestate file
The table below contains the possible first-level blocks in the gamestate file. Entries are provided in order of appearance.
Block | Description | ||||||||
---|---|---|---|---|---|---|---|---|---|
meta_data | Contains metadata about the game, such as the game version. Used by the main menu screen. | ||||||||
ironman_manager | Related to ironman saving. | ||||||||
(various variables) | These variables do not belong in a block.
| ||||||||
variables | Contains script flags. | ||||||||
game_rules | Contains the save's current game rules. | ||||||||
provinces | Contains province data, including buildings. | ||||||||
landed_titles | Contains the following sub-blocks:
| ||||||||
dynasties | Contains the following sub-blocks:
| ||||||||
deleted_characters | |||||||||
living | Contains entries of living characters. The following format is used for each character:
index={ first_name="..." birth=(date) female=yes # Optional culture=(culture index) faith=(faith index) dynasty_house=(dynasty house index) # Optional skill={ (diplomacy) (stewardship) (martial) (intrigue) (learning) (prowess) } # One value for each skill sexuality=(sexuality id) # Optional dna="(dna string)" # Optional mass=(value) # Optional traits={ (trait index...) } # List of trait indices inactive_traits = { (trait index...) } # Optional. List of trait indices # Optional (family_data) family_data={ primary_spouse=(character id) spouse=(character id) child = { (character id...) } # List of character ids } alive_data={ # Optional (variables), contains flags variables={ data={ # (...) } } gold=(value) # Optional income=(value) # Optional location=(landed title index) # Optional fertility=(value) health=(value) piety={ currency=(value) accumulated=(value) # Optional } prestige={ currency=(value) accumulated=(value) # Optional } weight_update=(value) } # End of alive_data block court_data={ # All keys within this block are optional employer=(character id) council_task=(council task index) regiment=(regiment index) knight=yes } # Optional (landed_data) landed_data={ domain={ (landed title index...) } # List of landed title indices vassal_contracts={ (values) } # List of values became_ruler_date=(date) laws={ "(law id)"... } # List of law ids strength=(value) balance=(value) succession={ (character id...) } # List of character ids domain_limit=(value) vassal_limit=(value) vassals_towards_limit=(value) government="(government id)" realm_capital=(value ai_allowed_to_marry=yes council={ (value...) } # List of values at_peace_penalty=(value) diplo_centers={ (value...) } # List of values election_titles={ (landed title index...) } # List of landed title indices } # End of landed_data block # Optional (playable_data) playable_data={ knights={ (character id...) } # List of character ids was_player=yes } } | ||||||||
dead_unprunable | Contains character entries. | ||||||||
characters | Contains the following sub-blocks:
| ||||||||
character_lookup | |||||||||
units | |||||||||
activities | |||||||||
opinions | Contains the following sub-blocks:
| ||||||||
relations | Encompasses hooks, alliances, Contains the following sub-blocks:
| ||||||||
schemes | Contains the following sub-blocks:
| ||||||||
stories | Contains the following sub-blocks:
| ||||||||
pending_character_interactions | Contains the following sub-blocks:
| ||||||||
secrets | Contains the following sub-blocks:
| ||||||||
armies | Contains the following sub-blocks:
| ||||||||
religion | Contains the following sub-blocks:
| ||||||||
wars | Contains the following sub-blocks:
| ||||||||
sieges | Contains the following sub-blocks:
| ||||||||
raid | Contains the following sub-blocks:
| ||||||||
succession | |||||||||
holdings | |||||||||
ai | Contains the following sub-blocks:
| ||||||||
county_manager | Contains the following sub-blocks:
| ||||||||
fleet_manager | Contains the following sub-blocks:
| ||||||||
council_task_manager | Contains the following sub-blocks:
| ||||||||
important_action_manager | Contains the following sub-blocks:
| ||||||||
faction_manager | Contains the following sub-blocks:
| ||||||||
culture_manager | Contains the following sub-blocks:
| ||||||||
mercenary_company_manager | Contains the following sub-blocks:
| ||||||||
holy_orders | Contains the following sub-blocks:
| ||||||||
coat_of_arms | Contains the following sub-blocks:
| ||||||||
(triggered events) | Each triggered event has its own block, started using triggered_event={ | ||||||||
next_player_event_id=(value) (variable) | |||||||||
played_character | Contains the following sub-blocks:
| ||||||||
currently_played_characters={ (character id...) } | List of character ids. |
Extracting files From Microsoft Store version
If you want to read the files using the Microsoft Store version, you can use a program called UWPDumper to extract the files.
- Download the latest x64 binary of UWPDumper
- Enable Developer Mode (Windows Settings -> Update and Security -> For Developers -> Developer Mode).
- Run CK3.
- Run UWPInjector.exe from the program you just downloaded.
- Enter the number next to ck3.exe : ParadoxInteractive.ProjectTitus_zfnrdv2de78ny as the processID.
- Check where it is going to store the files (probably somewhere like C:\Users\%USERPROFILE%\AppData\Local\Packages\ParadoxInteractive.ProjectTitus_zfnrdv2de78ny\TempState\DUMP
- Wait for the program to finish.
The files should then be present in the directory specified earlier. If you want to edit the files, create a mod and copy the desired files there.
工具与实用程序
- Exporters (Maya and Photoshop)
- Clausewitz Maya Exporter: 一个可以创建和导出3D模型并且在CK3和其他Clausewitz游戏中使用的工具。
- UWPDumper: 一个从微软商店游戏中提取文件的工具
外部链接
- CK3 User Mods P社论坛
- Crusader Kings 官方Discord模组频道。Go to the server-roles channel and choose CK3 Modding in the Channel Access post.
- CK3 Mod Coop A community Discord server dedicated to modding for CK3.
文档 | Effects • 触发器 • 修正 • 作用域 • 变量 • 数据类型 • 本地化 • 可定制的本地化 |
脚本 | AI • 剧本 • 角色 • 效果指令 • 内阁 • 文化 • 决议 • 宗族 • 事件 • 政体 • 历史 • 地产 • 生活方式 • 军队 • 宗教 • Story cycles • 头衔 • 特质 |
地图 | 地图 • 地形 |
图形 | 3D模型 • Exporters • 界面 • Coat of arms • Graphical assets • Fonts • Particles • Shaders • Unit models |
音频 | Music • Sound |
其他 | 控制台指令 • 校验码 • 模组结构 • Troubleshooting |