差分
ナビゲーションに移動
検索に移動
マップ Mod
(編集)
2025年10月6日 (月) 07:11時点における版
36,926 バイト追加
、
月曜日 07:11
マップ mod の日本語化
{{version|1.1}}
※2025/10/6、英wikiよりkagi翻訳を通しました。機械翻訳なので一部不自然な日本語があるかもしれません。ぜひ編集してくれるとありがたいです。
Crusader Kings III では、ゲームマップを改造(Mod)できます。これには、陸地・海・河川・州の編集が含まれます。称号のMod作成については [[title modding]] を参照してください。
== はじめに ==
マップエディタを開くには:
* SteamライブラリでCK3を右クリックしてプロパティを開きます。
* 全般タブの「起動オプション」欄に -mapeditor と入力します。
* CK3を起動します。まずは既存の正常に動作するマップで行い、作成物の使用は後にしてください。新しいアセットは後からエディタ内でインポートできます。
== ハイトマップ ==
[[File:Heightmap example.png|thumb|right|アイルランドとブリテンの一部のハイトマップ例]]
ハイトマップはすべてのマップの土台であり、紙ではないマップ全体の形状を定義します。ハイトマップはグレースケール画像で表され、黒が最も低い標高、白が最も高い標高を示します。
=== ハイトマップの作成 ===
現実の場所については、NASAがBlue Marbleプロジェクトの地形(topography)セクションで詳細なハイトマップを公開しています。
架空のハイトマップは、Photoshop や GIMP などの画像編集ソフトと、World Machine や Gaea などの地形生成ソフトを組み合わせて作られることが多いです。
=== メインのハイトマップファイル ===
ハイトマップは "[mod]/map_data/heightmap.png" にあり、16bitグレースケール画像として保存する必要があります。
ハイトマップの寸法は "[mod]/map_data/heightmap.heightmap" に定義された "original_heightmap_size" の定義と一致しなければなりません。
=== その他のハイトマップファイル ===
"heightmap.png" に加えて、"indirection_heightmap.png" と "packed_heightmap.png" という重要な'''自動生成'''ハイトマップファイルがあります。これらはハイトマップを再パックして保存した際にCK3のマップエディタが作成します。
[[File:Repack.png|thumb|left]]
==== 再パック(Repacking) ====
メインの heightmap.png を変更したら、その都度マップエディタで「再パック」して、河川・境界・称号などが新しいハイトマップに合うようにする必要があります。要素がハイトマップに「従っていない」ように見える問題がある場合、最初のトラブルシューティング手順は常に再パックです。
== リバーマップ ==
[[File:Rivermap example.png|thumb|right|アイルランドとブリテンの一部のリバーマップ例]]
リバーマップは海岸線と河川を定義する特別なファイルで、地形エンジンがマップ上に河川を描画するため、また軍隊の河川渡河地点を定義するために使用されます。航行可能な大河やその他の水域には使用されません。
'''不適切に作成されたリバーマップはCTD(クラッシュ)を引き起こします。''' インデックス付きRGB画像で、非常に特定のカラーパレットでなければなりません。リバーマップ作成時のクラッシュを防ぐ最良の方法は、ゲームのオリジナルのリバーマップ("[CK3 directory]/game/map_data/rivers.png")をベースに使うことです。元のカラーパレット以外の色(アンチエイリアスや透過を含む)はCTDの原因になります。
Gimpを使用していてリバーマップが正しくエクスポートできない場合は、'''Gimpを閉じて'''、ベースゲームのリバーマップをModフォルダにコピーし、Gimpでそれを開き直してください。プロンプトが出たら''カラープロファイル''を保持('''keep''')し、「Rendering Intent」は "Absolute colorimetric" に設定されていることを確認します。これにより問題の原因となっている保存済みのエクスポート設定がリセットされます。作業が終わったら、エクスポートオプションで「rivers.png を上書き」を選択してください。
=== リバーマップの色の理解 ===
[[File:River map color table.png|128px|thumb|left]]
リバーマップはカラーパレットが固定されたインデックスカラーで保存すべきです。つまり、特定の色しか使用できない特殊なエンコードで保存されます。
各色には特定の意味があり、ゲームエンジンがそれを見栄えの良い河川に変換します。
* #00ff00(純粋な緑)は河川システムの水源を示します
* #ff0000(純粋な赤)は本流に合流する支流を示します
* #fffc00(純粋な黄)は分流を示します
* #ff0080(マゼンタ)は海・湖・航行可能な河川を示します
* #ffffff(白)は陸地を示します
その他の色は淡い青から濃い青のグラデーションで、青が濃いほど川幅が広いことを示します。
=== ピクセルの厳密性 ===
[[File:River validity.png|thumb|right]] 各河川ピクセルは直交方向に隣接する河川ピクセルが最大2つまででなければならず、分岐・合流点は直交隣接が最大3つまででなければなりません。2ピクセル幅の河川や、斜め接続のみの河川は描画に失敗します。
=== 描画手順 ===
[[File:River special pixels.png|thumb|right]]
CK3の河川描画アルゴリズムは、基本的に3つの特殊なピクセル色(赤・黄・緑)のいずれかを起点に河川セクションを描くと考えることができます。緑は河川システム全体の起点です。各セクションは、片端にこれら3種のピクセルのいずれかを持ち、反対側には持たないようにします。つまり、実際の地形でよくあるような、本流から離れて再び合流するような形はできません。河川セクションの側面にある赤・黄ピクセルはこの制限とは別扱いで、新たな河川セクションを生成します。3種のピクセルはそれぞれ、生成される河川セクションの流向も規定します。緑と黄はそこから離れる方向に、赤はそこへ向かう方向に流れます。
==== 水源 ====
各河川''システム''につき水源ピクセルは1つだけにします。つまり、支流がある場合、その支流には緑の水源ピクセルを置かないでください。
=== 水中の河川トリック ===
リバーマップ上のピンクと白は参照用の色にすぎず、どちらも「河川ではない」という同じ意味を持ちます。したがって、水域にも陸地同様に河川を描けますが、可視化はされません。川が湖や海に注ぐ場合、終端から数ピクセル分をピンク領域へ(小さな湖なら反対側へ抜ける場合は丸ごと)延長して描くことが推奨されます。これにより、川の末端での流向をCK3がより正確に把握できます。
これは、湖を通過する複雑な河川系を扱う場合にも有効で、現実世界の性質とCK3エンジンの仕様のズレを調整する追加の手段になります。
== プロヴィンスマップ ==
[[File:Province map example.png|thumb|right|アイルランドとブリテンの一部のプロヴィンスマップ例]]
プロヴィンスマップは男爵領と海域を定義します。各男爵領/海域は、プロヴィンスマップ上で固有の色で塗られて定義されます。リバーマップ同様、アンチエイリアスや透過は避けなければなりません。
プロヴィンスマップは郡・公国・王国・帝国を定義しません。郡、公国、王国、帝国を定義するには、landed_titles フォルダで定義する必要があります。
provinces.png は8bitまたは24bit RGBファイルとして保存してください。これ以外で保存するとCTDが発生します。オリジナルのプロヴィンスマップは24bit RGBで保存されています。8bitファイルは256色までしかサポートしないため、この形式を使うとプロヴィンス/男爵領を255までに制限することになります(黒(0 0 0)はアルプスのような通行不能地帯に予約されています)。8bitの上限を超える色数の画像を8bitで保存すると、ほとんどの画像ソフトは色数削減アルゴリズムを実行し、近い色同士をまとめてしまいます。これはCK-IIIに多くの問題を引き起こします。ゲームは "definition.csv" に使用されている色以外を扱えないからです。
== 称号の作成 ==
称号の作成は、プロヴィンスマップの色を男爵領・郡・公国・王国・帝国の定義に紐づけることで行います。手順は次の通りです。
# 個々の男爵領を定義するプロヴィンスマップを作成する
# プロヴィンスマップ上のRGBを "[mod]/map_data/definition.csv" で特定して男爵領を識別する
# "[mod]/common/landed_titles/" に新しいファイルを作り、称号の階層を定義する
# "[mod]/localization/[language]/" に新しいファイルを作って称号のローカライズを作る
=== 男爵領の定義 ===
プロヴィンスマップの色を使用可能な男爵領にするには、"definition.csv" に定義を記述します。
男爵領定義の形式は次の通りです:
[ID];[RED];[GREEN];[BLUE];[Barony Name];x;
# 例:
2333;128;183;194;PARIS;x;
'''IDは連番でなければなりません。そうでないとゲームがクラッシュします。'''
# これはOK:
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]/history/provinces/k_yourNameHere.txt"
男爵領の所領は次のとおりです:
none
tribal_holding
castle_holding
city_holding
church_holding
注意事項:
郡内の最初の男爵領(definition.csv の数値順で最初)は必ず所領で占有されていなければなりません。明示的な指示がない場合、ゲームは郡内の男爵領を次のように自動設定します。最初の男爵領に城を配置。信仰・文化・発展度は郡全体に引き継がれます。続いて都市、次に教会が配置されます。標準の文化や信仰は、ゲームが最初に見つけたエントリが適用されます。
この最初の男爵領は、そのメイン所領に基づいて該当郡のデフォルトの政体(government)も決定します。現時点では、バニラのCK3でプレイ可能なのはクラン・部族・聖職騎士団・封建です。したがって、非神権制の政府では信仰が許すなら "castle_holding"、"tribal_holding"、または "church_holding" にしておきましょう。ただし、履歴に基づいて後から別の政体を強制することも可能です。バニラの例ではヴェネツィアが該当します。ヴェネツィア伯爵領は城が1つのみで、標準では常に封建政府になります。これを変えるには称号履歴を使います。title フォルダ内のテキストファイル(<Mod_root>\history\titles\<filename>.txt)で行います。ここで保有者(キャラクター)や上級君主(liege)を設定します。そこで “government = <NAME>_government” を用いて政体を強制できます。ただし、複数の開始時点を指定したい場合は注意が必要です。デフォルトでは、称号とその保有者の政体は、信仰と所領種別から決まる既定値(城+キリスト教=封建…)で決定されます。履歴に明示的な割り当て(部族 -> 城への転換など)があると、称号階層に波及して奇妙な副作用を生む場合があります。例えば、総督(ドージェ)を神聖ローマ帝国の皇帝にした場合、HREの政府エントリが共和国に変換されるといった、本来ヴェネツィアだけに及ぶはずの設定が上位に伝播することがあります。
郡の首都は、称号定義で最初に記載された男爵領です。首都は移動できません。郡に2つの時点を想定する際、最初の時点ではB男爵領が未成立のためA男爵領を首都にし、歴史的発展によりBがAを凌駕して「より妥当な」首都になる、といった計画ではこの点に注意が必要です。
=== 封土称号(Landed titles) ===
封土称号とデ・ジュール階層は "[mod]/common/landed_titles/" で定義します。基本構造は以下の通りです。
名前(e_empire_tier, k_kingdom_tier など)は例です。"color" は任意のRGB値で構いません。capital は有効な郡称号である必要があります。任意の階層は下位階層を複数含められます(例: 1つの帝国に5つの王国)。
男爵領はファイル内の順序でゲームに登場します。つまり最初のものがデフォルトの首都になります。エンジンは "[mod]\history\provinces@_title.txt" で設定された首都男爵領の文化・宗教を用いて、その日時点の郡の文化・宗教を決定します。
e_empire_tier = {
color = { 0 0 0 }
capital = c_county_tier
k_kingdom_tier = {
color = { 0 0 0 }
capital = c_county_tier
d_duchy_tier = {
color = { 0 0 0 }
capital = c_county_tier
c_county_tier = {
color = { 0 0 0 }
b_barony_tier = {
color = { 0 0 0 }
province = id (defined in map_data/definition.csv)
}
}
}
}
}
== 州の地形(Terrains of provinces) ==
各プロヴィンスの地形は [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)です。
変更はゲーム内ですぐに反映されます。
== マップロケーター ==
男爵領を定義したら、その主要4種のロケーターオブジェクトの位置(ポジション)を定義できます。これは、各海タイルの編成軍(艦船配置)や、各男爵領の所領建物・編成軍・戦闘・攻城兵器オブジェクトをマップ上のどこに配置するかをエンジンに伝えます。これら4つのロケーターの位置は、それぞれ building_locators.txt、combat_locators.txt、player_stack_locators.txt、siege_locators.txt で定義し、"[mod]/gfx/map/map_object_data/" にあります。
これらのファイル内では、各男爵領が1つのインスタンスとして表され、マップオブジェクトの位置・回転・スケールを設定できます。例えば、次のコードは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 }
}
}
これらの値、とりわけ海・陸の両方のプロヴィンスにおける編成軍の位置は、部隊移動の経路探索に使用されます。位置・回転・スケールは、ゲーム内マップエディタのマップオブジェクトエディタで随時微調整できます。
Modのロケーターファイルに深刻な問題がある場合、errors.log に、"[user]\[documents]\Paradox Interactive\Crusader Kings III\generated" フォルダに4つのファイル(通常は所領建物・編成軍・戦闘・攻城兵器の各ロケーターテキスト)が作成された旨が記録されます。それらをModの "[mod]/gfx/map/map_object_data/" フォルダにコピーして旧ファイルを置き換え、マップエディタを再起動してください。
=== 自動ナッジ(Auto nudge) ===
ゲーム内マップエディタには自動ナッジツール(オブジェクト配置モードのサイコロボタン)があります。これは、陸プロヴィンスのオブジェクトロケーターファイルを自動生成し、指定したプロヴィンス内で新しいオブジェクト位置をランダムに試すことを可能にします。使用するには、プロヴィンス選択ツールでランダム化したいプロヴィンスを選び、ナッジツールボタンをクリックします。マップエディタは選択されたすべてのプロヴィンスにデフォルトオブジェクトをスポーンしようとします。
無効な位置(有効な配置空間が不足してプロヴィンス外にスポーンしたなど)がある場合、影響を受けたプロヴィンスはマップ上で赤い斜線が引かれます。問題を解決するには、赤斜線のプロヴィンスを選択して自動ナッジを再度クリックして有効な位置を再抽選するか、無効なオブジェクトを手動でプロヴィンス内にドラッグしてください。
ゲーム内マップエディタでは自動ナッジのスポーン設定も微調整できます。ランダム配置を容易にするため、オブジェクトの当たり判定(コリジョンボックス)を小さくしたり、オブジェクト同士の最小・最大距離を調整したりできます。デフォルトの攻城兵器の設定は、攻城兵器のアニメーションが所領建物オブジェクトと正しく相互作用するよう最適化されている点に留意してください。
== 接続(Connections) ==
男爵領は2つの方法で接続できます。ピクセルが隣接している場合、または "[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 はすべて "definition.csv" にあるIDです
* ID From と ID To は男爵領、ID Through は海または航行可能な河川です。
* Type は "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;" は、'''ファイルが空でも必ず残してください'''。これを削除すると無限ロードになります。
== カスタム解像度のマップを作成する ==
'''注意:'''
* Width と height は、あなたのMODで設定する新しい幅と高さです。
* surround_mask.dds のような .dds ファイルを開いたら、ミップマップがあるか確認してください。ある場合は、リサイズ後のファイルに対して新しいミップマップを生成してください。
* バージョン 1.9.2.1 現在、ハイトマップの北側が切れて真っ黒に見えるバグがあります。これは幅と高さのアスペクト比によって発生するようです。なくなるまで幅を変えて試してみてください。
* common/defines/00_defines.txt:
WORLD_EXTENTS_X # 推奨値: マップの幅 - 1
WORLD_EXTENTS_Z # 推奨値: マップの高さ - 1
WATERLEVEL # ハイトマップの高さに対応 - 低すぎると海/湖が出ません。高すぎるとマップ全体が水没します
* common/defines/graphic/00_graphics.txt
PANNING_WIDTH # 左右にパン可能な範囲。端までパンするならマップの幅と同じ
PANNING_HEIGHT # 上下にパン可能な範囲。端までパンするならマップの高さと同じ
* gfx/map/surround_map/
** surround_mask.dds # サイズ: (width x height) * 1/2 # 注: 寸法が間違っていてもゲームは起動します
** surround_fade.dds # サイズ: (width x height) * 1/8 # 注: 寸法が間違っていてもゲームは起動します
* gfx/map/terrain/ # 名前に _mask(1.3時点で63)または .tga(1.3時点で2)が含まれるファイルはすべて (width x height) にリサイズが必要
** flatmap.dds # サイズ: (width x height) # 注: 寸法が間違っていてもゲームは起動します
** colormap.dds # サイズ: (width x height) * 1/4 # 注: 寸法が間違っていてもゲームは起動します
** detail_intensity.tga # サイズ: (width x height) # 注: 寸法が間違っていてもゲームは起動します
** detail_index.tga # サイズ: (width x height) # 変更可能ですが、plains_01_mask.png と同じサイズである必要があります
** ..._mask.png # サイズ: (width x height) # これらは16または8ビットのグレースケールで保存してください。RGBやRGBAでも読み込み時にグレースケールへ変換されます。寸法が間違っていてもゲームは起動します。plains_01_mask.png の高さは4096以下で、detail_index.tga とサイズ一致が必須です
* gfx/map/water/
** flowmap.dds # サイズ: (width x height) * 1/4 # 注: 寸法が間違っていてもゲームは起動します
** foam_map.dds # サイズ: (width x height) * 1/8 # 注: 寸法が間違っていてもゲームは起動します
** watercolor_rgb_waterspec_a.dds # サイズ: (width x height) * 1/2 # 注: 寸法が間違っていてもゲームは起動します
* map_data/
** heightmap.png # サイズ: (width x height) 必ずRGB形式で、RGBAにしないでください。白い霧が出る場合は、heightmap をRGBAで書き出した可能性があります。修正にはアルファレイヤーの削除が必要です
** provinces.png # サイズ: (width x height) # 注: 寸法が間違っていてもゲームは起動します。rivers.png とサイズ一致しないとクラッシュします
** rivers.png # サイズ: (width x height) # 注: 寸法が間違っていてもゲームは起動しますが、provinces.png とサイズ一致しないとクラッシュします。実際のマップサイズと一致しない場合、表示に問題が出ます
** indirection_heightmap.png # サイズ: (width x height) * 1/32
** heightmap.heightmap
original_heightmap_size # { width height } で指定。ここは heightmap.png のサイズにする必要があります
* content_source/map_objects/masks # 名前に _mask(1.0時点で21)が含まれるファイルはすべて (width x height) * 1/2 にリサイズ。必ず8ビット深度にしてください。32ビットなどだと、木がズレたり広い領域が木で塗られるなどのエラーが起きます。
=== ハイトマップのインポート方法 ===
カスタムハイトマップのロードや再パックがうまくいかない場合(特に大きなハイトマップで問題になりがち)、以下の手順を試してください。1.1.3 時点で有効です:
# バニラの indirection_heightmap.png と packed_heightmap.png をMODの map_data ディレクトリへコピー
# バニラ側の indirection_heightmap.png と packed_heightmap.png を削除
# マップエディタを起動してマップを再パック。再パックされたファイルはバニラの map_data ディレクトリに出力されます
# その新しい indirection_heightmap.png と packed_heightmap.png をMODの map_data ディレクトリへコピー
# Steam ユーザーは、ゲームキャッシュの整合性を確認して、バニラの indirection_heightmap.png と packed_heightmap.png を再ダウンロード
=== 地形マスクの再パック ===
1.3.1 時点で、ハイトマップと同じ手順が地形マスクにも使えます。地形が黒く表示される場合は、メインの CK3 フォルダ内 gfx\map\terrain からバニラの "_mask.png" をすべて削除してから再パックしてください。
=== 1.9以降、北側のハイトマップが描画されず真っ黒になる ===
1.9 のアップデート以降、カスタムマップの一部解像度でマップ北半分が描画されない問題があります。(1.13での検証)MOD内の画像の幅と高さは上記ガイドラインに'''従う必要はない'''ようです。map_data\heightmap.png の解像度を幅が高さより大きくなるように変更してください。そのうえで map_data\heightmap.heightmap のデータを heightmap.png の画像サイズに合わせて変更します。他の画像やスクリプト値(defines 等)はそのままで構いません。ゲームはオリジナル(バニラではなくMOD)のサイズ通りに問題なく表示されます。
== カスタム地形テクスチャの作成 ==
既存の CK3 テクスチャは game\gfx\map\terrain にあります。いくつかコピーしてMOD側で調整・実験することをおすすめします。
新しい地形テクスチャは [mod]\gfx\map\terrain に追加できます。
新しいテクスチャを追加するには、3つの .DDS テクスチャ(ディフューズ、ノーマル、プロパティ)と、上記フォルダに追加するマスクが必要です。
material.settings は新しい地形レイヤーをスクリプトで追加し、ここで新しいテクスチャをリンクします(このファイル自体もMODへコピー)。
settings.terrain は、ブレンドやタイルなど、すべてのマテリアルのふるまいをグローバルに制御します。
mask.bmp は heightmap.bmp と同じサイズである必要があります。
Paradox は Metalness-Roughness のPBRワークフローを使用しています。テクスチャファイルではチャンネル(Red, Green, Blue, Alpha)の割り当てが一部入れ替わっています。したがって、.DDS ファイルではレイヤー全体ではなくチャンネル単位で編集することが重要です。例としてディフューズの場合、アルファチャンネルを非選択にしていないと、ゲーム内でテクスチャが白くバグった見た目になることがあります。繰り返しになりますが、チャンネルで作業してください。
Diffuse:
Diffuse RGB - RGB
Diffuse A - マテリアルのハイトマップ(ブレンディングに使用)
Normal:
Normal R -> Normal R
Normal G -> Normal R
Normal B -> Emissive(黒で塗りつぶし。自己発光させたい場合を除く)
Normal A -> Normal G
Properties:
Properties R -> 未使用
Properties G -> スペキュラー強度 - 金属面で控えめに使用
Properties B -> メタルネス
Properties A -> ラフネス
'''注意! - 新しいテクスチャを追加したら、最適化されたディテールマップを更新するためにマップを再エクスポートする必要があります。そうしないとテクスチャがずれて、草のはずが雪になるなどの問題が起きます。'''
== よくある質問 ==
=== 右端までスクロールできないのはなぜ? ===
common/defines/graphic/00_graphics.txt を開いて、
PANNING_WIDTH = 8192
もしくはマップのピクセル幅に相当する値を設定してください。
=== 建物やロケーターの配置にオートナッジ(サイコロ)ボタンが使えないのはなぜ? ===
バグのため、オートナッジを使うには事前にそれらを定義しておく必要があります。幸いにも、ゲームが自動生成してくれます。
以下のファイルをコピー:
C:\Users\[user]\Documents\Paradox Interactive\Crusader Kings III\generated
貼り付け先:
\gfx\map\map_object_data
=== 画面に線が入るのはなぜ? ===
common/defines のマップ寸法が「幅 - 1」「高さ - 1」になっていること、地形マスクのサイズがすべて正しいことを確認してください。
= カスタムマップモードの作成 =
[[File:modding_custom_map_mode_special_buildings_example.jpg|thumb|特殊建築の建設可能箇所を表示するカスタムマップモード。|x240px]]Crusader Kings 3 では、ボタンひとつでマップをさまざまな表示にフィルタリングできます。これは改造可能な機能としては意図されていませんが、簡易的なカスタムマップモードを作る方法は存在します。
カスタムマップモードを作る前に、本当にやる価値があるか検討してください。現状、カスタムマップモードはスクリプトが手間で、保守も難しく、将来のバージョンと互換性問題を引き起こす可能性が高いです。
カスタムマップモード作成の第一歩は、色を保持するカスタムの称号を作ることです。既存の称号から取ることもできますが、自作したほうが管理が楽です。
<code>mod\custom_map_modes_mod\common\landed_titles</code> に <code>custom_map_colors_titles.txt</code> を作成し、次を記述します:
<syntaxhighlight lang="CoffeeScript">
# ここではバロニーが色を取得する称号を定義します。RGB 255 を使用。
d_map_base_color = {
color = { 84 78 60 }
can_create = { always = no }
}
d_map_color_red = {
color = { 255 0 0 }
can_create = { always = no }
}
d_map_color_green = {
color = { 0 255 0 }
can_create = { always = no }
}
d_map_color_blue = {
color = { 0 0 255 }
can_create = { always = no }
}
d_map_color_cyan = {
color = { 0 255 255 }
can_create = { always = no }
}
d_map_color_yellow = {
color = { 255 255 0 }
can_create = { always = no }
}
d_map_color_orange = {
color = { 255 128 0 }
can_create = { always = no }
}
d_map_color_pink = {
color = { 255 0 255 }
can_create = { always = no }
}
</syntaxhighlight>
次に、カスタムマップモードの描画ロジックを保持するファイルを作成します。<code>..mod\custom_map_modes_mod\gfx\map\map_modes</code> に <code>custom_map_modes.txt</code> を作成します。<br>
続いてスクリプトを記述します:
<syntaxhighlight lang="CoffeeScript">
custom_mapmode = {
color_mode = baronies
small_map_names = baronies
large_map_names = baronies
selection = holding
fill_in_impassable = no
barony_description = { # 任意
desc = {
triggered_desc = { # 複数設定可能
trigger = {
has_special_building = yes
}
desc = east_europe.0111.t.setup # プレースホルダー
}
}
}
gradient_parameters = {
zoom_step = 2
gradient_alpha_inside = 1
gradient_alpha_outside = 1
gradient_width = 0.4
gradient_color_mult = 1
edge_width = 0
edge_sharpness = 0
edge_alpha = 0
edge_color_mult = 0
before_lighting_blend = 1
after_lighting_blend = 0.5
}
}
</syntaxhighlight>
次に、カスタムマップモードのロジックを保持するファイルを作成します。ここからが難所です。
この例では、特殊建築スロットが存在する場所をハイライトする非常に単純なロジックを使います。<br>
<code>mod\custom_map_modes_mod\common\scripted_guis</code> に <code>custom_mapmodes_gui.txt</code> を作成し、次のように記述します:
<syntaxhighlight lang="coffeescript">
highlight_special_buildings_map = {
effect = {
if = {
limit = { NOT = { global_var:custom_map_mode = flag:highlight_special_buildings_map } }
set_global_variable = {
name = custom_map_mode_changing
value = 1
}
set_global_variable = {
name = custom_map_mode
value = flag:highlight_special_buildings_map
}
every_barony = {
if = {
limit = {
title_province = { has_special_building_slot = yes }
}
set_color_from_title = title:d_map_color_green # スロットありは緑
}
else = {
set_color_from_title = title:d_map_color_red # それ以外は赤
}
}
remove_global_variable = custom_map_mode_changing
}
}
is_shown = {
exists = global_var:custom_map_mode
global_var:custom_map_mode = flag:highlight_special_buildings_map
}
is_valid = {
NOT = { exists = global_var:custom_map_mode_changing }
}
}
</syntaxhighlight>
ここでは <code>custom_map_mode</code> と <code>custom_map_mode_changing</code> という2つの変数を使っています。これらは、どのカスタムマップロジックが現在 <code>custom_mapmode</code> スクリプトを上書きしているかを追跡するためのものです。追加のマップモードを作る際は、<code>custom_map_mode</code> のフラグ名をそのマップモード名に変更してください。
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| 追加例: <code>religion_organization_map</code>
|-
| <syntaxhighlight lang="coffeescript">
religion_organization_map = {
effect = {
if = {
limit = { NOT = { global_var:custom_map_mode = flag:religion_organization_map } }
set_global_variable = {
name = custom_map_mode_changing
value = 1
}
set_global_variable = {
name = custom_map_mode
value = flag:religion_organization_map
}
every_barony = {
if = {
limit = {
title_capital_county = {
faith = {
has_doctrine = unreformed_faith_doctrine
}
}
}
set_color_from_title = title:d_map_color_red
}
else = {
set_color_from_title = title:d_map_color_blue
}
}
remove_global_variable = custom_map_mode_changing
}
}
is_shown = {
exists = global_var:custom_map_mode
global_var:custom_map_mode = flag:religion_organization_map
}
is_valid = {
NOT = { exists = global_var:custom_map_mode_changing }
}
}
</syntaxhighlight>
|}
ロジックが完成したら、UI に追加します。<br>
<code>..game\gui\shared</code> から <code>mapmodes.gui</code> を MOD の <code>..mod\custom_map_modes_mod\gui\shared</code> にコピーします。
その後、ファイルを開いて最初の次のスクリプトブロックを見つけます:
<syntaxhighlight lang="CoffeeScript">
text_single = {
parentanchor = hcenter
text = "ADDITIONAL_MAPMODES"
default_format = "#medium;italic"
margin_bottom = 5
max_width = 110
}
</syntaxhighlight>
見つかったら、その下に追加ボタンを作るためのスクリプトを追加します。
<syntaxhighlight lang="CoffeeScript">
button_tertiary = {
name = "special_slot_map"
visible = "[CanChangeMapMode]"
parentanchor = hcenter
size = { 110 25 }
onclick = "[SetMapMode('custom_mapmode')]"
onclick = "[GetScriptedGui('highlight_special_buildings_map').Execute(GuiScope.End)]"
down = "[And( GetScriptedGui('highlight_special_buildings_map').IsShown(GuiScope.End), IsMapMode('custom_mapmode') )]"
enabled = "[GetScriptedGui('highlight_special_buildings_map').IsValid(GuiScope.End)]"
text = "COURT_POSITION_CATEGORY_SPECIAL_NAME"
tooltip = "single_combat.0031.desc.sc_defender.butchery"
using = tooltip_ws
}
</syntaxhighlight>
この例では、<code>custom_mapmode</code> がバロニー単位での描画に使うもの、<code>highlight_special_buildings_map</code> がそこで実行する具体的なロジックです。ロジックを変えるたびに新しい <code>custom_mapmode</code> スクリプトを作る必要はありません。
以上で、「その他のマップモード」タブにカスタムマップモードが追加されているはずです。おめでとうございます。
{{Modding navbox}}
[[Category:Modding]]
ゆいかせ
98
回編集
案内メニュー
個人用ツール
ログインしていません
トーク
投稿記録
アカウント作成
ログイン
名前空間
ページ
議論
変種
表示
閲覧
編集
ソースを編集
履歴表示
その他
検索
案内
メインページ
最近の更新
おまかせ表示
MediaWikiについてのヘルプ
ツール
特別ページ
印刷用バージョン