Stellaris

Stellaris

Not enough ratings
【Stellaris 3.3.2】ポートレート&種族の作り方メモ
By fatal_errorjp
このガイドは古いので、以下リンク先の3.8.2向けのガイドを見るようにしてください。
https://steamhost.cn/steamcommunity_com/sharedfiles/filedetails/?id=2982605349

------
本ガイドは、Stellarisで新規種族用のポートレート定義(D-man Portraits)を
作成した際に自分なりに調べた情報のまとめとなります

静止画像を使うことが前提となっているため
アニメーションをするようなポートレートの作成には対応していません

また、日本語化MODが入っている環境化であることも前提で記載しています
入ってないと日本語部分が文字化けしたりするかもしれません

その点ご了承ください
   
Award
Favorite
Favorited
Unfavorite
作成にあたって必要なもの
最終的には画像のような項目を揃えていく必要があります
青で塗りつぶされているものは必須、赤射線のものは任意です

素材としては以下が必要になります

ポートレートとして追加したい静止画像(*.dds)
横 x 縦 = 472 x 324の大きさで用意してください
ddsというファイル形式には、フリーソフトであればpaint.netというソフトが対応しています

音声ファイル(*.wav)
任意です。AI帝国を表示した時に音声も欲しい場合には必須となります
真空波動研Liteというフリーソフトの表記で言う、以下の内容であれば問題ないようです
PCM 44.10kHz 16Bit 2ch 1411.20kb/s

A.I.VOICEで作成した音源を使いたい場合は、以下のようにすると良いでしょう
1. A.I.VOICEの設定を以下に設定し、必要な内容を喋らせて保存する
・WAVE 44100Hz 16bit PCM

2. ffmpegにて、Stellarisに準拠した音声データに変換する。以下はコマンドの例
・ffmpeg -i (A.I.VOICEで出力したwavファイル) -acodec pcm_s16le -ac 2 -ar 44100 (変換後のファイル名)
1. MOD作成用のフォルダを生成する
Stellarisのランチャーから自動生成できるので、その機能を活用しましょう

1. Stellarisのランチャーを起動する


2. ランチャーの左メニューの、「インストール済みのすべてのMOD」をクリックする


3. 画面右上の「MODをアップロードする」を押す

4. 「MODを作成する」ボタンを押す


5. 以下の内容を入力して、「OK」ボタンを押す

  • 名称: MODの名前を入力する。日本語も可
  • バージョン: このMODのバージョン。半角英数のみ
  • ディレクトリ: MOD作成用のディレクトリ名。半角英数記号のみ
  • タグ: WorkshopでMOD検索する時に使うタグにチェック
入力例)
  • 名称: d-man portraits
  • バージョン: 1.0.0
  • ディレクトリ: mod/d-man_portraits
  • タグ: Graphics, Leaders, Speciesにチェック
ここまでの操作をすることで、以下のディレクトリが作成されます。
C:\Users\(ユーザー名)\Documents\Paradox Interactive\Stellaris\mod\(5.のディレクトリ名)
これ以降の作業は、原則このディレクトリ以下を基準として記載していきます。

「MODを作成する」領域を作るために、「MODをアップロードする」ボタンを
押さないといけないのは正直意味不明なので
この辺の導線については今後なんとかして欲しいですね…。
2. 素材を所定のパスに配置する
MOD作成用のフォルダに、素材を配置しましょう


厳密に命名ルールが決められているわけではありませんが
公式のファイルの配置ルールに合わせてお作法を考えると
以下のような構成にするのが無難かと思います
C:\Users\(ユーザー名)\Documents\Paradox Interactive\Stellaris\mod\(MODのディレクトリ名)
├gfx
│└ models
│ └portraits
│  └(種族名)
│   ├(種族名)_(ポトレ)-(通し番号).dds
│   ├...省略
│   └(種族名)_(ポトレ)-(通し番号).dds
└sound
 └portrait
  └(種族名)
   ├(種族名)_(ポトレ)-(通し番号).wav
   ├...省略
   └(種族名)_(ポトレ)-(通し番号).wav

(種族名)や(ポトレ)と書いている部分は
作りたい種族やポトレに合わせて半角英数で自由に決めてください
例えば「琴葉姉妹」種族の「葵ちゃん」のポトレの場合は
・kotonoha_aoi-01.dds
・kotonoha_aoi-02.dds
のようにファイル名を決めていくと良いのではないかと思います
3. 音声定義を作成する(※任意)
音声素材を入れている場合は、音声定義を作成しましょう


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

