Stellaris

Stellaris

Not enough ratings
【Stellaris 3.4.2】(メモ)マップモードの作り方について
By fatal_errorjp
自作Mod( https://steamproxy.net/sharedfiles/filedetails/?id=2810645667 )作成時に、
わからなくて大分調べて回ったので、後々アップデート対応する時に漏れなくするためのメモです。

なお、初めてModを作成するような方向けには記載していません。
多少なりともイベント関連のModを作るか、書き換えることができる知識がある前提で記載しています。
少なくともOn Actions、Effects、Conditionsなどについての大まかな仕組みを知らないと
ついて行けない可能性が高いのでその点ご了承ください。
特に最後の蛇足の部分はほぼその辺りの知識は知っている前提で内容を端折って書いています。
   
Award
Favorite
Favorited
Unfavorite
作成にあたって必要なもの
最終的には画像のような項目を揃えていく必要があります。
青で塗りつぶされているものは必須、赤射線のものは状況によっては必要です。
更に例として上げている物は結構特殊なケースなので、白の部分も作っています。
基本的には白の部分は苦肉の策であり、不要なものと思ってください。

1. MOD作成用のフォルダを生成する
MOD作成用フォルダの準備については、ポートレート用のガイドとまったく同じため割愛します。
以下ガイドの「1. MOD作成用のフォルダを生成する」を参照してください。

https://steamproxy.net/sharedfiles/filedetails/?id=2766755737
2.マップモードの定義を作成する
まず始めに、マップモードの定義を作成しましょう。


以下の構成で、新規のテキストファイルを作成してください
C:\Users\(ユーザー名)\Documents\Paradox Interactive\Stellaris\mod\(MODのディレクトリ名)
└common
 └map_modes
  └(mod名)_map_modes.txt ← これを作る

テキストエディタを開き、マップモードの定義を記述していきましょう。
以下は戦争マップを定義した時のサンプルです。
保存する際の文字コードはUTF-8 BOMなしを指定してください。

########################################################### # 戦争マップ ########################################################### custom_map_war_mode = { icon = "GFX_map_mode_war" enable_terra_incognita = yes can_change_point_of_view = yes display_claims = yes display_espionage_operations = no # カレント(青色) color = { value = hsv { 0.0 0.0 0.8 0.7 } condition = { NOT = { exists = FROM } } custom_tooltip = "MAP_MODE_OBSERVER" } color = { value = hsv { 0.580 1.0 0.8 1.0 } condition = { is_same_empire = FROM } } ### # 危機帝国 ### # 大ハーンの従属国は、大ハーンとは敵対しない color = { value = rgb { 255 255 255 0 } condition = { is_country_type = awakened_marauders any_subject = { is_same_value = from } } custom_tooltip = "WAR_MODE_NO_WAR" } color = { value = rgb { 255 255 255 0 } condition = { from = { is_country_type = awakened_marauders any_subject = { is_same_value = root } } } custom_tooltip = "WAR_MODE_NO_WAR" } # 危機とそれ以外は原則敵対する color = { value = rgb { 255 0 0 0 } condition = { OR = { is_country_type = awakened_marauders is_country_type = swarm is_country_type = extradimensional is_country_type = extradimensional_2 is_country_type = extradimensional_3 is_country_type = ai_empire } } custom_tooltip = "WAR_MODE_FOE_COUNTRY" } color = { value = rgb { 255 0 0 0 } condition = { from = { OR = { is_country_type = awakened_marauders is_country_type = swarm is_country_type = extradimensional is_country_type = extradimensional_2 is_country_type = extradimensional_3 is_country_type = ai_empire } } } custom_tooltip = "WAR_MODE_FOE_COUNTRY" } ### # 色づけ不要 ### color = { value = rgb { 255 255 255 0 } condition = { hidden_trigger = { root = { NOR = { is_country_type = default is_country_type = fallen_empire is_country_type = awakened_fallen_empire } } } } } color = { value = rgb { 255 255 255 0 } condition = { hidden_trigger = { from = { NOR = { is_country_type = default is_country_type = fallen_empire is_country_type = awakened_fallen_empire } } } } } # 敵側として戦争に参加中 color = { value = rgb { 255 0 0 0 } condition = { is_at_war_with = from } custom_tooltip = "WAR_MODE_FOE_COUNTRY" } # 味方側として戦争に参加中 color = { value = rgb { 0 255 0 0 } condition = { any_war = { is_war_participant = { who = from side = root } } } custom_tooltip = "WAR_MODE_FRIEND_COUNTRY" } # 対象国と戦争はしていないが国境を閉鎖中 color = { value = rgb { 255 255 0 0 } condition = { not = { has_truce = from } OR = { has_closed_borders = from is_rival = from } } custom_tooltip = "WAR_MODE_CLOSED_BORDERS" } # 外交の自由がない従属国の場合、国境閉鎖のチェックは宗主国の設定に従う color = { value = rgb { 255 255 0 0 } condition = { is_subject = yes subject_can_diplomacy = no any_country = { is_overlord_to = root AND = { NOR = { is_at_war_with = from any_war = { is_war_participant = { who = from side = prev } } has_truce = from } OR = { has_closed_borders = from is_rival = from } } } } custom_tooltip = "WAR_MODE_CLOSED_BORDERS" } # デフォルト color = { value = rgb { 255 255 255 0 } condition = { always = yes } custom_tooltip = "WAR_MODE_NO_WAR" } }

書き方の詳細自体は、Stellaris本体のフォルダ以下のマップモード定義の本体
(以下のファイル)に英語で記載されています。
(Stellarisのインストールフォルダ)\common\map_modes\00_map_modes.txt

英語の説明を見るのが確実ではありますが、
それだとガイドにならないのでここでも簡単に記載しておきます。

マップモードの名称
マップモードの名称
戦争マップなのでそのままの意味で
custom_map_war_modeと名付けているだけで
他のマップモードと被らない英語であればなんでもOKです

マップモードの名称のブロックに記載する項目
icon
このマップモードで使いたいアイコン定義の名前
can_change_point_of_view
yes:マウスクリックで比較対象の国家を変更できる
no:比較対象がプレイヤー帝国のみに固定化される
enable_terra_incognita
yes:未探査で不明な星系の領域は描画しない
no:未探査で不明な星系の領域も描画する
display_claims
yes:選択中の国家の請求権を表示する
no:選択中の国家の請求権は表示しない
display_espionage_operations
yes:現在プレイヤー帝国が実行中の諜報作戦を実行中の帝国の首都(?)に表示する
no:諜報作戦を表示しない
shortcut
キーボードショートカットのキーを指定する
"CTRL+b"など
color
色を塗るための条件を記載するためのブロック
複数のcolorブロックを記載した場合は、
上から順に処理され、最初に合致する条件にあったものが選択されます

colorブロックに記載する内容
type
色を塗る範囲
borders:国境の境界線のみ
country:帝国の内部
country_and_borders:内部と境界線両方
value
実際に指定したい色そのもの。HSVかRGBでの記述方法を選べる
例)
hsv { 1.0 0.0 0.0 1.0 }
rgb { 255 255 255 0 }
4つ目の引数には何を入れれば良いか正直よくわからない…
hsvも値をよくわかっていないので、元のコードを参考に数値を入力している
custom_tooltip
マウスオーバーした時に表示されるツールチップのメッセージの内容
ここに直接文章を書くわけではなく、ローカライズ用のキー名を指定する
condition
このcolorにするための具体的な条件を記述する
使える条件は以下のサイトの表などが参考になる
https://stellaris.paradoxwikis.com/Conditions#Trigger_list

