Crusader Kings III

Crusader Kings III

评价数不足
[WIP] Shogunate MOD 用地図サブ MOD 作成覚書
由 almandite 制作
   
奖励
收藏
已收藏
取消收藏
はじめに
このガイドについて

Crusader Kings III の MOD である Shogunate MOD 用、地図リメイク&プロヴィンス増加サブ MOD 作る方法についての備忘録です。

https://store.steampowered.com/app/1158310/Crusader_Kings_III/

まだサブ MOD 作成途中のためガイドの内容は変更されます。筆者はコンピュータグラフィック、地理情報システムどちらも素人です。そのためガイド内容について保証しません。

Shogunate MOD とは

こちらの STEAM Workshop ページをご覧ください。
https://steamcommunity.com/sharedfiles/filedetails/?id=2253278582
https://steamcommunity.com/sharedfiles/filedetails/?id=2253279956

マップデータや人物、歴史データは Crusader Kings II の MOD Nova Monumenta Iaponiae Historica のものが使われているようです。
https://store.steampowered.com/app/203770/Crusader_Kings_II/
https://steamcommunity.com/sharedfiles/filedetails/?id=333442855&searchtext=NMIH

動機

Crusader Kings III(以下ck3)公式 WIKI に「Map modding」という項目があります。
Map modding - CK3 Wiki[ck3.paradoxwikis.com]

これによると Heightmap というものがあれば、ck3にマップエディターが組み込まれているため新しいマップが作れるらしいことが分かりました。
そしてvanillaでは1プロヴィンス1男爵領に紐付けられているところ、ShogunateはCrusader Kings II のMODであるNova Monumenta Iaponiae Historica のデータを利用しているため1プロヴィンスが1伯爵領対応しているようです。vanillaのように1伯爵領に複数のプロヴィンスを配置してみたいと思いました。
準備
Work in Progress

工事中


インストールしておくソフト
  • Crusader Kings III バージョン 1.2.2 / ランチャー バージョン v. 2020.15
  • QGIS 3.16.0(ArcGISがあればそちらで良い)
  • GIMP 2.10.22(Adobe Photoshop があればそちらで)
  • LibreOffice Calc[ja.libreoffice.org] または Microsoft Excel または Google スプレッドシート

ダウンロードしておくデータ

参照情報
heightmap.png を用意する
仕様

heightmap.png は 8 ビット[256階調]グレースケールカラーまたは 16 ビット[65,536階調]グレースケールカラー、サイズが 1,024 ピクセルの倍数にする必要があります。公式フォーラムでの情報によると高さは最大で 8192 ピクセル、幅は結構大きくできるようです。
バニラのマップサイズ 8192x4096 を変更する方法が分からないので、まずは 8192x4096 の heightmap.png 生成を目標にします。


Greater Earth Map Initial Preview という地図 MOD が公開されました。
https://steamcommunity.com/sharedfiles/filedetails/?id=2299077068
なんと地図サイズが 16384 x 6144 だそうです。この MOD を調べればマップサイズ変更に関する調整点が見つかるかも。
公式 Wiki での方法でサイズ変更に成功したのでいずれ挑戦します。


標高データの取得

公式 WIKI では NASA が公開している全地球規模の標高データを紹介しています。たぶんこのページのことだと思います。Topography[www.gsi.go.jp]
ですが Shogunate の対象が東アジアであること、国土地理院が NASA より詳細なデータ?を公開しているのでこちらを使います。

地球地図全球版 | 国土地理院[www.gsi.go.jp]

このページにある次のリンクから 300MB 近くある TIFF 画像ファイルをダウンロードします。
引用自 地球地図全球版 | 国土地理院
標高第2版データ1-4 -90N°~0°, 90E°~180E° (Geotiff 282MB)

ダウンロードした TIFF ファイルを画像ビューアーで開いたところです。一見ただの白黒地図に見えますが、地理情報とひとつひとつのピクセルにその地点の標高何メートルかの情報がおさまってます。