テキストエディタを開き、音声の定義を記述していきましょう
以下はD言語くんの定義を作成した時のサンプルです
保存する際の文字コードはUTF-8 BOMなしを指定してください

########################################################### # ポートレート毎の挨拶時の音声設定を定義する ########################################################### # D言語くん種族用挨拶音声定義 category = { name = "Effects" soundeffects = { d-man_portrait_sound_red d-man_portrait_sound_green d-man_portrait_sound_blue d-man_portrait_sound_cyan d-man_portrait_sound_magenta d-man_portrait_sound_yellow } } ## D言語君(赤色) soundeffect = { name = d-man_portrait_sound_red sounds = { sound = d-man_portrait_sound_01 sound = d-man_portrait_sound_02 sound = d-man_portrait_sound_03 } volume = 0.30 } ## D言語君(緑色) soundeffect = { name = d-man_portrait_sound_green sounds = { sound = d-man_portrait_sound_01 sound = d-man_portrait_sound_02 sound = d-man_portrait_sound_03 } volume = 0.30 } ## D言語君(青色) soundeffect = { name = d-man_portrait_sound_blue sounds = { sound = d-man_portrait_sound_01 sound = d-man_portrait_sound_02 sound = d-man_portrait_sound_03 } volume = 0.30 } ## D言語君(シアン) soundeffect = { name = d-man_portrait_sound_cyan sounds = { sound = d-man_portrait_sound_01 sound = d-man_portrait_sound_02 sound = d-man_portrait_sound_03 } volume = 0.30 } ## D言語君(マゼンタ) soundeffect = { name = d-man_portrait_sound_magenta sounds = { sound = d-man_portrait_sound_01 sound = d-man_portrait_sound_02 sound = d-man_portrait_sound_03 } volume = 0.30 } ## D言語君(黄色) soundeffect = { name = d-man_portrait_sound_yellow sounds = { sound = d-man_portrait_sound_01 sound = d-man_portrait_sound_02 sound = d-man_portrait_sound_03 } volume = 0.30 } ## 音声ファイル定義 ## 色毎の種族で変更も可能だが、今回は使い回す sound = { name = "d-man_portrait_sound_01" file = "d-man-01.wav" } sound = { name = "d-man_portrait_sound_02" file = "d-man-02.wav" } sound = { name = "d-man_portrait_sound_03" file = "d-man-03.wav" }

「soundeffect - sound - 音声素材」と言った流れで
紐付けされていることがわかるかと思います

nameは任意で基本的にOKですが、ポートレートの定義と紐付ける際に
soundeffectのnameを書くようになるので、忘れないようにしましょう

D言語くんの場合は、色単位でポートレートをわけているので、
nameに色をつけるようにしておきました
4. ポートレート定義を作成する
続いてポートレート定義を作成します


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

テキストエディタを開き、ポートレートの定義を記述していきましょう
以下はD言語くんの定義を作成した時のサンプルです
保存する際の文字コードはUTF-8 BOMなしを指定してください