ちなみにcondition内のfromは、マウスクリックして選択中の国家
rootはfromと比較中の個別の国家を指している
zoom
ここに記載した数字よりズームアウトした時だけ動作する
filter
特定のマップモードがアクティブの時のみ動作する
players:プレイヤーマップ
trade_routes:交易路マップ
sectors:セクターマップ
hyperlanes:ハイパーレーンマップ
unions:同盟マップ



3.アイコン画像を準備する
次に、アイコン画像素材とアイコン画像定義を作成しましょう。


アイコン画像素材
横x縦 = 58x29のddsファイルが必要です。
左側の29x29の領域が非アクティブ時のマップモードのアイコン、
右側の29x29の領域がアクティブ時のマップモードのアイコンとして扱われます。


作成したddsファイルは、以下の場所に配置してください
C:\Users\(ユーザー名)\Documents\Paradox Interactive\Stellaris\mod\(MODのディレクトリ名)
└gfx
 └interface
  └icons
   └(mod名)_(アイコン固有の名称).dds ← ここに配置する


アイコン画像定義
素材の配置が終わったら、定義を作成します。

以下の構成で、新規のテキストファイルを作成してください
C:\Users\(ユーザー名)\Documents\Paradox Interactive\Stellaris\mod\(MODのディレクトリ名)
└interface
 └(mod名)_icons.txt ← これを作る

