Stellaris

Stellaris

Not enough ratings
[JP]艦船MODの基礎
By COLA
艦船変更・追加の基礎Tips
   
Award
Favorite
Favorited
Unfavorite
最初に
私的メモ帳andてきとーMOD講座。

stellaris2.1Ver

ぶっちゃけココをみるより上記の方法のほうがためになると思います。

MODのローカル化、MOD作成の基礎はM_Gamelinさんの偉大な遺産があるのでそちらを参照して下さい。
CGモデルやテクスチャ等に関してはLOBOさんのブログ[lobolabo.blogspot.jp]をぜひ。

質問などあればコメント欄にどうぞ。
艦船のファイル構成
気づいたことをダラダラ書き連ねてるので無駄知識多めデス


エクストラシップ(ヱルトリウムのような)艦船MODの必要最低限のファイル
 
\common
 \ship_sizes
    original_sizes.txt(船の基本能力の仕様)
 \section_templates
    original_section.txt(各セクションの設定)
 \component_templates
    original_thrusters.txt(スラスターの設定)
    original_reactors.txt(リアクターの設定)
\gfx
 \models
  \ships
   \original (ship_sizesで指定された艦船名(シップセットの場合はgraphical_cultureのID名))
    original_entities.asset (セクションへのpdxmeshの割当、locatorの設置位置情報etc)
    original_meshes.gfx (pdxmeshのmesh指定)
    original.mesh (meshファイル(CGモデル本体))
    original_diffuse.dds (テクスチャ ディフューズマップ)
    original_normal.dds (テクスチャ ノーマルマップ)
    original_specular.dds (テクスチャ スペキュラマップ)
\localisation
    original_I_english.yml (言語ファイル)

基本的にasset,gfx,txt等のファイル名はなんでも良いけど、他のMODのファイルと被る可能性もあるのでわかりやすく特徴的なものを。
以上の11ファイルが最低あれば船を追加できます。
(注:艦船建造のトリガーテクノロジーをすでにヴァニラにあるものにする場合のみ)


例えば
「設計画面の右側にある専用コンポーネントを追加したい」
「建設開放のトリガーをオリジナルのテクノロジーにしたい」
など、アレンジを加えていくと必要ファイルがドンドン増えていきます。
original_sizes.txt 概要
船の基本能力の仕様txt

基本は画像に書き込みました。でっかくして見て下さい。

original」というID名の船の仕様を書いてます。
このID名はあちこちで出てくるので簡単かつわかり易い名前を。