############################################################## # D言語くん種族用のポートレート定義 # 本ポートレートを参照する種族の定義は以下に記載しています # common\species_classes\d-man.txt ############################################################## # 画像、音声ファイルとのリンク設定 portraits = { d-man_red = { texturefile = "gfx/models/portraits/d-man/d-man-red.dds" greeting_sound = "d-man_portrait_sound_red" } d-man_green = { texturefile = "gfx/models/portraits/d-man/d-man-green.dds" greeting_sound = "d-man_portrait_sound_green" } d-man_blue = { texturefile = "gfx/models/portraits/d-man/d-man-blue.dds" greeting_sound = "d-man_portrait_sound_blue" } d-man_cyan = { texturefile = "gfx/models/portraits/d-man/d-man-cyan.dds" greeting_sound = "d-man_portrait_sound_cyan" } d-man_magenta = { texturefile = "gfx/models/portraits/d-man/d-man-magenta.dds" greeting_sound = "d-man_portrait_sound_magenta" } d-man_yellow = { texturefile = "gfx/models/portraits/d-man/d-man-yellow.dds" greeting_sound = "d-man_portrait_sound_yellow" } } # 各場面別のポートレート portrait_groups = { # D言語君(有機生命) 単色のみ d-man-biological-01 = { # デフォルト default = d-man_red # 帝国作成時 game_setup = { add = { trigger = { ruler = { OR = { gender = male gender = indeterminable } } } portraits = { d-man_red } } add = { trigger = { ruler = { OR = { gender = female gender = indeterminable } } } portraits = { d-man_red } } } # 汎用 species = { add = { trigger = { exists = species NOT = { species = { species_gender = female } } } portraits = { d-man_red } } add = { trigger = { exists = species NOT = { species = { species_gender = male } } } portraits = { d-man_red } } } # 惑星上のPOP pop = { add = { trigger = { NOT = { species = { species_gender = female } } } portraits = { d-man_red } } add = { trigger = { NOT = { species = { species_gender = male } } } portraits = { d-man_red } } } #リーダー leader = { add = { trigger = { OR = { gender = male gender = indeterminable } } portraits = { d-man_red } } add = { trigger = { OR = { gender = female gender = indeterminable } } portraits = { d-man_red } } } # 国家元首 ruler = { add = { trigger = { OR = { gender = male gender = indeterminable } } portraits = { d-man_red } } add = { trigger = { OR = { gender = female gender = indeterminable } } portraits = { d-man_red } } } } # D言語君(有機生命) 6色カラー d-man-biological-02 = { # デフォルト default = d-man_red # 帝国作成時 game_setup = { add = { trigger = { ruler = { OR = { gender = male gender = indeterminable } } } portraits = { d-man_red d-man_green d-man_blue } } add = { trigger = { ruler = { OR = { gender = female gender = indeterminable } } } portraits = { d-man_cyan d-man_magenta d-man_yellow } } } # 汎用 species = { add = { trigger = { exists = species NOT = { species = { species_gender = female } } } portraits = { d-man_red d-man_green d-man_blue } } add = { trigger = { exists = species NOT = { species = { species_gender = male } } } portraits = { d-man_cyan d-man_magenta d-man_yellow } } } # 惑星上のPOP pop = { add = { trigger = { NOT = { species = { species_gender = female } } } portraits = { d-man_red d-man_green d-man_blue } } add = { trigger = { NOT = { species = { species_gender = male } } } portraits = { d-man_cyan d-man_magenta d-man_yellow } } } #リーダー leader = { add = { trigger = { OR = { gender = male gender = indeterminable } } portraits = { d-man_red d-man_green d-man_blue } } add = { trigger = { OR = { gender = female gender = indeterminable } } portraits = { d-man_cyan d-man_magenta d-man_yellow } } } # 国家元首 ruler = { add = { trigger = { OR = { gender = male gender = indeterminable } } portraits = { d-man_red d-man_green d-man_blue } } add = { trigger = { OR = { gender = female gender = indeterminable } } portraits = { d-man_cyan d-man_magenta d-man_yellow } } } } # D言語君(機械知性) 単色のみ d-man-machine-01 = { # d-man-biological-01と中身は同じなので省略 } # D言語君(機械知性) 6色カラー d-man-machine-02 = { # d-man-biological-02と中身は同じなので省略 } # D言語君(岩石生命) 単色のみ d-man-lithoid-01 = { # d-man-biological-01と中身は同じなので省略 } # D言語君(岩石生命) 6色カラー d-man-lithoid-02 = { # d-man-biological-02と中身は同じなので省略 }

portraitsにて、画像素材及び音声素材との紐付けをしています
性別やスキルに応じてどのポートレートを使えるかの条件を
portrait_groupsの中に記述していきます

赤色単色だけの定義についてはここまで条件を細かく設定しなくてもよさそうですが
一応下手に弄りたくなかったので、3.3.2の公式の定義を参考にそのままにしています

また、同じ画像素材で有機生命、機械知性、岩石生命と種族を分ける場合は
条件が同じでも必ずこのポートレート定義は分けて作るようにしてください
この定義を使い回すと、以下の動画のように意図しない挙動を起こします
5. 種族定義を作成する
続いて種族定義を作成します


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

テキストエディタを開き、種族の定義を記述していきましょう
以下はD言語くんの定義を作成した時のサンプルです
保存する際の文字コードはUTF-8 BOMなしを指定してください