テキストエディタを開き、アイコン定義を記述していきましょう。
以下はサンプルです。
保存する際の文字コードはUTF-8 BOMなしを指定してください。

spriteTypes = { spriteType = { name = "GFX_map_mode_war" texturefile = "gfx/interface/icons/map_mode_war.dds" noOfFrames = 2 } }

nameはシステム上の制約なのか単純な命名ルールなのかわかりませんが、
"GFX_"と先頭に入れる慣習があるようなのでそれに合わせて記載します。
また、ここでつけたnameと、マップモードの定義のiconの名称を
一致させる必要があるので注意しましょう。

今回の例ではアイコンは1つだけですが、複数の検索モードを追加し、
それぞれアイコンを用意したい場合は、以下のように定義をまとめて記載してください。

spriteTypes = { spriteType = { name = "GFX_map_mode_war" texturefile = "gfx/interface/icons/map_mode_war.dds" noOfFrames = 2 } spriteType = { name = "GFX_map_mode_fleet" texturefile = "gfx/interface/icons/map_mode_fleet.dds" noOfFrames = 2 } spriteType = { name = "GFX_map_mode_economy" texturefile = "gfx/interface/icons/map_mode_economy.dds" noOfFrames = 2 } spriteType = { name = "GFX_map_mode_technology" texturefile = "gfx/interface/icons/map_mode_technology.dds" noOfFrames = 2 } spriteType = { name = "GFX_map_mode_relative_all" texturefile = "gfx/interface/icons/map_mode_relative_all.dds" noOfFrames = 2 } }
4.ローカライズファイルを作成する
続いてローカライズファイルを作成します。


以下の構成で、新規のテキストファイルを作成してください
C:\Users\(ユーザー名)\Documents\Paradox Interactive\Stellaris\mod\(MODのディレクトリ名)
└localisation
 └(MOD名)_l_japanese.yml ← これを作る

以下は戦争マップの定義を作成した時のサンプルです
保存する際の文字コードはUTF-8 BOMありを指定してください
このファイルはBOMが必要なので注意してください

l_japanese: ###################################### # マップモード ###################################### # 戦争マップ custom_map_war_mode:0 "戦争マップ" custom_map_war_mode_desc:0 "選択した帝国との戦争状態を表示する。" WAR_MODE_FOE_COUNTRY:0 "§H[Root.GetName]§!は§H[From.GetName]§!と戦争中だ" WAR_MODE_FRIEND_COUNTRY:0 "§H[Root.GetName]§!は§H[From.GetName]§!の味方国として戦争中だ" WAR_MODE_CLOSED_BORDERS:0 "§H[Root.GetName]§!は§H[From.GetName]§!との国境を閉じている" WAR_MODE_NO_WAR:0 "§H[Root.GetName]§!は§H[From.GetName]§!とは戦争をしていないようだ"

「custom_map_war_mode」と記載している部分は、
マップモード定義でつけた「マップモードの名称」キーとして使ってください。
「custom_map_war_mode_desc」の部分は、
マップモード定義でつけた「マップモードの名称」の後ろに「_desc」を付けているだけです。
どちらもマップモードにマウスカーソルを当てた時のツールチップに
表示される文章となります。

