模組製作

本頁面所適用的版本可能已經過時,最後更新於3.2
(重新導向自Modding Guide

Modding, 或稱為「模組製作」,是修改基本遊戲(即原版)的行為, 無論是供個人使用,或者是公開發布給其他玩家,比如發布到Steam創意工坊

就所有p社遊戲而言,ck2的模組製作有很大開放性,可以很顯著的延伸遊戲的內容,增強遊戲的可玩性。 mod製作者的動機各不相同:更好的翻譯成母語,更多的事件及決議,更棒的地圖,亦或遊戲整體大修改等等。

mod製作非魔術邪說也,人皆可學習相關知識以製作mod,這個指引旨在降低ck2模組製作的門檻。不過,無論學習資料有多麼的好,製作mod的過程都會是十分曲折的,並且學習資料無法取代對閱讀基礎代碼,以及不斷調試的需要。總之,製作mod不是一天兩天的功夫,而是一項宏偉的工程,努力是必須的。

指引

  • 為您的修改創建mod:即使是小的更改也要創建個人mod,並且切勿直接修改Steam CKII文件夾中的遊戲文件,因為它們可能會在沒有警告的情況下被覆蓋。
  • 使用優質的文本編輯器 來編輯文件並搜索多個文件。請參見文本編輯器
  • 驗證你的mod 使用The Validator,它將為您節省許多麻煩和時間,以解決崩潰和錯誤。
  • 儘量減少對原版文件的覆蓋 通過添加單獨的文件或儘可能地從文件夾加載,以改善mod兼容性和維護。
  • 使用適當的合併工具 以便在文件夾之間合併,並將修改後的原版文件更新為新的Vanilla修補程式。
  • 備份您的工作 以避免丟失一切。如果是一個MOD製作組,請考慮使用諸如GitHub之類的源代碼控制系統充當備份並管理協作。
  • 使用ANSI(Windows-1252)編碼 用於文本文件。
  • 適當縮進 以輕鬆發現未閉合的花括號。原版使用1個制表符來縮進而不是空格。
  • 使用注釋 以#字符開頭,來記住編寫棘手內容的原因。

文本編輯器

以下是支持CK2編程語言的文本編輯器:

Mod結構

mod文件被放置在 ~\Paradox Interactive\Crusader Kings II\mod, 裡面必須包含:

  • .mod 文件, 告訴啟動器如何加載你的mod
  • 包含mod數據好的文件夾或者是zip壓縮包。mod數據的文件結構必須和本體的遊戲結構相同,注意文件夾和文件的名稱大小寫在Mac和Linux上是敏感的,這意味着 Abc 和 abc 會被視為兩個mod。

.mod 文件的文件名不能包含任何空格,否則在啟動器重啟的時候,不會被自動選中。

.mod 文件的內容如下所示:

關鍵字 必需? 效果 例子
name Yes 你的mod顯示在啟動器中的名稱 name = "My Mod"
path Yes 定義哪個文件夾是你的mod文件夾。 其路徑是相對於~\Documents\Paradox Interactive\Crusader Kings II\ . path = "mod/MyMod"
user_dir No 告訴啟動器存儲遊戲或臨時文件到特定的文件夾。 這對能改善mod的兼容性(例如新的標題,旗幟,宗教,文化,建築之類的),讓文件不會混淆在一起。

警告:不要給主mod的子mod設置 user_dir,因為所有激活mod的user_dir會連接在一起。

user_dir = "MyMod"
archive No 定義一個zip壓縮包來代替文件夾。設置它的路徑,路徑是相對於 ~\Documents\Paradox Interactive\Crusader Kings II\ 的。這是從Steam創意工坊下載的mod使用的格式,但是在將mod上傳到創意工坊時,必須使用path結構。 archive = "mod/mymod.zip"
replace_path No 告訴啟動器覆蓋對應文件夾的所有內容,並且只從mod中的指定路徑加載。這是刪除原版東西的唯一有效方式,而這經常被完全改動類mod所使用。

Notes:

  • replace_path作為文件夾工作,而不是文件.,覆蓋一個文件,只需要在mod中創建一個同名文件。
  • replace_path只對對應文件夾中的文件有效,其子文件夾中的文件無效. 例如,覆蓋「history」並不會覆蓋「history/characters」。
  • 為了縮小mod體積、增強mod兼容性,儘可能少用replace_path.
  • 在舊版本中,replace_path在被安裝到CK2安裝目錄/mod時通常被忽視,因此必須放入使用者文件。(見CK2模組目錄
  • 除非你確實需要使用replace_path才使用,通常不用。
replace_path = "history"

replace_path = "history/characters"

dependencies No 告訴啟動器,在此mod之前必須加載另一個mod。另一個模組將首先加載,允許另一個模組覆蓋某些文件(否則第一個模組將先加載)。一個dependencies不是必要的;如果mod有一個集,則不需要加載dependencies。這只是 .mod文件告訴啟動器應首先加載哪些文件的一種方式。

如果dependencies里的mod的名稱包含空格,則必須將其括在轉義引號中。"\"Mod with space in name\""

dependencies = { "MyMod" "\"Another Mod\"" }
picture No 模組文件夾下的圖像可用作Steam創意工坊的展示圖片。(將顯示為 268 像素× 268 像素 JPEG) picture = "MyMod.jpg"
tags No Steam創意工坊的標籤列表。警告:不要忘記包含空格的標籤的引號。 tags = { "Tag1" "Tag 2" }
supported_checksums No 腳本條件將計算為true的預期校驗和列表。這可以在事件模組製作中使用,以向玩家顯示警告。supported_checksums supported_checksums = { ABCD EFGH }

以下是一些示例模組文件,具體取決於模組的類別:

小型mod

小型mod更常見一些,為了保證和其它小型mod的兼容性,請不要使用user_dir或者是replace_path

 name = "Small Mod"
 path = "mod/SmallMod"
 picture = "SmallMod.jpg"
 tags = { "Mods" "Small" }

大型mod

大型模組通常使用 user_dir 使保存內容無論如何都無法在開啟此mod前加載。對於總轉化模組, replace_path 用於完全覆蓋在模組中沒有意義的原版文件夾(histroy,flags等)。

 name = "Big Mod"
 path = "mod/BigMod"
 user_dir = "BigMod"
 replace_path = "history/provinces" 
 picture = "BigMod.jpg"
 tags = { "Mods" "Big" }

子mod

主mod的子mod通常用 dependencies 來覆蓋主mod的文件。

 name = "Sub Mod"
 path = "mod/SubMod"
 dependencies = { "\"Main Mod\"" }
 picture = "SubMod.jpg"
 tags = { "Mods" "Main Mod" }

遊戲數據

遊戲結構

遊戲數據是由包含遊戲文件的文件夾及子文件夾的結構組成。

模組遵循與基礎遊戲相同的文件夾結構,因此在加載遊戲時,引擎將合併來自原版和mod的文件。在大多數文件夾中,引擎將加載其中的所有文件,這允許mod添加新的定義(頭銜,宗教等),而無需複製和修改原版文件。若要利用這一點,請務必了解如何在文件級別和定義級別加載腳本。

加載模組時的行為如下:

  • 引擎根據某些硬編碼的加載順序處理文件夾和文件。
  • 如果將當前文件夾定義為 replace_path ,則該文件夾中的所有原版文件都將被忽略,並且只會加載mod文件(如果有)。
  • 如果 mod 文件夾和原版文件夾都包含同名的文件,則將忽略原版文件,並使用mod版本。
  • 在給定的文件夾中,文件的處理順序通常是字母數字的,合併了 vanilla 和 mod 文件名,儘管某些文件夾可能具有不同的行為
  • 在多次遇到相同的定義(頭銜,宗教,決議等)時,重複的定義可能:
    • 被忽略(先加載的定義成為遊戲內容)
    • 完全覆蓋上一個定義(最後一個定義成為遊戲內容)
    • 部分覆蓋以前的定義(定義被合併/加法,這隻有在實際有要合併的東西時才有意義:層次結構,列表等)
    • 兩者共存/中斷(在這種情況下,必須避免重複的ID)

以下是CKII遊戲文件和文件夾的列表,以及相關的模組指南和加載行為。

對於加載行為,單元格顏色會突出顯示行為是預期的行為奇怪的行為還是需要注意的行為是意外的,還是需要避免的行為

文件夾/文件 該文件包含什麼 如何模組 加載行為
.\common\
  • achievements.txt
  • defines.lua
  • defines.txt
  • hints.txt
  • region_colors.txt
  • static_modifiers.txt
  • technology.txt
大致信息
  • 定義Steam成就
  • POP, 一般變數、外交變數、經濟變數和軍事變數
  • 定義可遊玩的開始日期和結束日期
  • 定義顯示的提示
  • 定義每個區域的 RGB 代碼
  • 所有難度、等級和標準修飾符
  • 科技數據

定義



修正

科技模組製作

不適用
.\common\alternate_start\ 另類開局模組製作 [?] 合併。
.\common\artifact_spawns\ 寶物模組製作 合併。
.\common\artifacts\ 寶物的定義 寶物模組製作 合併。
.\common\bloodlines\ 血脈文件夾,所有的血脈都存儲在這裡。 血脈模組製作
.\common\bookmarks\ 劇本文件夾,所有的劇本都存儲在這裡。 劇本模組製作 合併。劇本在遊戲中按時間順序列出,無論文件中的順序如何。
.\common\buildings\ 建築文件夾,所有的建築都存儲在這裡。 建築模組製作 [?] 合併。
.\common\cb_types\ 宣戰理由文件夾,所有的宣戰理由都存儲在這裡。 宣戰理由模組製作 合併,但通過重複使用相同的名稱來覆蓋宣戰理由不起作用。(創建重複的宣戰理由文件)
.\common\combat_tactics\ 作戰戰術文件夾,所有的作戰戰術都存儲在這裡。 單位模組製作 [?] 合併。
.\common\council_positions\ AI內閣成員採取哪種類別的行為的規則。 內閣成員模組製作 [?]
.\common\council_voting\ AI在內閣中投票法律的規則 內閣成員模組製作 [?]
.\common\cultures\ 文化文件夾,所有的文化都存儲在這裡。 文化模組製作 合併。 由於修補程式2.4文化像宗教一樣合併,並且可以通過單獨的文件將新的文化添加到原版文化組中。
.\common\death\ 死亡原因文件夾,所有的死亡原因都存儲在這裡。 死亡模組製作
.\common\death_text\ 為繼承屏幕添加死後評價 死亡模組製作
.\common\defines\ 定義文件夾,所有的定義都存儲在這裡。 定義 [?] 合併。文件中的條目將覆蓋common/defines.lua。
.\common\disease\ 疾病文件夾,所有的疾病都存儲在這裡。 疾病模組製作 [?] 合併。
.\common\dynasties\ 家族文件夾,所有的家族都存儲在這裡。 家族模組製作 合併。在原版之前加載的重複家族將覆蓋家族盾徽(i.e., 000_ 等前綴) 。之後加載的重複項 (i.e., z_ 等前綴) 將覆蓋家族名稱。要覆蓋兩者,請使用重複的文件,一個具有前面的前綴,另一個具有後續前綴。
.\common\event_modifiers\ 事件修正文件夾,所有的事件修正都存儲在這裡。 修正 合併。
.\common\execution_methods\ 處決類型文件夾,所有的處決類型都存儲在這裡。 死亡模組製作 [?]
.\common\game_rules\ 遊戲規則文件夾,所有的遊戲規則都存儲在這裡。 遊戲規則模組製作 合併。規則根據文件的順序(文件名上的字母數字)和文件中的規則順序顯示在 UI 中。
.\common\government_flavor\ 政體定義文件夾,所有的政體定義都存儲在這裡。 政體模組製作 [?]
.\common\governments\ 政體文件夾,所有的政體都存儲在這裡。 政體模組製作 合併。可以在不同的文件中定義同一政府組的政府。
.\common\graphicalculturetypes\ 文化膚色文件夾,所有的文化膚色都存儲在這裡。 [?] 合併。
.\common\heir_text\ 為繼承屏幕添加繼承人評價 死亡模組製作
.\common\holding_types\ 地產類型文件夾,所有的地產類型都存儲在這裡。 政體模組製作 [?]. 無法添加新的地產類型。
.\common\job_actions\ 內閣成員行為文件夾,所有的內閣成員行為都存儲在這裡。 內閣成員模組製作 合併。
.\common\job_titles\ 內閣職務文件夾,所有的內閣職務都存儲在這裡。 內閣成員模組製作 [?]
.\common\landed_titles\ 頭銜文件夾,所有的頭銜都存儲在這裡。 頭銜模組製作 合併。合併行為「很複雜,可能不是故意設計的」[1]
.\common\laws\ 法律模組製作 合併。與現有法律同名的法律將在允許部分附加條件,但不會將潛在部分附加條件。
.\common\mercenaries\ 傭兵文件夾,所有的傭兵都存儲在這裡。 [?] 合併。
.\common\minor_titles\ 榮譽頭銜文件夾,所有的榮譽頭銜都存儲在這裡。 榮譽頭銜模組製作 無法覆蓋,嘗試這樣做將導致多個榮譽頭銜具有相同的tag,如特質
.\common\modifier_definitions\ 定義動態定義的修飾符,特別是特殊單位的修飾符。 單位模組製作 [?] 合併。
.\common\nicknames\ 稱號文件夾,所有的稱號都存儲在這裡。 稱號模組製作 合併。
.\common\objectives\ 目標文件夾,所有的目標都存儲在這裡。 目標模組製作 [?] 合併。
.\common\offmap_powers\
  • policies\
  • statuses\
定義地圖外政權的文件夾。 地圖外政權模組製作 [?] 合併。不需要碧玉之龍DLC。
.\common\on_actions\ On_actions文件夾,所有的on_actions文件都存儲在這裡。 事件模組製作 合併。由於修補程式 2.4 on_actions被合併,新事件被添加到特定on_action的先前列表中,而不是替換列表。
.\common\opinion_modifiers\ 好感修正文件夾,所有的好感修正都存儲在這裡。 修正 [?] 合併。
.\common\province_setup\ patch 3.0後廢棄 不適用 不適用
.\common\religion_features\ 宗教特性文件夾,所有的宗教特性都存儲在這裡。 宗教模組製作 [?] 合併,但具有相同鍵的功能會重複。
.\common\religion_modifiers\ 宗教修正文件夾,所有的宗教修正都存儲在這裡。 修正 [?] 合併。
.\common\religions\ 宗教文件夾,所有的宗教都存儲在這裡。 宗教模組製作
合併。原版宗教可以被覆蓋,而不需要複製整個宗教組。限制:需要在未改革宗教之前定義改革宗教。
.\common\religious_titles\ 宗教頭銜文件夾,所有的宗教頭銜都存儲在這裡。 [?] 合併。
.\common\retinue_subunits\ 近衛軍單位文件夾,所有的近衛軍單位都存儲在這裡。 [?] 合併,但具有相同密鑰的隨從被複製。
.\common\save_conversion\ 遊戲存檔兼容性 [?]
.\common\scripted_effects\ 腳本 [?] 合併。
.\common\scripted_score_value\ 腳本分數值 [?] 合併。
.\common\scripted_triggers\ 腳本觸發器 合併,但具有相同名稱的腳本化觸發器會附加其條件,而不是替換原始條件。
.\common\societies\ 社團文件夾,所有的社團都存儲在這裡。 社團模組製作 Merge,但通過用相同名稱覆蓋一個社團不起作用(創建重複的社團)。
.\common\special_troops\ 特殊單位文件夾,所有的特殊單位都存儲在這裡。 單位模組製作 [?] 合併。
.\common\stories\ 廢棄的 不適用 不適用
.\common\succession_voting\ 繼承投票規則及AI繼承投票行為規則 繼承模組製作 [?] 合併。
.\common\trade_routes\ 貿易路線文件夾,所有的貿易路線都存儲在這裡。 貿易路線模組製作 [?]
.\common\traits\ 特質文件夾,所有的特質都存儲在這裡。 特質模組製作 合併,但具有相同名稱的特質將共存,並且生成的角色可以同時獲得兩種特質。使用命令時,最後一個定義將分配給角色。
.\common\tributary_types\ 朝貢關係文件夾,所有的朝貢關係都存儲在這裡。 朝貢類型模組製作 [?]
.\common\triggered_modifiers\ 定義在特定條件下觸發的全局修飾符。 Triggered modifiers [?] 合併。
.\connectui\ 似乎是已停止使用的Paradox Connect服務的剩餘接口(用於克勞塞維茨引擎開發的較舊的遊戲如CK2)。 廢棄的 不適用
.\decisions\ 決議文件夾,所有的決議都存儲在這裡。 決議模組製作 合併, 但通過重用相同名稱覆蓋決策不起作用(破壞決策效果,這不執行任何操作)。
.\dlc\ 包含 DLC 信息和壓縮內容文件 可下載內容 不適用
.\dlc_metadata\
.\eu4_converter\ EU4轉檔器文件夾,所有的EU4轉檔器文件都存儲在這裡。 EU4轉檔器模組製作 [?]
.\events\ 事件文件夾,所有的事件都存儲在這裡。 事件模組製作 合併,如果在原始文件之後按字母順序加載的文件中重新定義事件,則該事件將被完全覆蓋。

開發人員不鼓勵這種做法,因為該引擎行為不能保證在將來保留(來源?)

.\gfx\
  • ambitions\
  • characters\
  • coats_of_arms\
  • cursors\
  • eurfonts\
  • event_pictures\
  • flags\
  • fonts\
  • FX\
  • interface\
  • loadingscreens\
  • mapitems\
  • models\
  • polishfonts\
  • titles\
  • traits\
圖像文件夾,所有的圖像都存儲在這裡。 圖形模組製作

圖形映射到 .\interface\*.gfx 文件中

的邏輯名稱 (GFX_xxx)
警告:flags\ 中缺少頭銜的標誌將導致大多數頭銜出現錯誤的標誌,這是由於偏移

.\history\ 字符、標題、省份和戰爭的歷史數據,以及可能的開始日期。這可能是內部數據庫的文本導出,有時在修補程式說明中會提到。[2] 歷史模組製作 不適用
.\history\characters\ 歷史人物,可選擇與\common\dynasties\文件夾中的王朝相關聯。 角色模組製作 [?] 合併。重複的角色ID會破壞角色歷史記錄,必須避免。
.\history\diplomacy\ 未使用 不適用 不適用
.\history\offmap_powers\ 地圖外政權的歷史(持有者,地位等) 地圖外政權模組製作 [?] 合併。
.\history\provinces\ 省份歷史(地產,文化或宗教的變化) 省份模組製作 [?] 合併。
.\history\technology\ 各省的初始技術,取決於開始日期。 科技模組製作 [?]
.\history\titles\ 頭銜歷史(持有者名單) Note: titles that should be deactivated at game start (ex: reformed religion heads) must have an history file that disables the title. [?] 合併。
.\history\wars\ 重要的正在進行的戰爭(進攻者,防守者,宣戰理由,戰爭得分等),通常用於歷史劇本。 [?] 合併。
.\interface\
  • generalstuff.gfx
  • sound.sfx
介面圖形 介面模組製作
  • *.gfx 文件的加载按字母数字顺序排列。加载的最后一个 spriteType 定义将覆盖具有相同名称的先前定义(如果有)(即使用zz_文件前缀来覆盖普通精灵)。
  • 僅考慮 sound.sfx,忽略其他 .sfx 文件。
.\interface\coat_of_arms\ 盾徽模組製作 盾徽定義可以拆分到多個文件中。不支持從其他文件追加現有定義。
.\interface\portrait_offsets\ .txt帶有肖像框架外部偏移的文件 肖像模組製作
.\interface\portrait_properties\ 用於選擇縱向屬性值的動態規則 肖像模組製作 [?]
.\interface\portrait\ 肖像的spriteType和portraitType元素的定義。 肖像模組製作 合併。
.\launcher\ 啟動器圖像和配置 不適用
.\localisation\ 所有本地化國家/地區名稱和事件描述等內容的所有文本數據。 本地化 完全覆蓋。如果重複項位於不同的文件中,則首先加載的文件優先(即使用 00_ 文件前綴覆蓋原始鍵)。如果在同一文件中,則文件中的最後一個重複項優先。警告:文件必須以.csv擴展名結尾,否則將不加載。
.\localisation\customizable_localisation\ 習慣的本地化命令定義 本地化 [?] 合併
.\map\
  • adjacencies.csv
  • default.map
  • definition.csv
  • geographical_region.txt
  • positions.txt
  • provinces.bmp
  • rivers.bmp
  • terrain.bmp
  • topology.bmp
  • trees.bmp
  • world_normal_height.bmp
地圖文件夾,所有的地圖數據都存儲在這裡。 地圖模組製作 不適用
.\map\statics 地圖外部框架大小,以及固定3D地圖元素的位置(奇觀等)。 地圖模組製作
.\map\terrain 地圖模組製作
.\mod\ 虛擬mod文件夾,不要在這裡放mod。 模組製作 破壞模組,因為像replace_path這樣的配置被忽略。
.\music\ 音樂文件夾,所有的音樂都存儲在這裡。 音樂模組製作 [?] 加載所有.txt文件歌曲元素。
.\sound\ 聲音文件夾,所有的聲音都存儲在這裡。 [?]
.\tutorial\ 教程設置 [?]

具體指南

僅包含上面或以其他方式「如何修改」列中尚未鏈接的指南。



工具與實用程序

這些是modder用的實用工具。 玩家使用的請看實用工具.

高級技巧

  • 對於使用源代碼管理工具(Git,......)的大型mod,在CKII mod文件夾和本地存儲庫的工作目錄之間創建符號鏈接非常方便,特別是如果mod也有子mods。請注意,您仍然需要手動複製 .mod 文件,但它們很少更改。從主git文件夾的父目錄運行以下命令,替換:
    • <mod_path_name>填寫.mod文件的 path 里的mod名稱
    • <git_mod_folder>填寫mod的子文件夾(common文件夾、decisions文件夾、event文件夾等)的名稱
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測試同樣必不可少。

外部鏈接

更多

引用