############################################################## # D言語くん種族用の定義 ############################################################## # D言語くん種族(有機種族) d-man-biologicals = { # 種別 # BIOLOGICAL:有機種族 # MACHINE:機械知性 # ROBOT:ロボティクス # LITHOID:岩石種族 # PRESAPIENT:準知性 # OTHER:その他 archetype = BIOLOGICAL # 権限の設定 # 機械知性は選択不可 possible = { authority = { NOT = { value = auth_machine_intelligence text = SPECIES_CLASS_MUST_NOT_USE_MACHINE_INTELLIGENCE } } } # ポートレート portraits = { "d-man-biological-01" "d-man-biological-02" } # ほかの設定は既存種族のものを使い回す graphical_culture = mammalian_01 move_pop_sound_effect = "moving_pop_confirmation" } # D言語くん種族(機械知性) d-man-machines = { # 種別 # BIOLOGICAL:有機種族 # MACHINE:機械知性 # ROBOT:ロボティクス # LITHOID:岩石種族 # PRESAPIENT:準知性 # OTHER:その他 archetype = MACHINE # 機械知性はDLC(シンセティック・ドーン)が必須 playable = { host_has_dlc = "Synthetic Dawn Story Pack" } randomized = { host_has_dlc = "Synthetic Dawn Story Pack" NOT = { has_global_flag = game_started } } # 権限の設定 # 機械知性のみ設定可 possible = { authority = { OR = { value = auth_machine_intelligence text = SPECIES_CLASS_MUST_USE_MACHINE_INTELLIGENCE } } } possible_secondary = { always = no text = SECONDARY_SPECIES_CLASS_INVALID } # 性別:オリジナルの機械知性だとなしだが、自由度を増やしたいので敢えて外しておく # gender = no # 居住特性の選択:なし use_climate_preference = no # 種族の改造時のポートレートの変更:あり portrait_modding = yes # 雇用時のリーダーの年齢 leader_age_min = 2 leader_age_max = 10 # ポートレート portraits = { "d-man-machine-01" "d-man-machine-02" } # ほかの設定は既存種族のものを使い回す graphical_culture = mammalian_01 move_pop_sound_effect = "robot_pops_move" resources = {} } # D言語くん種族(岩石種族) d-man-lithoids = { # 種別 # BIOLOGICAL:有機種族 # MACHINE:機械知性 # ROBOT:ロボティクス # LITHOID:岩石種族 # PRESAPIENT:準知性 # OTHER:その他 archetype = LITHOID # 権限の設定 # 機械知性は選択不可 playable = { has_lithoids = yes } possible = { authority = { NOT = { value = auth_machine_intelligence text = SPECIES_CLASS_MUST_NOT_USE_MACHINE_INTELLIGENCE } } } # ランダム帝国の設定 # 岩石種族として登録 randomized = { has_lithoids = yes } # デフォルト種族特性「岩石」 trait = "trait_lithoid" # ポートレート portraits = { "d-man-lithoid-01" "d-man-lithoid-02" } # ほかの設定は既存種族のものを使い回す graphical_culture = lithoid_01 move_pop_sound_effect = "reptilian_pops_move" resources = {} }

各内容の意味はコメント行を参考にしてください
「portraits =」の記述で、ポートレート定義との紐付けを行っています
基本的には記述をそのまま使い回してもらうだけで大丈夫なはずです

正直「move_pop_sound_effect」は意味がよくわかってないです
単語から類推される内容的に考えて、静止画像なら別にいらないのでは
という気がしています…

また、randomized = noにしていない場合は、後述のランダム帝国定義の作成が必須となります
6. ランダム帝国定義を作成する(※任意)
種族定義にて、randomized = noにしていない場合は、ランダム帝国定義を作成します
※ゲーム開始時にランダム生成される帝国の名前や星系名を定義するためのファイルです


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

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