それ以降の記述内容については、マップモード定義の
custom_tooltipの部分で付けたキー名を記載しています。
こちらは、国家にマウスカーソルを当てた時に表示されるツールチップに
表示される文章となります。
5.一旦動かしてみる
ここまで実装できたら、一旦動かしてみましょう。
上手く記述できていれば、画像のようにマップモードが追加されていることが確認できます。



マップモードを単独追加したいだけなら、ここまででガイドとしては終了です。
実際に表示されるマップを確認し、思った条件の通りに動いているかテストしましょう。
6.マップモードをどんどん追加していくとどうなるか
単独でなく、マップモードを複数作る場合は考慮が必要です。
どういうことでしょうか。試しに作ってみましょう。

先ほど作ったマップモード定義に、以下の記述を追加してみましょう。

# --- さっき書いていたコード --- custom_map_war_mode = { ... } # --- ここまで さっき書いていたコード --- # 追加分 test1 = { icon = "GFX_map_mode_war" enable_terra_incognita = yes can_change_point_of_view = yes display_claims = yes display_espionage_operations = no color = { value = rgb { 255 255 255 0 } condition = { always = yes } custom_tooltip = "WAR_MODE_NO_WAR" } } test2 = { icon = "GFX_map_mode_war" enable_terra_incognita = yes can_change_point_of_view = yes display_claims = yes display_espionage_operations = no color = { value = rgb { 255 255 255 0 } condition = { always = yes } custom_tooltip = "WAR_MODE_NO_WAR" } }

test1,test2というマップモードを新たに追加しました。
この状態でもう一度ゲームを起動してみましょう。
以下の画像を見てください。


ボタンがどんどん後ろに追加されているのですが、
3つ目のボタンが見切れてしまっています。
これより右はゲームのウィンドウの外になるので、
仮に4つ目を作ってもボタンを押すことは不可能なことがわかります。
7.インターフェース定義を修正する(その1)
複数のマップモードを作る場合はインターフェース定義を修正しましょう。


Stellarisのインストールディレクトリから、ファイルをコピーしてください。
ファイル名は変更せずに、元のファイル名のままで配置をしてください。

・コピー元
(Stellarisのインストールフォルダ)\interface\main_bottom.gui

・コピー先
C:\Users\(ユーザー名)\Documents\Paradox Interactive\Stellaris\mod\(MODのディレクトリ名)
└interface
 └main_bottom.gui ← ここにコピーする

コピーが終わったら、コピー先のファイルを
テキストエディタで開き、以下の記述を探してください。

# Map Modes containerWindowType = { name = "mapmodes" size = { width = 240 height = 100 } position = { x = -277 y = -136 } orientation = lower_right #verticalScrollBar = "right_vertical_slider" #background = { # name = "background" # spriteType = "GFX_tiles_frame" #} gridBoxType = { name = "map_modes" slotSize = { width = 34 height = 34 } max_slots_horizontal = 12 format = "LOWER_LEFT" orientation = "LOWER_LEFT" } }

「max_slots_horizontal = 12」の部分を「max_slots_horizontal = 6」に変更し、
ゲーム上での表示を確認してみてください。
この数字は、1列に何個までマップモードを並べるかを指定されています。
この数を超えた分が、上の列に繰り上がって表示されていることがわかるはずです。

ちなみに「*.gui」というファイルだけは、
ゲーム起動中に変更内容をリアルタイムに反映し直すことができます。

半角/全角キーでコンソールを表示させたら、max_slots_horizontalの値を変更し、
以下のコマンドを入力すると変化がわかると思います。
reload main_bottom.gui

例として、私の自作Modを導入した状態でmax_slots_horizontalを
変更した時の変化を貼っておきます。


とりあえず増やした分が、全部入りきるように数値を弄りましょう。
8.2列以上にした時の弊害
さて、2列になったのでこれで解決…といいたいところですが、
2列にしたことで新たな問題が発生します。