ImageMagick のコマンドでファイル情報を見たところ。
>magick.exe" identify ./gm_el_v2_1_4.tif >TIFF 21600x21600 21600x21600+0+0 16-bit Grayscale Gray 282.035MiB 0.016u 0:00.004
QGIS をインストールしたときに一緒に入る OSGeo4W Shell の gdalinfo コマンドでファイル情報を表示させたもの
>gdalinfo ./gm_el_v2_1_4.tif Driver: GTiff/GeoTIFF Files: ./gm_el_v2_1_4.tif ./gm_el_v2_1_4.tif.aux.xml Size is 21600, 21600 Coordinate System is: GEOGCRS["WGS 84", DATUM["World Geodetic System 1984", ELLIPSOID["WGS 84",6378137,298.257223563, LENGTHUNIT["metre",1]]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[ellipsoidal,2], AXIS["geodetic latitude (Lat)",north, ORDER[1], ANGLEUNIT["degree",0.0174532925199433]], AXIS["geodetic longitude (Lon)",east, ORDER[2], ANGLEUNIT["degree",0.0174532925199433]], ID["EPSG",4326]] Data axis to CRS axis mapping: 2,1 Origin = (89.999999999892054,90.000000000000000) Pixel Size = (0.004166666666665,-0.004166666666665) Metadata: AREA_OR_POINT=Area Image Structure Metadata: COMPRESSION=LZW INTERLEAVE=BAND Corner Coordinates: Upper Left ( 90.0000000, 90.0000000) ( 90d 0' 0.00"E, 90d 0' 0.00"N) Lower Left ( 90.0000000, 0.0000000) ( 90d 0' 0.00"E, 0d 0' 0.00"N) Upper Right ( 180.0000000, 90.0000000) (180d 0' 0.00"E, 90d 0' 0.00"N) Lower Right ( 180.0000000, 0.0000000) (180d 0' 0.00"E, 0d 0' 0.00"N) Center ( 135.0000000, 45.0000000) (135d 0' 0.00"E, 45d 0' 0.00"N) Band 1 Block=21600x1 Type=Int16, ColorInterp=Gray Min=-9999.000 Max=7392.000 Minimum=-9999.000, Maximum=7392.000, Mean=-6031.512, StdDev=5226.258 Metadata: STATISTICS_MAXIMUM=7392 STATISTICS_MEAN=-6031.5118691377 STATISTICS_MINIMUM=-9999 STATISTICS_STDDEV=5226.2583698401 STATISTICS_VALID_PERCENT=100
16 ビットグレースケールカラーの画像ファイルであることが分かります。

ダウンロードした TIFF を PNG に変換して目的のサイズにトリミングし、グレースケールカラーで保存すれば heightmap.png として利用できそうです。ただほかのマップと位置を合わせるためいったん QGIS で読み込み編集します。

QGISでの操作
QGIS を起動して、[新規プロジェクト]をクリック。
メインメニューの[レイヤ]➡[レイヤを追加]➡[ベクタレイヤを追加…]をクリック。
地球地図全球版 TIFF ファイルを選択して追加。

地図投影法の変更

地図投影法とはメルカトル図法[ja.wikipedia.org]とかモルワイデ図法[ja.wikipedia.org]とかいわれるものです。
詳しい解説はこちらのサイト[www.esrij.com]を参照。
初期設定では横長な地図になっているので見慣れた形に変更します。
目標は
引用自 国土地理院
国土地理院が刊行している地図の中で最も小縮尺となる「500万分1 日本とその周辺」[www.gsi.go.jp]
地図で使われている「正距方位図法」にします。

こちらのサイト[note.com]にある手順に沿って QGIS にカスタム投影法として正距離方位図法を登録し、登録した投影法をプロジェクトに適用します。

メインメニューの[設定]➡[カスタム投影法...]➡[+](新しいCRSの追加)ボタンクリック。[名前]テキストボックスに「正距方位図法(京都中心)」と入力。
ツールチップが[(既存のCRSからパラメータをコピー)]ボタンをクリック、[フィルタ]入力ボックスに「North_Pole_Azimuthal_Equidistant」と入力、[あらかじめ定義されたCRS]に参照系ID「ESRI:102016」が出てくるので、クリックし[OK]ボタンをクリック。
[形式]を「Proj文字列(非推奨)」に変更。
変更前
+proj=aeqd +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs
変更後
+proj=aeqd +lat_0=35.75 +lon_0=135.02 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs
[OK]ボタンクリック。

メインメニューの[プロジェクト]➡[プロパティ]。[座標参照系(CRS)]クリック➡[プロパティ]、[あらかじめ定義されたCRS]を一番下にスクロールすると先ほど登録した座標系が出てくるので、選択。

明るさの調整
HoI4とCK3では海水面の明るさ定義が異なります。なのでHoI4の説明は当てはまりません。
さらに海水面の定義が、
common/define
にテキストファイルとして記述されているため、
HoI4 Wiki のMap modding項目[hoi4.paradoxwikis.com]を見ると、
引用自 HoI4 Wiki
( 0, 0, 0 ) is the lowest point, with (255, 255, 255) being the highest. The sea level is set at (95, 95, 95), so any values below that will be submerged.
とあり、色 HEX コード #000000 black が一番高さが低いところをあらわし、明るくになるにつれ標高が高くなり #FFFFFF white が一番高いところ、#5F5F5F が平均海水面の高さだそうです。

しかし地球地図全球版 TIFF ファイルは、#000000 black が海水面の高さになっています。このままマップエディターに読み込むと海水面が大分上に来てしまいます。これを修正するためレイヤプロパティのシンボロジを変更します。
変更後の設定、この設定は海水面だけ考えたものなので調整の余地があります。

高さ情報がないピクセルを透過させる
ピクセルに「-9999」という数字が入っているところは標高データが存在しない場所なので透明にします。
初期設定では QGIS ウインドウの左下にある「レイヤ」欄の「gm_el_v2_1_4」レイヤーを右クリック➡[プロパティ]、[透過性]➡[追加のnodata値]テキストボックスに
-9999
を入力、[OK]ボタンをクリック。

heightmap.pngエクスポート
QGIS から画像ファイルをエクスポートする方法はいくつかありますが、今回はレイアウトを経由してエクスポートします。
メインメニューの[プロジェクト]➡[レイアウトマネージャ]➡[作成...]➡[OK]、レイアウトウインドウが表示されます。
白い短径の領域がレイアウトでこれが画像ファイルとしてエクスポートされます。

エクスポートする地図を表示させます。
メインメニューの[追加]➡[地図を追加]➡マウスポインタが十字変化するのでウインドウ真ん中の白い領域で適当な短径を描くようにドラッグアンドドロップします。そうすると地図が表示されます。


地図のサイズを変更します。先ほど追加した地図をクリックして選択状態にします。地図の四隅と四辺の真ん中に白い四角があらわれます。
レイアウトウインドウの右サイドにある[アイテムプロパティ]タブをクリックします。
[▶位置とサイズ]➡[mm]セレクトボックス➡[px]に変更➡[幅]を 8192 と入力、[高さ]を 4096 と入力。入力すると地図サイズが変化します。


レイアウトのサイズを地図のサイズに合わせます。レイアウトウインドウの右サイドにある[レイアウト]タブをクリックします。[▶レイアウトの大きさを内容に合わせる]➡[レイアウトのサイズ]ボタンをクリック。

次に地図に表示させる領域を調整します。レイアウト中の地図をクリックして選択します。レイアウトウインドウの右サイドにある[アイテムプロパティ]タブをクリック。タブの下に横並び小さいアイコンのうち[地図範囲をインタラクティブ編集]をクリック。レイアウト中地図の上にマウスポインターを持ってくると形が十字に変わります。ドラッグして位置を調整します。[アイテムプロパティ]中の[メインプロパティ][地図の回転]も50°あたりに変更します。

透過性の設定をしていれば背景色を黒にします。地図を選択してクリック➡[アイテムプロパティ]タブをクリック。[▶背景]のチェックを入れ➡色をクリック➡黒(#000000)を指定。

レイアウトが決まったらウインドウ右上の鍵アイコンをチェックして変更しないようにロックします。

メインメニューの[レイアウト]➡[画像としてエクスポート]➡ファイルの種類を PNG にして、名前を決め[保存]ボタンをクリックして画像を保存します。

QGIS を他の地図の出力で再利用するので、レイアウトウインドウを閉じ QGIS のプロジェクトを保存します。メインメニューの[プロジェクト]➡[名前を付けて保存]。

GIMP での操作

QGIS から出力した画像ファイルをグレースケールカラーに変換します。
画像ファイルを GIMP で開きます。メインメニューの[画像]➡[モード]➡[グレースケール]。
メインメニューの[ファイル]➡[名前を付けてエクスポート]、ファイルを新しく入力するか開いたファイルを選択して上書き➡[エクスポート]ボタンをクリック、[置き換える]ボタンをクリック、[8bpc GRAY]を選択して、[エクスポート]ボタンをクリック。

マップエディターで地図生成
CK3 での操作

MOD の用意
CK3 ランチャーを起動します。[MOD]とあるところをクリックします。[MODツール]ボタンをクリック、[MODを作成する]ボタンをクリック、[名称][バージョン][ディレクトリ]に適当に入力タグを適当に選択し[MODを作成する]ボタンをクリック。
通常であれば
C:\Users\ユーザー名\Documents\Paradox Interactive\Crusader Kings III\mod
ここに MOD 用のフォルダが作られる。バニラとのファイル干渉を少なくするため、次の MOD を利用します。

[RESOURCE] Nearly Blank map - a starting point for TC's (V1.2)[forum.paradoxplaza.com]

Google ドライブからダウンロードして、MOD 用フォルダの中に展開します。そして
\map_data
フォルダの中に PNG ファイルを heightmap.png にリネームしてから配置します。

マップエディター起動前にあとひとつ。
C:\Users\ユーザー名\Documents\Paradox Interactive\Crusader Kings III
フォルダの中に、「shadercache」「terraincache」というフォルダがあれば削除しておきます。

マップエディター起動
Steam を起動して[ライブラリ]を開きます。

ゲーム一覧のなかの[Crusader Kings III」を右クリック→[プロパティ...]をクリック。

[一般]タブの中の[起動オプションを設定...]ボタンをクリック。
-mapeditor
を入力します。

[OK]ボタンクリック、[閉じる]ボタンをクリック。
[プレイ]ボタンクリックでランチャーを起動、[MOD]をクリック、

テスト用MODを有効にします。[プレイ]ボタンをクリックしマップエディターを起動します。


packed_heightmap.png と packed_heightmap.png を生成
QGIS で出力した領域が表示されていれば、ウインドウ左サイドにくっついている「Tools」バーの中にあるツールチップが[Heightmap Resolution]と出るアイコンをクリックします。

マップが格子状に変わります。ウインドウ上部にある「Heightmap Resolution Tool」バーにある「heightmap bit depth:」が「8」になっていることとを確認し、[Repack]ボタンをクリックします。

メニューが下に展開してくるので[Repack]ボタンをクリックします。heightmap.png 配置後はじめてマップエディターを起動しているなら、何も反応はないはずです。


ウインドウ上部にある「Menu」ツールバー中の[Save as]アイコンをクリック➡[Select/Deselect All]チェックボックスを2回クリックして、すべてのチェックボックスを無選択状態にします。

[Heightmap]チェックボックスの左にある[>]をクリックして展開し、
  • map_data/packed_heightmap.png
  • map_data/indirection_heightmap.png
  • heightmap.heightmap
上3つのチェックを入れます。そして各チェックボックスの右に表示されているファイルパスが MOD のフォルダーパスになっていることを確認します。CK3 本体のフォルダーパスにしないように注意します。

[OK]ボタンをクリックします。これでマップエディターでの地図生成は終わりです。

キーボードの[Alt]+[F4]キーを押してマップエディターを終了させます。
rivers.png を用意する
rivers.png の仕様

公式 Wiki Map modding ページ[ck3.paradoxwikis.com]の2番煎じです。

rivers.png は船で移動するまでもない小さな河川を表現するための画像ファイルです。
インデックスカラーでは最大256色が使えますが、rivers.png では使える色が決まっておりかつどの色が何番の色番号かも決まっています。


バニラの rivers.png を magick.exe identify -verbose コマンドで表示した抜粋。
Colormap: 0: (0,255,0,1) #00FF00FF lime 1: (255,0,0,1) #FF0000FF red 2: (255,252,0,1) #FFFC00FF srgba(255,252,0,1) 3: (0,225,255,1) #00E1FFFF srgba(0,225,255,1) 4: (0,200,255,1) #00C8FFFF srgba(0,200,255,1) 5: (0,150,255,1) #0096FFFF srgba(0,150,255,1) 6: (0,100,255,1) #0064FFFF srgba(0,100,255,1) 7: (0,0,255,1) #0000FFFF blue 8: (0,0,225,1) #0000E1FF srgba(0,0,225,1) 9: (0,0,200,1) #0000C8FF srgba(0,0,200,1) 10: (0,0,150,1) #000096FF srgba(0,0,150,1) 11: (0,0,100,1) #000064FF srgba(0,0,100,1) 12: (0,85,0,1) #005500FF srgba(0,85,0,1) 13: (0,125,0,1) #007D00FF srgba(0,125,0,1) 14: (0,158,0,1) #009E00FF srgba(0,158,0,1) 15: (24,206,0,1) #18CE00FF srgba(24,206,0,1) 16: (2,0,1,1) #020001FF srgba(2,0,1,1) ~ 253: (2,0,1,1) #020001FF srgba(2,0,1,1) 254: (255,0,128,1) #FF0080FF srgba(255,0,128,1) 255: (255,255,255,1) #FFFFFFFF white

各色の意味
およその色名
カラーコード
カラーインデックス
意味
あざやかな赤紫系の色
FF0080
254
海、湖
FFFFFF
255
陸地
ライム
00FF00
0
川の起点
FF0000
1
川と川の合流点
あざやかな黄系の色
FFFC00
2
川の分岐点
あざやかな青系の色
00E1FF
4
一番幅の狭い川

地理情報を取得する

国土交通省国土数値情報ダウンロードページ[nlftp.mlit.go.jp]を開きます。データ形式は「JPGIS形式」「GML(JPGIS2.1)シェープファイル」が選択されていることを確認し、「水域」内の[湖沼(ポリゴン)]リンクをクリック、[ダウンロード]ボタンクリックで zip ファイルを保存します。
ページを戻って[河川(ライン)(ポイント)]リンクをクリック、各県ごとに47個 zip ファイルをダウンロードし、新しいフォルダを作りその中に47個の zip ファイルを保存します。zip ファイルの展開はしなくてもいいです。

陸地情報(白地図)を OpenStreetMap のサイトからダウンロードします。
Data Derived from OpenStreetMap for Download[osmdata.openstreetmap.de] のページを開き、「Land polygons」のリンクをクリック、一番上の[Download]ボタンから zip ファイルをダウンロードします。こちらの zip ファイルは展開しておきます。

QGIS での操作

QGIS を起動し heightmap 出力で使ったプロジェクトを開きます。

レイヤーの整理

レイヤーを整理します。レイヤー欄の[グループ追加]ボタンをクリックしレイヤーグループを作成、名前を「heightmap」とし、レイヤー「gm_el_v2_1_4」をこのグループ配下に移動します。
もう一つ「rivers」というレイヤーグループを作っておきます。「rivers」レイヤーグループを「heightmap」レイヤーグループと同列に移動し、「heightmap」レイヤーグループのチェックを外します。標高グレースケール地図が消えます。

データ追加
OpenStreetMap からダウンロードしたファイルから追加します。
メインメニュー[レイヤ]➡[レイヤを追加]➡[ベクタレイヤを追加]をクリック、「ソース」内「ベクタデータセット」テキストボックス右にあるアイコンをクリック、展開したファイルのうち「land_polygons.shp」を選択、[開く]ボタンをクリック、[追加]ボタンをクリック、[閉じる]ボタンをクリック。地図が表示されます。

次に湖沼データを追加します。OpenStreetMap 陸地情報と同じ手順ですが、zip ファイルを直接選択します。[追加]ボタンをクリック、レイヤの座標参照系が認識されないため湖沼が表示されません。追加されたレイヤ「W09-05 GML W09-05-g Lake」を右クリック➡[レイヤのCRS]➡[EPSG:4326に設定]をクリックすると湖が表示されます。

最後に河川データを追加します。前2回と同じ流れです。zip ファイルを直接選択できます。また47個のファイル複数を一括選択追加できます。[追加]ボタンをクリックした後このようなダイアログが出てきます。これは「ジオメトリタイプ」が「LineString」になっているもののみ選択し[OK]ボタンをクリックします。47回選択します。湖沼データの時と同じように座標参照系を設定します。47レイヤを複数選択して指定できます。
これで河川が表示できました。

46個の河川レイヤを1つにまとめる

後の作業の利便性を考えレイヤーをまとめます。北海道のレイヤの属性テーブルが他の都道府県と違うため除外してまとめます。
メインメニュー[ベクタ]➡[データ管理ツール]➡[ベクタレイヤのマージ...]をクリック、入力レイヤ右の[…]ボタンをクリック、「W05-09_01-g_Stream(北海道の河川)」「lang_polygons」「W09-05 GML W09-05-g Lake」以外の46個のレイヤーを選択します。選択したら左矢印ボタンをクリック、「変換先の座標参照系(CRS)[オプション]」では[プロジェクトXRS: EPSG:4326 - WGS 84]を選択、「出力レイヤ」の右にある[...]ボタン➡[GeoPackageに保存...]、ファイル名に[北海道以外全国河川]と入力、[保存]ボタン、「レイヤ名」に[北海道以外全国河川]、[OK]ボタンをクリック。「出力レイヤ」の右にある[...]ボタン➡[文字コードを変更]、[UTF-8]、[OK]ボタンをクリック、[実行]ボタンクリック。
マージ終了➡[閉じる]ボタンクリック。

マージした46個のレイヤーを削除します。「レイヤ」欄のレイヤー46個を選択、右クリック➡[レイヤの削除]➡[OK]

レイヤーの一覧がシンプルになりました。

海・陸地・河川・湖沼に色を付ける

海に当たる白い所を変更します。メインメニュー[プロジェクト]➡[プロパティ]、[一般情報]➡「背景色(g)」の白色ボタンをクリック、「HTML表記法」のテキストボックスに[FF0080]を入力。➡[OK]➡[OK]

陸地の色を白に変えます。レイヤ欄の「lang_polygons」レイヤーを右クリック➡[スタイル]➡[シンボルの編集]、色の所の色だけあるボタンをクリック、「HTML表記法」のテキストボックスに[FFFFFF]を入力。[OK]➡「シンプル塗りつぶし」をクリックストーローク色も白に変更、[OK][OK]。

湖沼も海と同じ色に変更します。レイヤ欄の「W09-05 GML W09-05-g Lake」レイヤーを右クリック➡[スタイル]➡[シンボルの編集]、色の所の色だけあるボタンをクリック、「HTML表記法」のテキストボックスに[FF0080]を入力。[OK]➡「シンプル塗りつぶし」をクリックストーローク色もにFF0080変更、[OK][OK]。

河川の色も変更します。川幅によって9種類の色に当てはまりますが、一番幅の細い「00E1FF」にします。レイヤ欄の「W05-09_01-g_Stream」レイヤーを右クリック➡[スタイル]➡[シンボルの編集]、色の所の色だけあるボタンをクリック、「HTML表記法」のテキストボックスに[00E1FF]を入力。[OK]。「単位」を[ミリメートル]から[ピクセル]に変更、「幅」を「1」に変更、[OK]。
「W05-09_01-g_Stream」レイヤーを選択している状態で、メインメニュー[レイヤ]➡[スタイルのコピー]、レイヤ欄の「北海道以外全国河川」レイヤーを選択、メインメニュー[レイヤ]➡[スタイルの貼り付け]。

表示する河川を絞る

表示する河川を1級河川のみにします。レイヤ欄の「北海道以外全国河川」レイヤーを右クリック➡[フィルタ]、「プロバイダ特有のフィルタ式」の下にあるテキストエリアに、
"W05_003" IN ('1', '2', '5', '6')
と入力し、[OK]。

北海道の河川「W05-09_01-g_Stream」レイヤーは文字コードの相性でフィルター機能が動かないので、レイヤーをいったん GeoPackage 形式で保存します。
レイヤ欄の「W05-09_01-g_Stream」レイヤーをクリックして選択、メインメニュー[レイヤ]➡[名前を付けて保存]、「形式」を[GeoPackage]に、「ファイル名」「レイヤ名」を適当に入力し、[OK]。色が変わったら戻して、レイヤーを右クリック➡[フィルタ]、「プロバイダ特有のフィルタ式」の下にあるテキストエリアに、
"区間種別" = '1' or "区間種別" = '2' or "区間種別" = '5' or "区間種別" = '6'
と入力し、[OK]。

ダム湖を消す

16世紀後半を念頭に置いた地図にしたいのでダム湖を消したいとおもいますが、このフィルターですべて消えないと思います。
レイヤ欄の「W09-05 GML W09-05-g Lake」レイヤーを右クリック➡[フィルタ]、「プロバイダ特有のフィルタ式」の下にあるテキストエリアに、
"W09_001" NOT LIKE '%ダム%' AND "W09_001" NOT IN ('富里湖', '聖台ダム公園', 'かなやま湖', '定山湖', '笹流貯水池', 'かわうち湖', '岩洞湖', '御所湖', '田瀬湖', '錦秋湖', '七ッ森湖', 'あさひな湖', '釜房湖', '七ヶ宿湖', '宝仙湖', '月山湖', '羽鳥湖', '田子倉湖', '奥只見湖', '奥利根湖', 'ならまた湖', '野反湖', '赤谷湖', '草木湖', '神流湖', '狭山湖', '多摩湖', '奥多摩湖', '宮ヶ瀬湖', '丹沢湖', '黒部湖', '有峰湖', '高瀬ダム調整湖', '奥木曽湖', '高遠湖', '美和湖', '恵那峡', '阿木川湖', '佐久間湖', '三河湖', '永源寺湖', '虹の湖', '天若湖', '知明湖', '布引貯水池', '池原貯水池', '椿山ダム湖', '神竜湖', '八千代湖', '龍姫湖', '本庄貯水池', '弥栄湖', '小野湖', '満濃池', '朝霧湖', 'さめうら湖', '上秋月湖', '美奈宜湖', '鷹島海中ダム湖', '北川ダム湖', '日向椎葉湖', '大鶴湖', '福上湖', 'かんな湖', '倉敷湖')
と入力し、[OK]。

画像をエクスポートする
QGIS でエクスポートした河川はピクセル斜め隣接を含んで出力されるため、画像編集ソフトでピクセル単位の再編集をする必要があります。マップの仕様が固まっていない段階で河川の手動編集は手戻りリスクが高いので、今回は静岡県の1級河川「安倍川[www.mlit.go.jp]」のみ地図に載せたいと思います。「北海道以外全国河川」レイヤーのフィルターを次のように変更します。
"W05_004" LIKE '安倍川' OR "W05_004" LIKE '藁科川' AND "W05_003" IN ('1', '2', '5', '6')

それでは hightmap と同じように画像をエクスポートします。メインメニュー[プロジェクト]➡[レイアウト]➡[(heightmapで使ったレイアウト名]、レイアウトウインドウが表示されます。
rivers.png を用意する2
GIMP での操作
QGIS からエクスポートとして PNG ファイルを GIMP で開きます。同時に MOD フォルダの中にある rivers.png も開いておきます。
エクスポート PNG の方で、メインメニュー[選択]➡[すべて選択]、メインメニュー[編集]➡[コピー]。
rivers.png の方で、メインメニュー[編集]➡[同じ位置に貼り付け]


安倍川を拡大したところです。QGIS からはピクセルの斜め接続で出力されるため、上下左右隣接するように編集します。


「鉛筆で描画」「サイズ」を[1]にします。ピクセル隣接編集後がこちら。


川の出発点を意味するライム色ピクセルや、合流点の赤色ピクセルなども付け足して、メインメニュー[ファイル]➡[rivers.pngに上書きエクスポート]。
「shadercache」「terraincache」フォルダを削除。
マップエディターを有効にした CK3 を起動、rivers.png が反映されていることを確認。
provinces.png を用意する
provinces.png の仕様

magick.exe" identify -verbose "c:\Program Files (x86)\Steam\steamapps\common\Crusader Kings III\game\map_data\provinces.png" の実行結果
Image: Filename: c:\Program Files (x86)\Steam\steamapps\common\Crusader Kings III\game\map_data\provinces.png Format: PNG (Portable Network Graphics) Mime type: image/png Class: DirectClass Geometry: 8192x4096+0+0 Resolution: 28.35x28.35 Print size: 288.959x144.48 Units: PixelsPerCentimeter Colorspace: sRGB Type: TrueColor Base type: Undefined Endianness: Undefined Depth: 8-bit Channel depth: Red: 8-bit Green: 8-bit Blue: 8-bit

ラスタ形式対応画像編集ソフトでピクセル単位の色塗りをすれば作ることができますが、マップサイズ変更の可能性を考えて、できるだけ QGIS で作っていきます。

QGIS での操作
海域ポリゴンの作成
メインメニュー[レイヤ]➡[レイヤを作成]➡[新規GeoPackageレイヤ...]。
ダイアログ内の「データーベース」右にある[…]ボタン➡ファイル名保存場所を入力して[保存]ボタンクリック、「ジオメトリタイプ」を[ポリゴン(Polygon)]に変更、新規フィールドに「海域名」「プロヴィンスNO」などを追加、[OK]をクリック。

➡編集モード切替➡[ポリゴン地物の追加]➡マウス操作➡海域を複数回クリックして囲み終わったら右クリック➡「地物属性」ダイアログが出てくるので入力して[OK]をクリック。
[レイヤ]の編集内容を保存]アイコンをクリック。



海域ポリゴンを後から追加するポリゴンが既存の下のレイヤーに隠れること、陸地レイヤーの下に隠れることを想定して追加していく。

すべての海域を追加したら、ポリゴンの描画順序を変更する。[レイヤプロパティ]➡[シンポロジ]➡[▼レイヤレンダリング][地物描画順序の制御]をチェック、[A➡Z]アイコンをクリック、式「fid」「降順」にして[OK]ボタンをクリック。

行政区画の取り込み
Done
行政区画ポリゴン作成
Done
行政区画とプロヴィンス対応表作成
Done
provinces.png エクスポート
Done
テキストファイルの準備
shgnt_landed_titles.txt 作成
Done
[mod]/history/provinces 配下のファイル群を作成
Done
island_region.txt を作成
Done
climate.txt を作成
Done
default.map を作成
Done
[mod]/history/titles 配下のファイル群を作成
Done
[mod]/common/province_terrain/00_province_terrain.txt ファイルを作成
Done
[mod]/localization/english/00_provinces_l_english.yml ファイルを作成
Done
2513/2878 87% 名前入力暫定完了
[mod]/localization/english/00_nmih_titles_l_english.yml ファイルを作成
Done
1952/2837 31% 名前入力暫定完了
[mod]/common/religion/holy_sites/00_holy_sites.txt ファイルを作成
Done
起動テスト確認
新しい Count である「Kyoto」とその中にある Barony「Rokuhara Yakata」が認識されてる。


Done
shogunate メイン MOD と組み合わせて確認した後の修正
新しい通行不能海域プロヴィンスを追加する

範囲外の通行不能なところも色つけ


また error.log に出てくる
[mapgenerator.cpp:416]: Undefined colors: が出ないようにチェックする。

Done
climate.txt を修正
Done
default.map を修正
Done
history/characters/*.txt 内のタイトルを新しい名前に置換
Done
[MOD]/gfx/map/terrain/flatmap.dds を作成
Done
map object 設定
4種類の基本ロケーター設定
Done

公式 Wiki[ck3.paradoxwikis.com] の通りにやってみましたが、プロヴィンスが狭いためか Auto nudge で配置できませんでいた。
  • building_locators.txt
  • combat_locators.txt
  • player_stack_locators.txt
  • siege_locators.txt
の4つのファイルを直接操作する必要がありそうですが、ロケーターを配置できるようになるか不透明です。これらが配置できないとユニットの移動ができずゲームプレイができません。
問題点を整理してみますと、
  • map object モードにしてプロヴィンス選択Sにしてからプロヴィンスをクリックした後に、プロヴィンス固定4つのロケーター欄に何も表示されない。
  • 4つのロケーターの一部が表示されない。
  • プロヴィンスが十分広いように見えても Auto nudge 機能でロケーターを自動配置しようとしても4つすべてが配置されない。
こういったことがあげられます。
公式Wiki情報の手順で生成したマップオブジェクト配置情報テキストファイルは CK 3 バニラのものがそのまま保存されている印象があります。まずバニラの情報を初期化してみてファイルの中身を解析しようと思います。

{ id=1 position={ 7483.000000 0.000000 1667.000000 } rotation={ -0.000000 -0.000000 -0.000000 1.000000 } scale={ 0.500000 0.500000 0.500000 } }
id は 0 から始まるのではなく、id 1 が プロヴィンスNo 1 に対応することが分かりました。
position のはじめの数字が地図の X 軸、3番目の数字が Y 軸のようです。
scale をデフォルトの 1 より小さくすればマップオブジェクトの建物も小さくなりました。

4つのロケーターを一度に設定するのではなく、建物だけ位置を決めてその座標を他の3つに流用してみようかと思います。

4つのロケーター定義テキストファイルのインスタンス内を消去し、建物定義ファイルに中身のないid を全プロヴィンス分用意したものに置換したところ、マップエディターでロケーターが何も表示されない問題は解消されました。
次に建物だけ Auto nudge で配置していきます。Sキーでプロヴィンス選択モードにし、シフトキーを押しながら複数プロヴィンスをクリックするか、ドラッグ&ドロップで選択します。そして Auto nudge のサイコロアイコンをクリック、buildings に赤×印がついていないことを確認します。
ロケーター定義ファイルを建物だけに限定しても建物が配置できなかった極小プロヴィンスに対応する男爵領は以下の通り。
  • b_shgnt_katagata_3 …… プロヴィンスID 845
  • b_shgnt_nishi-kasugai_5 …… プロヴィンスID 270
上記2つはプロヴィンスを隣接するものと統合するか、座標を手動で調査して定義ファイルに手入力する選択があります。今回は座標を調査して手入力してみます。

デバッグモードで CK3 を起動します。
デバックモードのオプションは
-debug_mode -develop

地図上で2つのプロヴィンス座標を取得します。

変更前
{ id=845 position={ 0.000000 0.000000 0.000000 } rotation={ 0.000000 0.000000 0.000000 0.000000 } scale={ 0.500000 0.500000 0.500000 } }
{ id=270 position={ 0.000000 0.000000 0.000000 } rotation={ 0.000000 0.000000 0.000000 0.000000 } scale={ 0.500000 0.500000 0.500000 } }

変更後
{ id=845 position={ 7733.000000 0.000000 ♥♥♥♥.000000 } rotation={ -0.000000 -0.000000 -0.000000 1.000000 } scale={ 0.100000 0.100000 0.100000 } }
{ id=270 position={ 7690.000000 0.000000 1397.000000 } rotation={ -0.000000 -0.000000 -0.000000 1.000000 } scale={ 0.100000 0.100000 0.100000 } }
極めて狭いプロヴィンスなので建物縮尺をデフォルトの10分の1に変更します。
マップエディターを起動して建物オブジェクトが表示されるかどうか確認します。
マップエディターで赤×印のエラーは消えていたので、MOD を有効にした地図で確認してみます。
尾張国西春日井郡5では建物が建っていませんが、丸が出ているので大丈夫そう、美濃国方県郡3も建物が小さすぎるが表示はされています。

海域プロヴィンスのロケーター設定もマニュアルテキスト編集で動作することを確認できました。
タイトルIDの置換ほか
[MOD]/history/wars/テキストファイル中のタイトルIDを置換
Done
[MOD]/common/bookmarks/00_bookmarks.txt 中のタイトルIDを置換
Done
[MOD]/common/flavorization/nmih_title_holders.txt 中のタイトルIDを置換
Done
山岳地帯プロヴィンス設定検証
Done
[MOD]/common/customizable_localization/00_japanese_name_style_loc.txt 中のタイトルIDを置換
Done
e_nmih_tenno プロヴィンス追加検証
Done
landed_title に追加するコード
capital = c_nmih_tenno k_nmih_tenno = { d_nmih_tenno = { c_nmih_tenno = { b_nmih_tenno = { province = 3 } } } }
k_nmih_tenno d_nmih_tenno のヒストリーファイルを設定すれば e_nmih_tenno と c_nmih_tenno のみホルダーできるかどうか未検証

[MOD]/map_data/definition.csv でプロヴィンスIDが未設定のものがあったので補完
Done
新しく追加したタイトルの history/titles/*.txt 作成準備

Done

既存タイトル歴史情報対応表作成
新しく追加したタイトル歴史情報について、実際の地理と歴史を調査するのに時間がかかるので、一時的に周辺のタイトル歴史情報をコピーして生成する。そのためにコピー元先対応表を準備する。

Done

解決するエラーメッセージ例
[landedtitlemanager.cpp:617]: Date 1568.1.1. c_shgnt_itto doesn't have a holder in history. All counties should have one.

地理情報から terrain 画像を作る検証

WIP

標高データと土地被覆情報から gfx/map/terrain/*.png を作ることができるか検証する。関連するファイルは以下のもの。
  • beach_02_mask.png …… 砂浜
  • beach_02_mediterranean_mask.png …… 砂浜(地中海沿岸)
  • beach_02_pebbles_mask.png …… 砂浜(小石)
  • coastline_cliff_brown_mask.png …… 岸壁海岸線(茶色)
  • coastline_cliff_desert_mask.png …… 岸壁海岸線(砂漠)
  • coastline_cliff_grey_mask.png …… 岸壁海岸線(灰色)
  • desert_01_mask.png …… 砂漠01
  • desert_02_mask.png …… 砂漠02
  • desert_cracked_mask.png …… 砂漠(裂け目)
  • desert_flat_01_mask.png …… 砂漠(平坦)
  • desert_rocky_mask.png …… 砂漠(岩)
  • desert_wavy_01_larger_mask.png …… 砂漠(起伏大)
  • desert_wavy_01_mask.png …… 砂漠(起伏)
  • drylands_01_cracked_mask.png …… 陸地(裂け目)
  • drylands_01_grassy_mask.png …… 陸地(草地)
  • drylands_01_mask.png …… 陸地
  • drylands_grass_clean_mask.png …… 陸地草地クリーン
  • farmland_01_mask.png …… 農地
  • floodplains_01_mask.png …… 氾濫原
  • forestfloor_02_mask.png …… 森の地面02
  • forestfloor_mask.png …… 森の地面
  • forest_jungle_01_mask.png …… 森(ジャングル)
  • forest_leaf_01_mask.png …… 森(葉っぱ)
  • forest_pine_01_mask.png …… 森(パイン松)
  • hills_01_mask.png …… 丘
  • hills_01_rocks_mask.png …… 岩の丘
  • hills_01_rocks_medi_mask.png …… 中ぐらいの大きさの岩の丘
  • hills_01_rocks_small_mask.png …… 小さい岩の丘
  • india_farmlands_mask.png …… インドの農地
  • medi_dry_mud_mask.png
  • medi_farmlands_mask.png
  • medi_grass_01_mask.png
  • medi_grass_02_mask.png
  • medi_hills_01_mask.png
  • medi_lumpy_grass_mask.png
  • medi_noisy_grass_mask.png
  • mountain_02_b_mask.png …… 緑のある山地(b)
  • mountain_02_c_mask.png …… 山地(c)
  • mountain_02_c_snow_mask.png …… 山地(c雪)
  • mountain_02_desert_c_mask.png …… 山地(c砂漠)
  • mountain_02_desert_mask.png …… 山地(砂漠)
  • mountain_02_d_desert_mask.png …… 山地(d砂漠)
  • mountain_02_d_mask.png …… 山地(d)
  • mountain_02_d_snow_mask.png …… 山地(d雪)
  • mountain_02_d_valleys_mask.png …… 山地(d谷)
  • mountain_02_mask.png …… 山地
  • mountain_02_snow_mask.png …… 山地(雪)
  • mud_wet_01_mask.png
  • northern_hills_01_mask.png …… 北の丘
  • northern_plains_01_mask.png …… 北の平原
  • oasis_mask.png …… オアシス
  • plains_01_desat_mask.png …… 平原(desat)
  • plains_01_dry_mask.png
  • plains_01_dry_mud_mask.png
  • plains_01_mask.png
  • plains_01_noisy_mask.png
  • plains_01_rough_mask.png
  • snow_mask.png
  • steppe_01_mask.png
  • steppe_bushes_mask.png
  • steppe_rocks_mask.png
  • wetlands_02_mask.png
  • wetlands_02_mud_mask.png
標高データからグレースケール画像を作成

Done

次の5つのファイルを標高データから生成してみます。
  • beach_02_mask.png …… 砂浜
  • plains_01_mask.png
  • hills_01_mask.png …… 丘
  • mountain_02_b_mask.png …… 緑のある山地(b)
  • mountain_02_mask.png …… 山地
具体的には、
  • beach_02_mask.png …… -233~0メートル:#FFFFFF 100%、1メートル:50%、それ以外#000000
  • plains_01_mask.png …… 1メートル:50%、2~100メートル:100%、101~299:100%~0%
  • hills_01_mask.png …… 101~299メートル:0%~100%、300~1000メートル:100%、1001~1299:100%~0%
  • mountain_02_b_mask.png …… 1001~1299メートル:0%~100%、1300-1500メートル:100%、1501~1899:100%~0%
  • mountain_02_mask.png …… 1501~1899メートル:0%~100%、1900メートル~:100%、101~299:100%~0%
5種類のグレースケール画像ファイルを読み込んだあと
土地被覆情報からグレースケール画像を作成
Done

土地被覆データの凡例は次の通り
Code
Class Name
名前
1
Broadleaf Evergreen Forest
広葉常緑樹林
2
Broadleaf Deciduous Forest
広葉落葉樹林
3
Needleleaf Evergreen Forest
針葉樹常緑樹林
4
Needleleaf Deciduous Forest
針葉樹落葉樹林
5
Broadleaf Deciduous Forest
広葉樹落葉樹林
6
Mixed Forest
混交林
7
Shrub
低木灌木
8
Herbaceous
9
Herbaceous with Sparse Tree/Shrub
草とまばらな木・低木
10
Sparse vegetation
まばらな植生
11
Cropland
農耕地
12
Paddy field
水田
13
Cropland / Other Vegetation Mosaic
農耕地・その他モザイク植生
14
Mangrove
マングローブ紅樹林
15
Wetland
沼沢地
16
Bare area,consolidated(gravel,rock)
無漿膜野、砂利と石の混合
17
Bare area,unconsolidated (sand)
無漿膜野、 非連結の砂
18
Urban
都市
19
Snow / Ice
雪・氷
20
Water bodies
水域

対応候補

  1. forest_leaf_01_mask.png
  2. forest_leaf_01_mask.png
  3. forest_pine_01_mask.png → tree_pine_01_a_mask.png サイズを1/2にする
  4. forest_pine_01_mask.png
  5. forestfloor_mask.png
  6. forestfloor_02_mask.png
  7. なし
  8. drylands_01_grassy_mask.png
  9. なし
  10. drylands_01_mask.png × → medi_grass_01_mask.png
  11. farmland_01_mask.png
  12. india_farmlands_mask.png
  13. なし
  14. forest_jungle_01_mask.png ×
  15. floodplains_01_mask.png
  16. beach_02_pebbles_mask.png
  17. desert_01_mask.png ×
  18. なし
  19. snow_mask.png ×
  20. なし

[MOD]/content_source/map_objects 内の木オブジェクトマスクファイルへの変換は失敗。

Steam Workshop テスト公開
Done

https://steamcommunity.com/sharedfiles/filedetails/?id=2391487224

サラウンドマスクの作成
Done



作成手順:
https://imperator.paradoxwikis.com/Map_modding

最後にレイヤーを統合すること、32bit カラーでも認識する。

nmih_landed_titles.txt 再変換

Done

新しく追加された cultural_names を認識するようにスクリプトを更新する。

shogunate MOD ベータ版で e_nmih_tenno がどのように土地と紐付けられたか調査する
Done

rivers.png に新しい河川を追加する
淀川水系の一部を実装してひとまず Done
淀川・木津川・桂川の合流地点です。いずれ巨椋池を再現したいところ。
紀の川追加……Done
熊野川追加……Done
揖斐川追加……Done
長良川追加……Done
木曽川追加……Done
信濃川追加……Done
天竜川追加……Done
相模川追加……Done
多摩川追加……Done
久慈川追加……Done
阿武隈川追加……Done
馬淵川追加……Done
米代川追加……Done
最上川追加……Done
黒部川追加……Done
手取川追加……Done
九頭竜川追加……Done
由良川追加……Done
円山川追加……Done
天神川追加……Done
斐伊川追加……WIP

再編した方が良さそうなプロヴィンスを調査
WIP

  • b_shgnt_imizu_4……小さい
  • b_shgnt_kawabe_7……分離
    b_shgnt_sakata_3……分離
    b_shgnt_kasa_4……分離
    b_shgnt_kasa_5……分離
    b_shgnt_asukabe_2……小さい
    b_shgnt_ishikawa_1……分離
    b_shgnt_oto
rivers.png に新しい河川を追加する
淀川水系の一部を実装してひとまず Done
淀川・木津川・桂川の合流地点です。いずれ巨椋池を再現したいところ。
紀の川追加……Done
熊野川追加……Done
揖斐川追加……Done
長良川追加……Done
木曽川追加……Done
信濃川追加……Done
天竜川追加……Done
相模川追加……Done
多摩川追加……Done
久慈川追加……Done
阿武隈川追加……Done
馬淵川追加……Done
米代川追加……Done
最上川追加……Done
黒部川追加……Done
手取川追加……Done
九頭竜川追加……Done
由良川追加……Done
円山川追加……Done
天神川追加……Done
斐伊川追加……Done
吉井川追加……Done
芦田川追加……Done
佐波川追加……Done
吉野川追加……Done
土器川追加……Done
重信川追加……Done
重信川追加……Done
物部川追加……Done
遠賀川追加……Done
大分川追加……Done
五ヶ瀬川追加……Done
肝属川追加……Done

再編した方が良さそうなプロヴィンスを調査
いったんDone
  • b_shgnt_imizu_4 小さい 1557
  • b_shgnt_kawabe_7 分離 165 画像編集が必要保留
  • b_shgnt_sakata_3 分離 808 画像編集が必要保留
  • b_shgnt_asukabe_2 小さい 114
  • b_shgnt_otori_3 小さい 122
  • b_shgnt_nishi-kasugai_5 小さい 270
  • b_shgnt_kaga_ishikawa_10 小さい 1486
  • b_shgnt_iwami_1 小さい 1721
  • b_shgnt_hizen_mine_1 小さい 2414
  • b_shgnt_tomamae_1 小さい 2809
  • b_shgnt_kochi_3 分離 721 牛久沼を分離する必要がある保留
  • b_shgnt_kasa_4 分離 1697 訂正済み
  • b_shgnt_kasa_5 分離 1698 訂正済み
  • b_shgnt_ishikawa_1 分離 115 訂正済み
  • b_shgnt_ito_3 分離 2053 訂正済み
  • b_shgnt_kita_muro_1 分離 2095 訂正済み
  • b_shgnt_suchi_1 分離 359 訂正済み
  • b_shgnt_tachibana_4 分離 472 訂正済み
  • b_shgnt_kuraki_1 分離 473 訂正済み
  • b_shgnt_hara_1 分離 539 画像編集が必要保留
  • b_shgnt_ubaraki_8 分離 652 訂正済み
  • b_shgnt_ashikaga_3 分離 1052 訂正済み
  • b_shgnt_kamitsuga_7 分離 1066 訂正済み
  • b_shgnt_shimeha_2 分離 1163 訂正済み
  • b_shgnt_tsugaru_6 分離 1390 訂正済み
  • b_shgnt_echizen_sakai_10 分離 1457 訂正済み
  • b_shgnt_nishi_kambara_8 分離 1632 訂正済み
  • b_shgnt_iwami_naka_3 分離 1790 訂正済み
  • b_shgnt_aki_kamo_4 分離 1996 訂正済み
  • b_shgnt_mimasaka_kume_4 分離 1873 訂正済み
  • b_shgnt_wake_3 分離 1897 訂正済み
  • b_shgnt_shitsuki_2 分離 1923 訂正済み
  • b_shgnt_bungo_ama_5 分離 2392 訂正済み
  • b_shgnt_bungo_ama_6 分離 2393 訂正済み
  • b_shgnt_amakusa_1 分離 2471 訂正済み
  • b_shgnt_tomamae_2 分離 2810 訂正済み

伯爵領タイトルを変更する
多摩郡を多西郡と多東郡に分割する。
トカラ列島を含める。
入間郡と入東郡〔につとう〕について調べる。