分かりづらいところは赤枠で囲みました。
以下が詳細説明。

  • ①modifier
     ここに艦船能力のプラスアルファを書き込める。

    パラメータ(add(+-)で加減算、mult(+-)で乗除算)
    ship_armor_add(mult)
    装甲
    ship_evasion_同上
    回避
    ship_shield_hp_同上
    シールド
    ship_hitpoints_同上
    ヒットポイント
    ship_speed_同上
    速度
    ship_weapon_range_同上
    攻撃距離
    ship_fire_rate_同上
    攻撃レイト
    ship_auto_repair_同上
    自動回復
    ship_shield_regen_同上
    シールド回復
    ship_tracking_同上
    追尾
    ship_weapon_damage
    武器ダメージ

     記載して無いパラメータも色々あります。
     パラメータによってaddがなかったりmultがなかったりも。addは無くても反映されるっぽい。

  • ②section_slots
     セクションの数。
     { "bow"= { locator = "part1" } }
     「一番最初のセクションはbowというグループです」という意味。これだけで閉じられてる
     ので、この場合はセクション1つしかない船。
      例えばセクションを3個にしたいのであれば
    { "bow" = { locator = "part1" } "mid" = { locator = "part2" } "strn" = { locator = "part3" }
     で、一番最初のセクションはbowグループ、二番めはmidグループ、三番めはstrnグループ。
     ここでのグループ名は後述のoriginal_section.txtで使います。
     (普通は前からBOW、MID、STERNで書くことが多い)

  • ③required_component_set
     設計画面の右側のコンポーネントスロットの設定。
     画像ではパワーコア、FTL、スラスター、センサー、戦闘コンピュータが装備できるようになっている。
     ヴァニラは基本この5つ。

     MODやオリジナルのコンポーネントのスロットを追加したければ
      required_component_set = "special_component_slot"
     等の行を追加する。
     special_component_slotの部分は好きなように書き換え。
     そして、そのコンポーネントの内容は

     /common
      /component_sets    special_component_sets.txt (コンポーネントスロットの指定
      /component_templates  special_utilities_roles.txt (コンポーネントの能力

     に記載しなければなりません。(さらにgfxでアイコンの画像指定したり・・・etc

     という具合にひとつの要素を増やすだけで手間がめちゃめちゃ増えます。



prerequisites = { "tech_original" }
この部分は複数でも可、例えば
prerequisites = { "tech_destroyers" "tech_starbase_5" }
とかでもオッケー。上記の場合、"駆逐艦"と"銀河要塞"のテクロノジーがないと建設できない。

ただしトリガーテクノロジーはcategory = { voidcraft }でないとダメ。
他のMODのオリジナルのテクノロジーを書いて、「互換あるぜ!」と言い張る事もできる。
ここのテクノロジーはゲームデータ内にその記述がないモノの場合、スルーされるだけデス。

緑の線から下は記述しなくても特に問題はない。
DLCアポカリプスについてくるタイタン級等、強力な艦船を制限するためのモノです。
is_designable = に関してはおもしろそうな事できそうなので追記しただけッス)


あとココにcost = の記述書いてコスト(建造必要鉱物)持たせることも可能。
後述のセクションにも個別にコストをかけることができる。(もちろん、かけないこともできる)
original_thrusters.txtとoriginal_reactors.txt 概要
2.0からはリアクターとスラスターはcommonフォルダのcomponent_templatesにきちんと

「このスラスター(リアクター)はこの船に使えますよ」

という紐づけ設定をしないと、反映されなくなりました。



分かりづらいかもしれませんが、
左側がoriginal_thrusters.txtの中身
右側がoriginal_reactors.txtの中身
です。

utility_component_template = で各コンポーネントの詳しい内容を記述していきます。
一つ一つのコンポーネントの記述を緑枠で囲んでます。
  • key:コンポーネントのID名
  • icon:アイコンの絵のID名
  • power:消費エネルギー
  • cost:建造必要鉱石
  • modifier:ship_sizeと同じ
  • prerequisites:造るのに必要なテクロノジー
  • component_set:ship_sizeのrequired_component_setで紐付けられた名前
  • size_restriction:このコンポーネントを使用できるship_sizeでの艦船のID名(複数指定可能)

スラスターやリアクターは一つのスロットで、テクノロジーを開放するに連れ新しい種類を選択できるようになるコンポーネントです。
そのような枠はupgrades_toで繋げる必要があります。
赤線で結んであるところがそうです。

アップグレード先の必要テクノロジーを先に覚えても元が開放されてないと当然先が開放されないので無意味に順番をごちゃごちゃにしないように。
upgrades_toの下にai_weightの記述がありますが、
AIはそのweightの大きい値のコンポを優先的に使用します。
なので最初のコンポをweight = 100とかにするとAIはずっと最初のコンポを優先的に使用します。


自分でスペシャルコンポーネント枠を作る時は、「このコンポ枠は(NSCのスペシャルコンポーネント枠のような)能力の方向性で選択できるようにしたい」とかあると思うので、その時はupgrades_toの記述をはずして下さい。
original_section.txt 概要
船のセクションの詳細。
セクションテンプレートを各グループ、艦船に紐付ける。



画像はoriginalという船のmidグループのセクションに

武器Sスロットが2つ
大中小の共用スロットが各1つ
ユーティリティスロットが1つ
コストが5000!?

という性能のテンプレートを追加している。


  • ship_sizes
     適応される艦船名(ship_sizes.txtでのID名)。
  • fits_on_slot
     適応されるセクショングループ名(original_sizes.txtで書いたグループ名)
  • entity
     後述するoriginal_entities.assetで紐付けるための名前
  • icon
     艦船設計のセクション選択画面で写す画像を紐付けるための名前
  • component_slot
     武器スロットの設定。
      ・slot_size 武器のサイズ (small,medium,large,point_defence,extra_large)
      ・slot_type スロットの種類 (weapon,strike_craft)
      ・locatorname ロケータの名前(武器位置情報のための名前)
  • ほにゃらら_utility_slots
     ジェネレータや装甲、シールド等を付けるためのスロット数の設定。(small,medium,large,aux)
  • cost
     建造に必要な鉱石

一つ一つのセクションの「 ship_section_template = 」が必要。
2つのセクショングループからなり、各グループに3つ選択肢があるなら
合計6個「 ship_section_template = 」を記述しないといけない。
original_entities.asset 概要
船の組み立て図 and 武器位置の設定 and 船に関する演出効果設定

おそらくコレが一番めんどくさいです。


船の構造
stellarisの船はブロック(セクション)構造です。
フレーム(枠組み)に各セクショングループをくっつけていく形になります。
そして各セクションには、それぞれ違うCGモデルが用意できます。

図のように一つのセクショングループだけめっちゃ離れてたり
逆に一箇所に重なってたりするようにもできます。
さらに各セクションに大きさや演出等を設定できます。
なので、例えば
「撃破された時に船首から船尾にかけて徐々に爆発していく」とか
「船首のライトだけ船が動いた時に色が変わる」とか
アイデアしだいで素晴らしい視覚的演出効果が得られます。

めんどくさいので私含めた大方のMODDERはやってないですけどネ

それに、くっつけた時、セクションごとに齟齬のないモデルを用意するのがメンドイので、
セクションを重ねて設置し、一番最初のセクションに船の全体モデルを置いて後のセクションは透明化する(空のモデル)
、というのが主流です。

ただ、こういうこともできるのでアイデアしだいでは面白いコトできそうなので書いときました。

全体的な記述の流れは以下の通りです。

################船の名前#####################
entity = { フレーム }

#####セクショングループ名#####
entity = { 一番目のセクショングループの1枠目 }
entity = { 一番目のセクショングループの2枠目 }
entity = { 一番目のセクショングループの・・・ }

#####セクショングループ名#####
entity = { 二番目のセクショングループの1枠目 }
entity = { 二番目のセクショングループの2枠目 }
entity = { 二番目のセクショングループの・・・ }

#####セクショングループ名#####
entity = { 三番目のセクショングループの1枠目 }
entity = { 三番目のセクショングループの2枠目 }
entity = { 三番目のセクショングループの・・・ }

#############################################
(注:####はみやすくするためのモノ。間に船の名前とか入れて区切ったりする)


で、このentityの中にそれぞれ大きさ(scale)や演出効果を設定できます。

各entityの中身はoriginal_section.txtでテンプレートを作ったセクションの紐付け設定
や、mesh(CGモデル)の紐付け設定が主な内容です。

演出とか武器位置とか気にしなければ、その紐付け設定だけでも動きます。


めんどくさい」のは主に演出効果や武器位置の設定なのです。


original_entities.asset フレームentityと撃破演出
さて、ここからは実際の書き方です。

演出効果は各entityに付けられるのですが、
フレームに環境音やビーコンライト、撃破演出
一番最後のセクションにエンジンエフェクト
というのが一般的みたいです。


なので、フレームentityに環境音、爆破演出を付けた例で解説していきます。


pdxmesh = 」でmesh指定です。「original_frame_mesh」を指定しています。ここではあくまで「こういう名前のファイルを使いますよ」と指示しただけで、実際のファイルの場所を指定する記述も書かなくてはなりません。後述のoriginal_meshes.gfxがそれにあたります。

赤線引いた所は上から"停止""移動""撃破"時の演出効果設定です。
nameはステータスの状態、animationはその時のアニメーションID。
基本的にこの2つはこのまま使って下さい。
animation_blend_timeというのは遷移にかかる時間ということです。
たとえば撃破された時の爆発演出を長くしたければ、state = { name = "death" の行のanimation_blend_timeを増やしてください。

start_event = { trigger_once = yes sound = { soundeffect = "amb_battleship_hum" } }
この行ではその状態の時の音の設定を書いてあります。環境音ってやつです。「ゴゴゴゴゴ」みたいな。自分で好きな音を鳴らしたいときはココを変えるのですが、音関係は若干めんどくさいのでヴァニラ音使ってる人多いです。

state = { name = "death" 以降は撃破された時の爆破演出です。
①は撃破後経過時間です。画像だと「HP0になったときから5.0秒後」ということです。
②は爆発する場所の位置設定のIDです。矢印の先であらためてposition以降の記述で位置をきめてます。positionの詳しい説明はセクションentityの解説でします。
③は爆発効果のCGモデル指定です。

赤線は引いてませんが、
sound = { soundeffect = ship_destroyed }
は爆発音です、この場合は4回鳴らしていますが、最後の2発はほぼ同時に聞こえるようにしてますね。音を重ねることで少しボリュームを持たせようとあがいてますね、これは。
音ファイル用意するのがメンドクサかったんでしょう、ッハッハッハ。
ちなみに完全に同時に鳴らそうとしても、一個しか反映されません。
なので微妙に時間をずらしています。

あと、ここの爆発モデルの個数なんですが、制限があるようです。画像ではロケータ5個
(locator設定がないものは自動的に( 0 0 0 )に位置される)
のモデル14個使ってますが、おそらく半分くらいしか反映されてません。
爆発CGをDLCのファイルから持ってきている記述がありますが("dreadnought_explosion_particle" DLCリヴァイアサン)、ない場合(ヴァニラ)はスルーされるだけでエラーとかにはなりません。

ここまで爆発について色々書きましたが、すごい大きい船でもない限りこんな細かいことは普通しないと思います。(えぇ…(困惑)

そして、フレームに各セクショングループをアタッチした記述が下記の画像です。

画像では4つのセクショングループをくっつけています。ただこのセクションアタッチの記述は公式でさえやっていません。(モデルにロケータ仕込んでる

セクションごとにCGモデルを用意してないヒトはこの記述は書かなくてオッケーです。
original_entities.asset セクションentity

セクションにエンジンエフェクト、ビーコンライトを付けてます。

まず
name = "original_mid_entity"
で、original_section.txtでセクションテンプレートからセクション内容を引っ張ってきています。紐付けられた名前を書いてください。
次に
pdxmesh = "original_mesh"
で、mesh指定です。

次に、フレームでもやりましたが上から"停止""移動""撃破"の演出効果設定です。
エンジンは停止時・移動時に違うCGモデルを使用してエンジンが発動してる演出を行ってます。
撃破時は必要ないので書かなくておk。

今回はmammalian_01_2_35_exhaustというヴァニラに入ってるモデルを使っています。
停止時 "mammalian_01_2_35_exhaust_idle_particle"
移動時 "mammalian_01_2_35_ship_exhaust_moving_particle"
CGモデルが違うことに注意してください。

このエンジンエフェクトやビーコンライト(画像の"ship_light_blue_effect")はヴァニラに様々なモデルがあります。(丸いもの、四角いもの、色違い等)
なので、シチュエーションにあったものを選んでください。(\gfx\particlesに色々ある)もちろん自分で用意するのもアリ!


次のlocator群は上記のCGモデルの位置情報を設定しています。
ロケータが埋め込んでないCGモデルだとこの作業が発生します。やらなくても良いんですが、その場合、全ての位置(この場合エンジンエフェクトと武器位置)が中心点( 0 0 0 )になってしまいます。

position = { 0 1.96 14.7 } rotation = { 180 0 0 } scale = 0.6
positionで位置、rotationで回転。軸は( X Y Z )。scaleは大きさ。
エンジンノズルが大きいものはscaleをいじって調整。

そしてさらに武器位置設定です。
locator = { name = "small_gun_01"
対応したoriginal_section.txtのlocatornameを入力して下さい。

このロケータ埋め込み作業が船MODの最大の難関といっても過言ではありません。(少なくとも私にとっては
てきとーに位置を書き込んでゲーム起動して確認、修正、ゲーム起動して確認、修正・・・・・
といちいちゲーム起動しないと確認できない・・・(泣
もっと良い方法あったらぜひ教えて下さい!!!!!
いや、そもそも手打ちが間違っているのか・・・プログラムできるヒトblenderの埋め込みエンコーダー( to mesh )作ってクダサイ


これで1つのセクションが出来上がりです。

エンジンエフェクト設定は一番最後に位置するセクショングループ全てに。
武器位置設定は全てのセクションに。(吐血
original_meshes.gfxの概要


ここで各所で引用された実際のmeshファイルの場所を指定します。

ここまで書いて気づいたんですけど
・・・撃破アニメーション忘れてた・・・

撃破された時は、なんかこうガクッと沈んでいくアニメほしいよね・・

欲しい方は、さらにこのoriginal_meshes.gfxがある場所に
original_animation.asset
original_frame_idle.anim
original_frame_death.anim
が必要です。

.animのファイルは各自用意しておいて下さい。

「.anim作れません!!」とか「撃破時、即爆発消滅!棒立ち全然オッケー」の方はanimationの所を削除で!!!


そして、ここでもscaleで大きさを決められます。
さんざん今までscale出てきましたが、CGモデルのscale調整は基本的にココでいじって下さい。
original_entitiese.assetやらではあまりいじらないほうが後々イイです。

そして
meshsettings =
以下でCGモデルのシェーダーと各マップを指定しています。
CGモデルにはこれらの情報を埋め込めるので、その場合は書かなくても良い。
埋め込んでないのに、この記述をはずすとシェーダーは自動的に"PdxMeshStandard"になります。(船が激まぶしくなる例のアレだっ

以下は少し専門的なCGの話。
ちなみに使えるシェーダーは\gfx\FXのpdxmesh.shaderに書かれています。(805行以下、MainCode PixelPdxMeshなんちゃらってヤツ)
そこをみると各マップのチャンネルがどのように使用されているかもわかります。
そこをうまくいじれば理想的なシェーダーができそうなんですけど・・・

このシェーダー関連は非常にやっかいです。船で使われてるPdxMeshShipシェーダーなんですが、おそらくいろんな制限があるシェーダーなんだと思います。
よくはずれるし、モデル変になるし・・・


あとJoroDox Tools使ってる方で、どーしても"PdxMeshShip"が適用されない方は
JoroDox Toolsのmeshのデータいじる画面でPDX Shaderを- Other - にして下の空欄にPdxMeshShipと書いてセーブしてみて下さい。
私はこれで自分のMODのステーション関係を強引にPdxMeshShipにしました。
おまけ:オリジナルtechnologyの作成
最後に
これはエクストラシップを追加するMODの作成例です。

いわゆるシップセットはこれより簡単です。
CGモデルは多いのですが(といってもヴァニラだったら4つ)、設定ファイルを細かく用意しなくて済みます。

シップセットの場合、\common\graphical_cultureに元になるヴァニラの設定をテキストファイルでぶち込めるので、必要記述がない場合、自動でそちらをヴァニラから参照してくれます。(アニメーション、船の基本性能、セクション内容etc)


以上となりますが
私自身そんなに詳しくないので、コレより遥かにやりやすい方法もあるかもしれません。
まだまだ隠し要素とかもあったり・・・(名前が長いとダメとか、ここのパラメータは数制限があるとか)


なので、みなさん自身で試行錯誤しつつMOD作りを楽しんで下さい。



66 Comments
cream.pfe Sep 28, 2021 @ 3:37pm 
お久しぶりです。
久々にMOD作成をしてみようと思っていますが、艦船追加は以前(Ver2.5ぐらい)と大きく変わっています?
lobolabo Apr 22, 2020 @ 7:50pm 
肝心のリンクを忘れていました。
PDX blender tools
https://github.com/ross-g/io_pdx_mesh
lobolabo Apr 21, 2020 @ 11:49pm 
途方もなく今更感がありますが
PDX blender toolsでロケーターの埋め込みとアニメーションのエクスポートが出来る事を確認しました
もっと早く、もっと早く出ていてくれたら...涙
cream.pfe Sep 30, 2018 @ 5:40am 
今、また艦船追加の自分用のMODを作成していますが、Ship designの左側の各種類の艦船モデルはどこに設定されているのでしたっけ?
cream.pfe Sep 28, 2018 @ 6:21am 
TestシップMODを使ってヤマトMODのバニラ版を作ってみました。
https://steamcommunity.com/sharedfiles/filedetails/?id=1524754315
gk020102 Sep 19, 2018 @ 5:20am 
フレ申請出しておきました!!cream.pfe氏のヤマトMODをバニラ準拠仕様に落とし込みたいのでガワだけtestMOD頂けませんか?LOBO氏の銀英伝艦艇MODは上手くローカル化できたのですが、cream.pfe氏のヤマトMODは何故か上手くローカル化できません。コレの原因って何だか分かりますか?
COLA  [author] Apr 1, 2018 @ 1:14am 
ガワだけ変更するのみ(演出とか一切なし)のtestシップセットMODをフレ公開しますので、見ておきたい方いられたらフレ登録送って下さい。
必要記述・必要ファイルしか書いてないので解りやすいと思います。
MODのディスクリプションにモデル変更するための記述箇所を書いときますので、これみれば他のシップMODの改造等がやりやすくなると思います。
・・・わかってると思いますが、人の改造MOD使用は自己のみでオネシャス
cream.pfe Mar 31, 2018 @ 11:52pm 
@COLA
できました。こんなことだったとは。基本ができていませんでした。
これまで勢いだけでMODを作っていたので。
ありがとうございました。
cream.pfe Mar 31, 2018 @ 11:21pm 
@COLA
確認して試してみます。
COLA  [author] Mar 31, 2018 @ 10:53pm 
自分のMODの中身めっちゃきたないので、いらない記述やいらないファイルがちょこちょこあるのですが
とりあえず全部置き換えリネームすれば形にはなると思います。