ご覧の通り、戦争時の表示がマップモードと重なってしまいました。
こうなるともう全体的に表示を上にずらすしか手がない状況となります。
一旦以下の方針で対応できないかどうか試してみましょう。

9.インターフェース定義を修正する(その2)
ずらすといっても、どのファイルを直せば良いのでしょうか。
Stellarisにはその辺を確認するための便利なコマンドが用意されています。

以下のコマンドを入力してみてください。
guibounds

マウスカーソルを銀河コミュニティに合わせると、
普段のツールチップに加え、ファイル名と行番号の表示されたツールチップが表示されているのがわかるかと思います。



Stellarisのインストールディレクトリから、ファイルをコピーしてください。
ファイル名は変更せずに、元のファイル名のままで配置をしてください。

・コピー元
(Stellarisのインストールフォルダ)\interface\galactic_community_view.gui

・コピー先
C:\Users\(ユーザー名)\Documents\Paradox Interactive\Stellaris\mod\(MODのディレクトリ名)
└interface
 └galactic_community_view.gui ← ここにコピーする

コピーが終わったら、コピー先のファイルを
テキストエディタで開き、ツールチップに記載されている行数辺りを確認してみましょう。

# Button in the lower right of the main view, to open the Galactic Community containerWindowType = { name = "galactic_community_button_window" position = { x=-168 y=72 } orientation = upper_right buttonType = { name = "galactic_community_button" spriteType = "GFX_galactic_community_button" position = { x= 0 y = 0 } } iconType = { name = "unread_proposals_icon" spriteType = "GFX_unread_bg" position = { x= -6 y = -6 } alwaysTransparent = yes } instantTextBoxType = { name = "unread_proposals_text" font = "cg_16b" maxWidth = 30 maxHeight = 20 position = { x= -4 y = 3 } format = center text = "20" } instantTextBoxType = { name = "days_until_vote_text" font = "cg_16b" maxWidth = 30 maxHeight = 20 position = { x= 18 y = 40 } format = center text = "20" } ### The visibility needs to be set by this in Code, like the other elements iconType = { name = "vote_balance_progressbar_bg" spriteType = "GFX_vote_balance_supporting_bg" position = { x= 3 y = 55 } } iconType = { name = "vote_balance_supporting_dot" spriteType = "GFX_vote_balance_supporting_dot" position = { x= 7 y = 58 } } iconType = { name = "vote_balance_opposing_dot" spriteType = "GFX_vote_balance_opposing_dot" position = { x= 51 y = 59 } } iconType = { name = "vote_balance_progressbar" spriteType = "GFX_vote_balance_small_progressbar" position = { x= 17 y = 61 } } }

各項目の意味については説明を省略します。詳しくは以下URLを確認してください。
https://stellaris.paradoxwikis.com/Interface_modding

基本的には、「containerWindowType」で囲まれた部分が
表示したい項目1セット分だと思ってください。
直すべきは、最初の「position」と「orientation」になります。