############################################################## # ランダム生成される帝国名用の定義 # name : 種族名 # plural : 種族名(複数形) # home_planet : 惑星名 # home_system : 恒星名 # name_list : ネームリスト…思いつかないので公式のHUM1を使い回し ############################################################## #最大全角6文字 ### D言語くん種族(有機種族) d-man-biologicals = { d-man1 = { name = "D言語くん" plural = "D言語くん" home_planet = "D Lang" home_system = "DMD" name_list = "HUM1" } d-man2 = { name = "D言語くん" plural = "D言語くん" home_planet = "D" home_system = "GDC" name_list = "HUM1" } d-man3 = { name = "D言語くん" plural = "D言語くん" home_planet = "D-man" home_system = "LDC" name_list = "HUM1" } d-man4 = { name = "D言語くん" plural = "D言語くん" home_planet = "Go Lang" home_system = "gc" name_list = "HUM1" } d-man5 = { name = "D言語くん" plural = "D言語くん" home_planet = "Go" home_system = "Gccgo" name_list = "HUM1" } d-man6 = { name = "D言語くん" plural = "D言語くん" home_planet = "Lisp" home_system = "CLISP" name_list = "HUM1" } } # D言語くん種族(機械知性) d-man-machines = { d-man11 = { name = "D言語くん" plural = "D言語くん" home_planet = "D Lang" home_system = "DMD" name_list = "HUM1" } d-man12 = { name = "D言語くん" plural = "D言語くん" home_planet = "D" home_system = "GDC" name_list = "HUM1" } d-man13 = { name = "D言語くん" plural = "D言語くん" home_planet = "D-man" home_system = "LDC" name_list = "HUM1" } d-man14 = { name = "D言語くん" plural = "D言語くん" home_planet = "Go Lang" home_system = "gc" name_list = "HUM1" } d-man15 = { name = "D言語くん" plural = "D言語くん" home_planet = "Go" home_system = "Gccgo" name_list = "HUM1" } d-man16 = { name = "D言語くん" plural = "D言語くん" home_planet = "Lisp" home_system = "CLISP" name_list = "HUM1" } } # D言語くん種族(岩石種族) d-man-lithoids = { d-man21 = { name = "D言語くん" plural = "D言語くん" home_planet = "D Lang" home_system = "DMD" name_list = "HUM1" } d-man22 = { name = "D言語くん" plural = "D言語くん" home_planet = "D" home_system = "GDC" name_list = "HUM1" } d-man23 = { name = "D言語くん" plural = "D言語くん" home_planet = "D-man" home_system = "LDC" name_list = "HUM1" } d-man24 = { name = "D言語くん" plural = "D言語くん" home_planet = "Go Lang" home_system = "gc" name_list = "HUM1" } d-man25 = { name = "D言語くん" plural = "D言語くん" home_planet = "Go" home_system = "Gccgo" name_list = "HUM1" } d-man26 = { name = "D言語くん" plural = "D言語くん" home_planet = "Lisp" home_system = "CLISP" name_list = "HUM1" } }

d-man-biologicalsやd-man-machinesの部分は、種族定義と名前を一致させる必要があります
その中のd-man1やd-man21などの名前は任意で良いのですが
ランダム生成される際に数が少なかったり
名前が被ったりするとゲームが強制終了してしまうことがあるみたいです

1種族定義辺り最低6つ、名前を被らないようにして作れば
強制終了も滅多に起きなくなるのではないかと思います

name_listは今回は既存のを丸々使い回しているので、既存定義を指定しています
7. ネームリストを作成する
最後に、ネームリストを作成する


正直いうと、6.で既存のネームリストを使い回しているのに
なんでこれが必要になるのかよくわかってないです
が、ないとエラーログで怒られるので作成します

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

テキストエディタを開き、の定義を記述していきましょう
以下はD言語くんの定義を作成した時のサンプルです
保存する際の文字コードはUTF-8 BOMありを指定してください
なんでこのファイルはBOMが必要なんだ…

d-man-biologicals = { selectable = { always = no } ship_names = { corvette = { "アードヴァーク" "アクセンター" "以下略" } destroyer = { "アムステルダム" "オースティン" "以下略" } cruiser = { "ボリバル" "ブルシーロフ" "以下略" } battleship = { "ユリシーズ" "クセノポン" "以下略" } titan = { "エンタープライズ" "インヴィンシブル" "以下略" } colossus = { "ソル・インヴィクタス" "以下略" } juggernaut = { "アララト" "アクシズ・ムンディ" "以下略" } constructor = { "パシフィック" "アトランティック" "以下略" } colonizer = { "メイフラワー" "アバンダンス" "バウンティフル" "以下略" } sponsored_colonizer = { "メイフラワー" "アバンダンス" "バウンティフル" "以下略" } science = { "アルドリン" "アームストロング" "以下略" } transport = { "カウペンス" "ベローウッド" "以下略" } military_station_small = { "シタデル" "アルバコア" "以下略" } ion_cannon = { "ボンバード" "バリスタ" "以下略" } } fleet_names = { sequential_name = "第%C%艦隊" } army_names = { machine_defense = { sequential_name = "第%C%惑星防衛隊" } machine_assault_1 = { sequential_name = "第%C%遠征隊" } machine_assault_2 = { sequential_name = "第%C%遠征隊" } machine_assault_3 = { sequential_name = "第%C%遠征隊" } defense_army = { sequential_name = "第%C%惑星防衛隊" } assault_army = { sequential_name = "第%C%遠征隊" } slave_army = { sequential_name = "第%C%奉公ライフル隊" } clone_army = { sequential_name = "第%C%クローン軍" } undead_army = { sequential_name = "第%C%恐怖コマンド" } robotic_army = { sequential_name = "第%C%ハンターキラー軍団" } robotic_defense_army = { sequential_name = "第%C%地上防衛マトリクス" } psionic_army = { sequential_name = "第%C%超能力コマンド" } xenomorph_army = { sequential_name = "第%C%生体兵器師団" } gene_warrior_army = { random_names = { "SARC-A 「グラディエータース」" "SARC-B 「ウィンドウメイカース」" "以下略" } sequential_name = "第%C%生体工学戦隊" } occupation_army = { sequential_name = "第%C%守備軍隊" } robotic_occupation_army = { sequential_name = "第%C%機械化守備隊" } primitive_army = { sequential_name = "第%C%原始時代軍" } industrial_army = { sequential_name = "第%C%産業時代軍" } postatomic_army = { sequential_name = "第%C%後原子力時代軍" } } planet_names = { generic = { names = { "ニューエルサレム" "アンカー" "以下略" } } pc_desert = { names = { "ノヴァアラビア" "サハラ" "以下略" } } pc_arid = { names = { "レバノン" "タイヤ" "以下略" } } pc_tropical = { names = { "アマゾニア" "コンゴ" "以下略" } } pc_continental = { names = { "アルビオン" "アモーレ" "以下略" } } pc_gaia = { names = { "エデン" "エリジウム" "以下略" } } pc_ocean = { names = { "アトランティス" "オセアニア" "以下略" } } pc_tundra = { names = { "アイスランド" "カナダ" "以下略" } } pc_arctic = { names = { "スール" "アークティカ" "以下略" } } pc_savannah = { names = { } } pc_alpine = { names = { } } } character_names = { default = { first_names_male = { "ジョン" "ブライアン" "以下略" } first_names_female = { "オリビア" "エミリー" "以下略" } second_names = { "スミス" "ジョーンズ" "以下略" } regnal_first_names_male = { "アレキサンダー" "ウラジミール" "以下略" } regnal_first_names_female = { "テオドラ" "ファティマ" "以下略" } regnal_second_names = { "ハプスブルク" "ロマノフ" "以下略" } } } } d-man-machines = { # d-man-biologicalsと同じ内容のため省略 } d-man-lithoids = { # d-man-biologicalsと同じ内容のため省略 }

考えるのが面倒だったので既存の定義を丸々引っ張っています
d-man-biologicalsやd-man-machinesの部分は、種族定義と名前を一致させる必要があります
1種族に複数のネームリストを紐付ける場合は
d-man-biologicals1
d-man-biologicals2
のように後ろに数字を付与させた上で
「category="d-man-biologicals"」と指定してあげればいいようなのですが
ちゃんと検証していないです

「selectable = { always = no }」の部分は、新規で自作帝国を作成する時の
ネームリストにこのネームリストが載ることを抑制させる目的で記述しています
8. ローカライズする
一応これで動くようにはなったはずですが
ローカライズできてないのでローカライズ用のファイルを作成します

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

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

l_english: d-man-biologicals:0 "D言語くん(有機)" d-man-biologicals_desc:0 "プログラム言語の1つ、D言語のマスコットキャラクター。プログラム言語マスコット界隈の中では恐らく最も人気のあるマスコットキャラクターだと思われる" d-man-biologicals_plural:0 "D言語くん" d-man-biologicals_adj:0 "D言語くん" d-man-biologicals_insult_01:0 "クリーチャー" d-man-biologicals_insult_plural_01:0 "クリーチャー" d-man-biologicals_compliment_01:0 "高級言語" d-man-biologicals_compliment_plural_01:0 "高級言語" d-man-biologicals_spawn:0 "子供" d-man-biologicals_spawn_plural:0 "子供" d-man-biologicals_sound_01:0 "ノイズ" d-man-biologicals_sound_02:0 "ビープ音" d-man-biologicals_sound_03:0 "鳴き声" d-man-biologicals_sound_04:0 "声" d-man-biologicals_sound_05:0 "音" d-man-biologicals_organ:0 "空洞" d-man-biologicals_organ_plural:0 "空洞" d-man-biologicals_mouth:0 "空洞" d-man-biologicals_ear:0 "聴覚器官" d-man-biologicals_ear_plural:0 "聴覚器官" d-man-biologicals_hand:0 "手" d-man-biologicals_hand_plural:0 "手" d-man-biologicals_tooth:0 "空洞" d-man-biologicals_tooth_plural:0 "空洞" d-man-biologicals_fossil:0 "化石" d-man-biologicals_fossil_plural:0 "化石" d-man-biologicals_remnant:0 "骨格" d-man-biologicals_remnant_plural:0 "骨格" d-man-machines:0 "D言語くん(機械)" d-man-machines_desc:0 "プログラム言語の1つ、D言語のマスコットキャラクター。プログラム言語マスコット界隈の中では恐らく最も人気のあるマスコットキャラクターだと思われる" d-man-machines_plural:0 "D言語くん" d-man-machines_adj:0 "D言語くん" d-man-machines_insult_01:0 "クリーチャー" d-man-machines_insult_plural_01:0 "クリーチャー" d-man-machines_compliment_01:0 "高級言語" d-man-machines_compliment_plural_01:0 "高級言語" d-man-machines_spawn:0 "子供" d-man-machines_spawn_plural:0 "子供" d-man-machines_sound_01:0 "ノイズ" d-man-machines_sound_02:0 "ビープ音" d-man-machines_sound_03:0 "鳴き声" d-man-machines_sound_04:0 "声" d-man-machines_sound_05:0 "音" d-man-machines_organ:0 "空洞" d-man-machines_organ_plural:0 "空洞" d-man-machines_mouth:0 "空洞" d-man-machines_ear:0 "聴覚器官" d-man-machines_ear_plural:0 "聴覚器官" d-man-machines_hand:0 "手" d-man-machines_hand_plural:0 "手" d-man-machines_tooth:0 "空洞" d-man-machines_tooth_plural:0 "空洞" d-man-machines_fossil:0 "化石" d-man-machines_fossil_plural:0 "化石" d-man-machines_remnant:0 "骨格" d-man-machines_remnant_plural:0 "骨格" d-man-lithoids:0 "D言語くん(岩石)" d-man-lithoids_desc:0 "プログラム言語の1つ、D言語のマスコットキャラクター。プログラム言語マスコット界隈の中では恐らく最も人気のあるマスコットキャラクターだと思われる" d-man-lithoids_plural:0 "D言語くん" d-man-lithoids_adj:0 "D言語くん" d-man-lithoids_insult_01:0 "クリーチャー" d-man-lithoids_insult_plural_01:0 "クリーチャー" d-man-lithoids_compliment_01:0 "高級言語" d-man-lithoids_compliment_plural_01:0 "高級言語" d-man-lithoids_spawn:0 "子供" d-man-lithoids_spawn_plural:0 "子供" d-man-lithoids_sound_01:0 "ノイズ" d-man-lithoids_sound_02:0 "ビープ音" d-man-lithoids_sound_03:0 "鳴き声" d-man-lithoids_sound_04:0 "声" d-man-lithoids_sound_05:0 "音" d-man-lithoids_organ:0 "空洞" d-man-lithoids_organ_plural:0 "空洞" d-man-lithoids_mouth:0 "空洞" d-man-lithoids_ear:0 "聴覚器官" d-man-lithoids_ear_plural:0 "聴覚器官" d-man-lithoids_hand:0 "手" d-man-lithoids_hand_plural:0 "手" d-man-lithoids_tooth:0 "空洞" d-man-lithoids_tooth_plural:0 "空洞" d-man-lithoids_fossil:0 "化石" d-man-lithoids_fossil_plural:0 "化石" d-man-lithoids_remnant:0 "骨格" d-man-lithoids_remnant_plural:0 "骨格"

意味は上から順に以下の通り
  • (種族名):種族の名前
  • (種族名)_desc:種族の説明 ※何処で使ってるのかわからん
  • (種族名)_plural:種族の名前(複数形)
  • (種族名)_adj:種族の名前(形容詞)
  • (種族名)_insult_01:侮辱する時にその種族を揶揄する言葉。昆虫をバグと呼ぶなど。後ろの数字を増やして何個でも定義できる
  • (種族名)_insult_02
  • ...
  • (種族名)_insult_plural_01:(種族名)_insult_01に対する複数形
  • (種族名)_insult_plural_02:
  • ...
  • (種族名)_compliment_01:侮蔑とは逆に賞賛する時に使うらしい。後ろの数字を増やして何個でも定義できる
  • (種族名)_compliment_02
  • ...
  • (種族名)_compliment_plural_01:(種族名)_compliment_01に対する複数形
  • (種族名)_compliment_plural_02:
  • ...
  • (種族名)_spawn:その種族の子供を意味する言葉、蛙っぽいやつならオタマジャクシとか
  • (種族名)_spawn_plural:(種族名)_spawnの複数形
  • (種族名)_sound_01:よくわかってないので英語Wikiの以下原文ママを記載。機械知性への特有の侮蔑用語とかなのか…?
  • (種族名)_sound_02:"CLASS_sound_X" denotes descriptive noises (e.g. "stupid Robot, will you stop that beeping").
  • (種族名)_sound_03:こちらは01~05まで必ず書かないといけないとのこと
  • (種族名)_sound_04:
  • (種族名)_sound_05:
  • (種族名)_organ:種族の身体の一部を記載する。「胃が痛い」とかの表現の時に使うっぽくて、その場合は胃で良さそう
  • (種族名)_organ_plural:organの複数形
  • (種族名)_mouth:その種族が食物を摂取するための器官、人間で言う口に当たる部位を書く
  • (種族名)_ear:その種族が音を聴くための器官、人間で言う耳に当たる部位を書く
  • (種族名)_ear_plural:earの複数形
  • (種族名)_hand:その種族が物を拾うために使う部位、人間でいう手に当たる部位を書く
  • (種族名)_hand_plura:handの複数形
  • (種族名)_tooth:その種族が食物を細かくするための器官、人間で言う歯に当たる部位を書く
  • (種族名)_tooth_plural:toothの複数形
  • (種族名)_fossil:その種族があとから発掘などされた時に表現する物。化石とか残骸とか
  • (種族名)_fossil_plural:fossilの複数形
  • (種族名)_remnant:その種族のfossilとして残る物?骨格とか部品とか
  • (種族名)_remnant_plural:remnantの複数形

よくわからなかったら日本語化MODの定義を参考にすると良さそうです

今回はネームリストを自作の帝国の作成画面から除外するようにしていますが
もしそこに表示させたい場合は、そちらの定義も必要です

name_list_d-man-biologicals:0 "D言語くん(有機)" name_list_d-man-machines:0 "D言語くん(機械)" name_list_d-man-lithoids:0 "D言語くん(岩石)"

なお、拡張子ymlのファイルは、YAMLというファイル形式に則った記述をする必要があります
ただのテキストファイルではないです

具体的には「l_english:」のあとに記載している内容のインデントは全て揃えてください
うろ覚えだけど形式上スペースの数自体は何個でも良かったはず
スペース2個がYAMLでよく見るインデント数かな…
9. 動作確認
作成が無事に終わったら、動作確認をしましょう

StellarisのランチャーのプレイセットにこのMODを入れた上で
Stellarisを起動し、以下を確認すると良いでしょう

・帝国を新規作成する時の画面に、このMODで追加したい種族が表示されていること
・帝国を新規作成する時の画面に、ネームリストが意図通り表示されている/いないこと
・帝国を新規作成する時の画面に、リーダー等のポトレも問題なく表示されていること
・ランダム生成される帝国の帝国名や種族名、恒星名が正しく表示されていること
・ランダム生成される帝国をクリックした際に、挨拶用の音声が流れること
・エラーログ(C:\Users\(ユーザー名)\Documents\Paradox Interactive\Stellaris\logs\error.log)に、エラーが表示されていないこと

ランダム生成される帝国の確認は、普通にプレイすると面倒なので
コンソールコマンドを使うと良いです

communications:全帝国と通信が確立済となる
intel:全星系を調査済、常に見えている状態にする

以上
3.4系での変更点
ゲーム本体が日本語に公式に対応することとなった関係で、記述方法が変更となりました。
こちらに簡単にまとめています。
https://steamhost.cn/steamcommunity_com/sharedfiles/filedetails/?id=2808901059
3 Comments
fatal_errorjp  [author] 30 May, 2023 @ 2:48am 
3.8.2でまた変わったのでガイドを1から作り直しました。
https://steamhost.cn/steamcommunity_com/sharedfiles/filedetails/?id=2982605349
fatal_errorjp  [author] 17 May, 2022 @ 4:18am 
3.4系の日本語の公式対応に伴う変更点についてはこちらのガイドをご確認ください
https://steamhost.cn/steamcommunity_com/sharedfiles/filedetails/?id=2808901059
Ryusa 9 Apr, 2022 @ 6:26am 
Yes, this is very helpful!