試しにpositionの数字の部分を変更してみましょう。
containerWindowType = { name = "galactic_community_button_window" position = { x=-150 y=100 } orientation = upper_right

変更したら、コンソールコマンドでゲーム画面に反映します
reload galactic_community_view.gui


ちょっと左下にずれて、アウトライナーと重なりましたね。

positionのxは横の座標、yは縦の座標を示しています。
orientationは、xとyがそれぞれ0,0となる起点の位置を示しています。
orientation = upper_rightの場合、親要素の右上部分を起点と見なすことになるのですが、
今回のケースでは、親要素はゲームウィンドウ全体になるので、
ゲームウィンドウの右上部分を起点として、左に150、下に100移動した場所に
銀河コミュニティのアイコンが表示されるようになったわけです。

銀河コミュニティのアイコンは邪魔なので、マップモードの左の辺りに移動しちゃいましょう。
# Button in the lower right of the main view, to open the Galactic Community containerWindowType = { name = "galactic_community_button_window" position = { x=-460 y=-74 } orientation = lower_right

ゲームのウィンドウの右下を起点として、左に460、上に74進んだ位置に描画するように指定しました。
コンソールコマンドで画面に反映すると、無事移動されたことが確認できました。
reload galactic_community_view.gui

10.インターフェース定義を修正する(その3)
他のインターフェース定義も同じ要領で直しておきましょう。
この辺り、GUIを何処に移動するかなどは人によって異なるので割愛します。
ちなみに私が他に修正を入れたインターフェースファイルは以下となります。

  • alliance_view.gui:連邦のアイコン。銀河コミュニティと同じく邪魔なので下に移動した
  • outliner.gui:アウトライナー。銀河コミュニティのアイコンが消えて空いた分上に移動した
  • waroverview.gui:戦争の表示部分。アウトライナーと同様に上に移動した



マップモードを単独追加したいだけなら、ここまででガイドとしては終了です。
実際に表示されるマップを確認し、思った条件の通りに動いているかテストしましょう。
11.(以下蛇足)斜め上な事をする場合
さて、本当はガイドとしては既に終了しているはずなのですが、蛇足として紹介します。

私の自作Mod「帝国マップを見やすくしたい」は、各国家を125色で塗り分けています。
https://steamproxy.net/sharedfiles/filedetails/?id=2810645667

恐らく今までのガイドの説明だけだとこれを実現するのは難しいのではないかと思います。
少なくとも私にはやり方は思いつけませんでした。

苦肉の策として、各国家に事前に識別用のパラメータを埋め込むという対応を行っています。
バグの温床になりやすいのであまりオススメはしませんが、
具体的にどう実現したかを以下、簡単に説明します。
※蛇足なので以降は細かい解説はしません。
12.国家作成時のイベントを記述する
まず、国家生成時にパラメータを仕込みたいので、
国家生成時に呼び出されるイベントを作成します。


以下のファイルを作成しましょう。
C:\Users\(ユーザー名)\Documents\Paradox Interactive\Stellaris\mod\(MODのディレクトリ名)
├common
│├on_actions
││└(mod名)_on_actions.txt ← これを作る
│├scripted_effects
││└(mod名)_scripted_effects.txt ← これを作る
│└scripted_triggers
│ └(mod名)_scripted_triggers.txt ← これを作る
└events
 └(mod名)_events.txt ← これを作る

# (mod名)_on_actions.txt ####################################### # ゲーム開始時のイベント ####################################### # Triggers when pressing begin in the intro window # This = country to press begin on_press_begin = { events = { custom_map.1 } } ####################################### # 国家生成時のイベント ####################################### # A country is created via create_country or create_rebels # This = created country # From = root of context where create_country/create_rebels happens on_country_created = { events = { custom_map.2 } }

# (mod名)_events.txt namespace = custom_map ########################################################### # 全ての国家について、帝国マップ用のパラメータを設定する ########################################################### country_event = { id = custom_map.1 hide_window = yes is_triggered_only = yes immediate = { # 全パラメータを一旦初期化 every_country = { custom_map_mode_clear_paramaters = yes } # 帝国マップ用パラメータの付与 every_country = { limit = { custom_map_mode_is_target_country = yes } custom_map_mode_add_country_number = yes } } } ########################################################### # 対象の国家について、帝国マップ用のパラメータを設定する ########################################################### country_event = { id = custom_map.2 hide_window = yes is_triggered_only = yes trigger = { custom_map_mode_is_target_country = yes } immediate = { custom_map_mode_add_country_number = yes } }

# (mod名)_scripted_triggers.txt ################################################# # 対象国家かどうかをチェックする # SCOPE: COUNTRY ################################################# custom_map_mode_is_target_country = { OR = { is_country_type = default is_country_type = fallen_empire is_country_type = awakened_fallen_empire is_country_type = caravaneer_home is_country_type = dormant_marauders is_country_type = ruined_marauders is_country_type = awakened_marauders is_country_type = swarm is_country_type = extradimensional is_country_type = extradimensional_2 is_country_type = extradimensional_3 is_country_type = ai_empire is_primitive = yes } is_pirate = no }

# (mod名)_scripted_effects.txt ################################################# # 埋め込みパラメータを削除する # SCOPE: COUNTRY ################################################# custom_map_mode_clear_paramaters = { if = { limit = { exists = event_target:custom_map_last_country } clear_global_event_target = custom_map_last_country } # 帝国マップ用のパラメータの削除 if = { limit = { is_variable_set = custom_map_country_number } clear_variable = custom_map_country_number } # 同盟マップ用のパラメータの削除 if = { limit = { is_variable_set = custom_map_alliance_number } clear_variable = custom_map_alliance_number } } ################################################# # 帝国マップ用のパラメータ(custom_map_country_number)を付与する # custom_map_country_numberは0~124までの数字を各国に順番につけていく。 # 125を越える場合は0に戻る。 # SCOPE: COUNTRY ################################################# custom_map_mode_add_country_number = { if = { limit = { not = { is_variable_set = custom_map_country_number } } if = { limit = { exists = event_target:custom_map_last_country event_target:custom_map_last_country = { is_variable_set = custom_map_country_number } } set_variable = { which = custom_map_country_number value = event_target:custom_map_last_country.custom_map_country_number } change_variable = { which = custom_map_country_number value = 1 } modulo_variable = { which = custom_map_country_number value = 125 } save_global_event_target_as = custom_map_last_country } else = { set_variable = { which = custom_map_country_number value = 0 } save_global_event_target_as = custom_map_last_country } } }

set_variableでcustom_map_country_numberというパラメータを仕込みました。
125パターンに分けたかったので、change_variableで1足して、
modulo_variableで125で割った時の余りを求めることで、
各国に0~124の値を入れ込んでいます。


そして、マップモードの定義では、以下のような記載をしています。

C:\Users\(ユーザー名)\Documents\Paradox Interactive\Stellaris\mod\(MODのディレクトリ名)
└common
 └map_modes
  └(mod名)_map_modes.txt

########################################################### # 帝国マップ ########################################################### custom_map_empire_mode = { icon = "GFX_map_mode_default" enable_terra_incognita = yes can_change_point_of_view = no color = { value = rgb { 255 255 255 0 } condition = { check_variable = { which = custom_map_country_number value = 0 } } hardcoded_tooltip = country } color = { value = rgb { 0 0 255 0 } condition = { check_variable = { which = custom_map_country_number value = 1 } } hardcoded_tooltip = country } color = { value = rgb { 0 64 192 0 } condition = { check_variable = { which = custom_map_country_number value = 2 } } hardcoded_tooltip = country } # ~ 中略 ~ color = { value = rgb { 255 192 255 0 } condition = { check_variable = { which = custom_map_country_number value = 123 } } hardcoded_tooltip = country } color = { value = rgb { 255 255 192 0 } condition = { check_variable = { which = custom_map_country_number value = 124 } } hardcoded_tooltip = country } color = { value = country condition = { always = yes } hardcoded_tooltip = country }

はい。地獄の力技プレイです。やばいですね。
13.布告にもイベントを仕込む
上記だけだと、Mod導入前のセーブデータにはパラメータが仕込めません。
そこで、布告から無理やりパラメータを仕込めるようにしておきましょう。



C:\Users\(ユーザー名)\Documents\Paradox Interactive\Stellaris\mod\(MODのディレクトリ名)
└common
 ├edicts
 │└(mod名)_edicts.txt
 └localisation
  └(MOD名)_l_japanese.yml

# (mod名)_edicts.txt ########################## # 布告メニュー定義 ########################## custom_map_mode_menu = { length = 0 icon = "GFX_research_icon" potential = { is_ai = no } effect = { hidden_effect = { country_event = { id = custom_map.1 } } } ai_weight = { weight = 0 } }

l_japanese: ########################## # 布告 ########################## edict_custom_map_mode_menu:0 "マップモード用パラメータの付与" edict_custom_map_mode_menu_desc:0 "同盟マップ、帝国マップ用のパラメータを再度付与しなおします。色づけが上手くいってない時に利用してください。"

これで布告からもパラメータの紐付けができるはずです。

あとは頑張って仕込んだパラメータを使ってマップモードを作っていきましょう。

以上です。