X4: Foundations

X4: Foundations

27 valoraciones
【X4】そうだ、Mod、作ろう
Por gso25mm
日本語でX4 FoundationsのModを紹介している記事はいくつかありますが
Modの作り方について触れているものはほとんどありません。
ということで、無いなら作れの精神でここにMod開発ガイドを書いていきます。
まずはModを作るために必要なツールなどの紹介をした後
目的別に解説を作成していく形となります。

このガイドは執筆途中であり、今後項目が追加されていく予定ですので
気長にお待ちいただけると幸いです。
3
4
3
4
   
Premio
Favoritos
Favorito
Quitar
はじめに: Mod開発のための環境を整える
Modの作り方はゲームによって様々ですが、X4においては
"X4 Foundations\extensions"フォルダ内に決められた構造、内容の
各種コンフィグファイル、テクスチャやメッシュなどのアセットを
配置することでそれらをゲーム内に読み込ませることができます。

そのためにはまずゲームファイルのフォルダツリーを把握しなければいけないので
まずは"X Catalog Tool"をいうものを入手する必要があります。
これはEgosoftの公式サイトからでも入手できますが、Steamユーザーの方は
Steamライブラリーの"ツール"カテゴリー内にある"X Tools"をダウンロードすれば
X Catalog Toolを利用することができます。

この項目ではX Catalog Toolを使用してベースゲームのファイルを解凍し
参照できるようにする手順を説明します。


こちらがX Toolsのフォルダの中身です。
この中から"XRCatToolGUI.exe"を起動してください。


起動するとこのような画面が表示されるので"Import Catalogs"のボタンを押して
ファイル選択ダイアログを表示し、ベースゲームの.catファイル
例: "C:\Program Files (x86)\Steam\steamapps\common\X4 Foundations\01.cat"
を選択。選択すると.catの中身が表示されるので、ウィンドウ下部の
"Extract all..."を選択し、ファイルの内容物の展開先を指定します。
展開先はどこでもいいですが、わかりやすい場所、かつほかのフォルダやファイルを含まない
新規のフォルダを指定することをお勧めします。
すべての.catファイルの展開が終わったら、いよいよ作業に取り掛かれます。
基礎: Modの導入方法
まず、X4にModを導入するうえで最低限必要なのは
"X4 Foundations\extensions"内に自分のModのフォルダを作成し
Modのメタデータ用のファイルを用意することです。
例として "X4 Foundations\extensions"内に"my_first_test_mod"というフォルダを作成し
"X4 Foundations\extensions\my_first_test_mod"内に"content.xml"というファイルを用意します。
以下はファイルの記述内容の例です:

<?xml version="1.0" encoding="utf-8"?> <content id="ws_3173684574" version="102" name="Fenrir - Asgard variant(VRO)" description="Adds Fenrir battleship: The Asgard without Spinal cannon, but with XL turrets. Recommended to use with More turrets for Capital ships Mod." author="PF250" date="2024-03-06" enabled="1" save="1" sync="false" lastupdate="1709658029"> <dependency id="ego_dlc_terran" optional="false" name="Cradle of Humanity"/> <dependency id="ego_dlc_boron" optional="false" name="Kingdom End"/> <dependency id="ws_1696862840" optional="false" name="Variety and Rebalance Overhaul"/> </content>

コードブロックではわかりにくいので画像も添付しておきます:
おそらく小さすぎて読めないので、画像をクリックして拡大表示してください。
(どこのサービスもそうだけどコードを乗せるには横幅が狭すぎる)



これは筆者が作成したModのメタデータですが、この中から
content id="ws_3173684574"をあなたのModのID名に

version="102"バージョンは任意ですが、表記が少々独特で
version="150"と記述した場合、ゲーム内ではバージョン "1.50"
のような表記になります。3桁の場合、頭の1ケタがメジャーバージョン
残りの2ケタがマイナーバージョンになります。

name="Fenrir - Asgard variant(VRO)"
これはModの名前を表しますが、表示名であり内部名ではないので
自由に入力してください。

description= はModの説明文
author= はModの作者名
date= はModの更新日時
enabled= はModがデフォルトで有効化されるかどうか
save= はModの内容がセーブデータ上に残るかを表しています。

説明文、作者名、更新日時は適当に
デフォルトで有効化するかはご自由に
セーブデータに残るかのパラメーターは自己申告であり
ワークショップなどで公開しないなら適当で問題ありません

<dependency id="ego_dlc_terran" optional="false" name="Cradle of Humanity"/>
これはModの依存関係を表しています。
前提Modがある場合はここにそのModのIDを指定し、前提Modが必須の場合は
optional="false"を指定してください。

基本的に、X4ではModはextensionsフォルダ内にある各Modフォルダを
アルファベット順に読み込みますが、依存関係を指定することで
そのModを前提Modの後に読み込ませることができます。

以上のような自分のModのフォルダとメタデータファイルを用意すると
ゲーム内のメインメニューからアクセスできる"拡張"メニュー内に
あなたのModが表示されているはずです。

当然ながら、これだけではそのModを有効にしても何も追加、変更されないので
後述のガイドを参考に自分なりのコンテンツを追加してみてください。
(新規データの追加や、ファイル全体を丸ごと上書きしない方法での変更は
中級編以降で解説します。なのでここで作成したModフォルダは初級編では使用しません。)
基礎: Modのアップロード方法
X4 Foundationsでは、主に2箇所でModを入手/投稿できます。

Steam Workshop:
https://steamcommunity.com/app/392160/workshop/

Nexus Mods:
https://www.nexusmods.com/x4foundations

Steam Workshopは何も考えずにサブスクライブボタンを押すだけでModを導入できますが
それゆえの問題も多いです。(特にMod開発者の視点では)

Nexus ModsではワークショップにはないModも投稿されており
Modマネージャーによる自動導入もできます(筆者はVortexが嫌いなので使ってませんが)

このセクションでは、Steam WorkshopへModを投稿する方法を解説します。

ワークショップにModをアップロードするにはそのためのツールが必要になりますが
これは【はじめに】で使用したX Toolsに含まれています。
X Toolsのインストールフォルダ内に "WorkshopTool.exe"というものが
入っているので、それを使用します。

このツールにはGUIがなく、コマンドプロンプトから操作する必要があるので

この画像と同様の手段でコマンドプロンプトのウィンドウを開きます。
X Toolsのフォルダを開き、
エクスプローラーのウィンドウの上部にある現在のフォルダのパスを
表示している領域の空いている場所をクリックし "cmd"と入力すればOKです。

ウィンドウが開いたら、次のようなコマンドを入力します。

"WorkshopTool publishx4 -path "[アップロードしたいModのフォルダの絶対パス]" -preview "[Modのサムネイル用画像の絶対パス]" -buildcat"

正常であればModのアップロード準備が行われ、実行するかどうかを聞かれるので
y/n の選択肢に y で返せば完了です。アップロード直後のModは非公開状態となっているので
何か間違っていたりした場合この時点で削除すればだれにも迷惑は掛かりません。

※注意点※
入力するコマンドのうち "publishx4"の部分を間違えて"publish"にすると
X Rebirthの方のワークショップにアップロードしてしまうので注意してください。
初級1-1: バニラの武器/タレットの性能を変更する
ゲームを遊んでいて、この武器がもうちょっとこうだったらと感じたことはありませんか?
ゲームバランスは抜きにしてこんな武器があったら楽しそうと思ったこともあるかもしれません。

ですが、自分の思った通りの箇所をピンポイントでその通りに変更してくれるMod
なんてまずありえません。なら自分で作るまでです。

このセクションは
【はじめに】のセクションで解説した通りにゲームファイルを解凍していることを前提として
解説していますのでご注意ください。
また、本ガイド内のファイルパスの表記はゲームのルートフォルダ、もしくは
解凍したゲームデータのルートフォルダからの相対パスになります。

「この武器をこうしたい」と思ったらまずは、その武器の性能を定義している
ファイルを探す必要があります。

ここで注意すべきなのが、武器のダメージや弾速、射程に射撃精度といった
ほとんどのパラメーターは"武器"のファイルではなく"弾丸"のファイルで
定義されているという点です。

ここでは例として、中型パルスレーザーMk2を編集します。

中型パルスレーザーMk2の弾丸の定義は

"assets\fx\weaponFx\macros\bullet_gen_m_laser_01_mk2_macro.xml"

というファイル内に記述されています。

ここで基本的な事項について解説しますが、X4において"性能"が定義されているファイルは
基本的にはファイル名の終わりに"macro"という名前が含まれています。

このファイルがある1つ上のフォルダには

"assets\fx\weaponFx\bullet_gen_m_laser_01_mk2.xml"
というファイルがあると思います。

しかしこれは実際の性能の定義ではなく、弾丸の"見た目"を定義するファイルです。
こちらのタイプのファイルについてはより高度なMod開発のセクションで解説しますので
今は忘れてください。

では話を"bullet_gen_m_laser_01_mk2_macro.xml"の記述内容に移しましょう。

※注意※ ファイルを編集する前にバックアップを作成するか、ファイルをコピーして
別の場所に移して編集してください。


<?xml version="1.0" encoding="utf-8"?> <!--Exported by: nick (192.168.3.123) at 27.01.2020_11-46-05--> <macros> <macro name="bullet_gen_m_laser_01_mk2_macro" class="bullet"> <component ref="bullet_gen_m_laser_01_mk2" /> <properties> <ammunition value="4" reload="0.7" /> <bullet speed="4562" lifetime="1.1" amount="1" barrelamount="1" icon="weapon_laser_mk2" timediff="0.015" angle="0.26" maxhits="1" ricochet="0" scale="0" attach="0" /> <heat value="61" /> <reload rate="6" /> <damage value="86" repair="0" /> <effects> <impact ref="impact_gen_m_laser_01_mk1" inside="impact_gen_m_laser_01_mk1_inside" /> <bigobjectimpact ref="impact_gen_m_laser_01_mk1_bigobject" inside="impact_gen_m_laser_01_mk1_bigobject_inside" /> <launch ref="muzzle_gen_m_laser_01_mk1" /> </effects> <weapon system="weapon_standard" /> </properties> </macro> </macros>

こちらがそのファイルの中身です。


今回はバニラのファイルの改変なので、必要な項目のみ解説します。

ammunition value="4" はいわゆるマガジン容量に当たるもので
リロードをはさむまでに連続で発射できる数を表します。
ゲーム内ではトリガーを引きっぱなしでも数発ごとのバースト射撃になると思いますが
それはここでマガジン容量が定義されているからです。

同一行内の reload="0.7" はマガジンのリロードにかかる時間を表します。

その下の行は弾丸の挙動を表すもので

speed="4562" が弾速を(単位: メートル毎秒)
lifetime="1.1" は弾丸が消滅するまでの時間を表し

speed と lifetime をかけた数値が実際の最大射程になります。

amount="1" は一度の射撃で発射される弾丸の数
barrelamount="1" はこの弾丸を発射する武器の砲身の数を表します。

パイロットが操作する通常の武装の場合は barrelamount の値が1であることが多いですが
タレット系武装の場合は2が多いです。

timediff="0.015" は発射タイミングの誤差
angle="0.26" は弾丸の拡散性を表します。

<heat value="61" /> が射撃1回ごとの発熱量なのですが、冷却速度と最大熱容量は
弾丸ではなく武器の側のファイルで定義されています。

<damage value="86" repair="0" /> は読んで字のごとくダメージで
1発あたりのダメージとなります。

弾丸が複数発射される場合はこのダメージに発射数をかけたものが合計ダメージになります。

注意点として barrelamount の値が2以上である場合も同様の結果となります。

<reload rate="6" /> は名前が紛らわしいですが、射撃レートを表しています。

<reload に続くパラメーターが
rate=""である場合は1秒間当たりの発射数を
time=""である場合は次弾発射までの所要時間を表します

例として rate="20" と time="0.05"は同じ射撃レートになります。

以上で解説した項目を、まずは自分の好みの数値に変更してみましょう。

完了したら、次のステップへ進みます。
初級1-2: ファイルの変更内容を適用する
X4においては、Modによるバニラのファイルに対する変更内容をゲーム内に
反映する方法が2つあります。
1つは diffパッチを使用する方法。
こちらはファイル内の特定の項目のみを変更したり、項目の追加などを
ファイル全体を上書きすることなく行うことができますが
決められた文法に従って正しく記述する必要があるため
ここではもう一つの方法で進めていきます。

そのもう一つの方法というのが、直接上書きする方法です。

この方法を利用するには、まずSteamライブラリーからX4 Foundationsの項目を
右クリックしプロパティ→一般内の一番下の項目"起動オプション"に
以下のパラメーターを指定してください。

"-prefersinglefiles"

二重引用符は含めず、頭の - (ハイフン)を必ず入れてください。

このパラメーターを指定することで
ゲームのフォルダ内に配置したファイルで解凍されていない.cat/.dat内のファイルの内容を
上書きすることができます。

1つ前のセクションでは"中型パルスレーザーMk2"の性能を変更しましたが
それをゲーム内に反映させるには、X4のインストールフォルダ内に
変更したファイルがあるべきフォルダを作成し、そこに配置することで
そのファイルの内容でバニラのファイルを上書きすることができます。

この場合は

"X4 Foundations\assets\fx\weaponFx\macros"に
先ほど編集した"bullet_gen_m_laser_01_mk2_macro.xml"を配置することで
変更を適用することができます。

今回は武器の性能を変更しましたが、シールドやエンジン、船の性能に関しても同様の
方法で変更することができるので、変更したい点があればいろいろ試してみましょう。

以下に主要なmacroファイルの場所を列挙しておきます。

"弾丸"の定義: "assets\fx\weaponFx\macros"
"武器"の定義: "assets\props\WeaponSystems\[武器のカテゴリー]\macros"
※[武器のカテゴリー] の例としては standard, energy, missile, capital, heavyなどがあります

"ミサイル"の定義: "assets\props\WeaponSystems\missile\macros"
"エンジン"の定義: "assets\props\Engines\macros"(スラスターの定義も含む)
"シールド"の定義: "assets\props\SurfaceElements\macros"
"艦船"の定義: "assets\units\[船のサイズ]\macros"
※[船のサイズ]は size_s, size_m, size_l, size_xl などがあります

その他の注意点:

DLCのゲームデータは

"X4 Foundations\extensions\ego_dlc_split" --> Split Vendetta
"X4 Foundations\extensions\ego_dlc_terran" --> Cradle of Humanity
"X4 Foundations\extensions\ego_dlc_pirate" --> Tides of Avarice
"X4 Foundations\extensions\ego_dlc_boron" --> Kingdom End
"X4 Foundations\extensions\ego_dlc_timelines" --> Timelines


内に格納されています。
参照、編集するためにはこちらも解凍する必要があります。
この際、解凍先のフォルダはベースゲームの解凍データフォルダ内に
"extensions" フォルダを作成し、その中にそれぞれのDLCのルートフォルダを作成
そのフォルダ内を解凍先として指定します。

例として、"X4 Foundations\extensions\ego_dlc_split\01.cat" の解凍先は
"[解凍されたゲームデータのルート]\extensions\ego_dlc_split"になります。

初級2-1: 貨物船の積載量を変更する
X4をプレイしていて、大型輸送船や補給艦の積載量が少ないと感じたことはありませんか?
そういうときはやはり自分の納得のいく程度まで積載量を増やしてしまいましょう。

まず、艦船の貨物積載量は、艦船のmacroファイル内ではなく、貨物ユニットの
macroファイルで定義されています。そのファイルは通常、艦船本体のmacro
ファイルと同じ場所に格納されています。

例として、アルゴンの補給艦 "ノマド ヴァンガード"の貨物ユニットは
"assets\units\size_xl\macros\storage_arg_xl_resupplier_01_a_macro.xml"
がその定義ファイルになります。

(ファイル内容)
<?xml version="1.0" encoding="utf-8"?> <!--Exported by: nick (192.168.3.52) at 18.11.2018_17-06-56--> <macros> <macro name="storage_arg_xl_resupplier_01_a_macro" class="storage"> <component ref="generic_storage" /> <properties> <identification makerrace="argon" /> <cargo max="29000" tags="container" /> <hull integrated="1" /> </properties> </macro> </macros>

このファイルのどこを変更すればいいのかは見ればすぐにわかると思いますが
<cargo max="29000" tags="container" />が貨物容量の定義です。

ゲーム全体で大型輸送船や補給艦の貨物容量を増やそうとすると
相当な数のmacroファイルを変更する必要がありますが、このようなバランス変更系の
Modはどうしてもそのような作業が付きまといます。
これはどうしようもないので頑張って作業しましょう。

基本的に、特にこだわりがないのであればバニラでの
積載量に倍率を掛けた値にすることをお勧めします。
中級1-1: 新しい武器を作ろう
現在、X4のワークショップやNexusにはいくつもの新規コンポーネントを追加する
Modがアップロードされています。自分でも作れたらと思った人も多いかと思いますので
ここでその方法を解説します。

今回は例として、"中型パルスレーザーMk3"というものを作ってみましょう。

そのうえで必要となる最低限のファイルは以下の通りです。

  • 弾丸のmacroファイル
  • 武器のmacroファイル
  • macros.xmlの記述
  • wares.xmlの記述

リストの上から順に説明します。

まずは弾丸のmacroファイルですが、これは初級編1-1で解説したこととほぼ同じ方法で
用意することができます。

まずはバニラの中型パルスレーザーMk2の弾のファイル

"assets\fx\weaponFx\macros\bullet_gen_m_laser_01_mk2_macro.xml"
をコピーし、"bullet_gen_m_laser_01_mk3_macro.xml"に名前を変更します。

<?xml version="1.0" encoding="utf-8"?> <!--Exported by: nick (192.168.3.123) at 27.01.2020_11-46-05--> <macros> <macro name="bullet_gen_m_laser_01_mk2_macro" class="bullet"> <component ref="bullet_gen_m_laser_01_mk2" /> <properties> <ammunition value="4" reload="0.7" /> <bullet speed="4562" lifetime="1.1" amount="1" barrelamount="1" icon="weapon_laser_mk2" timediff="0.015" angle="0.26" maxhits="1" ricochet="0" scale="0" attach="0" /> <heat value="61" /> <reload rate="6" /> <damage value="86" repair="0" /> <effects> <impact ref="impact_gen_m_laser_01_mk1" inside="impact_gen_m_laser_01_mk1_inside" /> <bigobjectimpact ref="impact_gen_m_laser_01_mk1_bigobject" inside="impact_gen_m_laser_01_mk1_bigobject_inside" /> <launch ref="muzzle_gen_m_laser_01_mk1" /> </effects> <weapon system="weapon_standard" /> </properties> </macro> </macros>

これがファイルの中身ですが、とりあえずは
macro name="bullet_gen_m_laser_01_mk2_macro"
の部分を先ほど変更したファイル名と同じものにしてください(.xmlは含めないように)

あとはバニラの武器の性能を変更した時と同じです。
各種パラメーターを好きなように変更しましょう。

一通り変更が終わったら、【基礎】で作成した自分のModのフォルダ内に
"assets\fx\weaponFx\macros\bullet_gen_m_laser_01_mk3_macro.xml"として保存します。

次は武器のmacroファイルを用意します。
バニラの中型パルスレーザーMk2は
"assets\props\WeaponSystems\standard\macros\weapon_gen_m_laser_01_mk2_macro.xml"
なので、これをコピーし、弾丸のファイルでやったことと同様に名前を変更
自分のModのフォルダの同じ場所に配置します。

ファイル内容は以下の通り:

<?xml version="1.0" encoding="utf-8"?> <!--Exported by: Matthias (192.168.3.59) at 14.05.2021_15-02-59--> <macros> <macro name="weapon_gen_m_laser_01_mk2_macro" class="weapon"> <component ref="weapon_gen_m_laser_01_mk2" /> <properties> <identification name="{20105,2014}" basename="{20105,2011}" shortname="{20105,2015}" description="{20105,2012}" mk="2" /> <bullet class="bullet_gen_m_laser_01_mk2_macro" /> <heat overheat="10000" cooldelay="1.13" coolrate="2000" reenable="9500" /> <rotationspeed max="106.4" /> <rotationacceleration max="121.8" /> <reload /> <hull max="1001" hittable="0" /> </properties> </macro> </macros>

ここでやることは、まずは先ほどと同様に

macro name="weapon_gen_m_laser_01_mk2_macro"を変更
つぎに <bullet class="bullet_gen_m_laser_01_mk2_macro" />
先ほど用意した"bullet_gen_m_laser_01_mk3_macro"に変更します。

各種パラメーターの説明ですが

<heat overheat="10000" cooldelay="1.13" coolrate="2000" reenable="9500" />
は熱に関する部分です。
overheat が最大熱容量
cooldelay が武器を使用してから冷却が始まるまでの時間
coolrate が冷却速度
reenable はオーバーヒート時に射撃不能状態から復帰する熱レベルを表します。

<rotationspeed max="106.4" /> は単純に武器の照準移動速度で
<rotationacceleration max="121.8" /> は照準移動の加速度です
移動の加速度が高いほど照準の反応がよくなります。

<properties>
<identification name="{20105,2014}" basename="{20105,2011}" shortname="{20105,2015}" description="{20105,2012}" mk="2" />の部分の一番後ろに mk="2"というものがありますが
これは筆者も把握していないのでとりあえず mk="3" にでもしておいてください。

さて、次ですが
X4はゲームフォルダ内にファイルを配置するだけではファイルを認識してくれないので
"X4 Foundations\extensions\[あなたのMod名]\index"フォルダ内に"macros.xml"ファイルを作成し、先ほど用意した武器のmacroファイルを登録しなければいけません。

macros.xmlファイルの内容は次の通りになります。

<?xml version="1.0" encoding="utf-8"?> <index> <entry name="bullet_gen_m_laser_01_mk3_macro" value="extensions\[あなたのMod名]\assets\fx\weaponFx\macros\bullet_gen_m_laser_01_mk3_macro"/> <entry name="weapon_gen_m_laser_01_mk3_macro" value="extensions\[あなたのMod名]\assets\props\WeaponSystems\standard\macros\weapon_gen_m_laser_01_mk3_macro"/> </index>

これでmacroの登録は終わったのでつぎはゲーム内の艦船設計画面、造船所の商品リストなどに
登録する必要があります。

それを管理しているファイルが"wares.xml"です。
まずはあなたのModフォルダ内にそのファイルを作成しましょう。
場所は"X4 Foundations\extensions\[あなたのMod名]\libraries\wares.xml"です。

ファイルを作成したら、以下の内容を記述する必要があります。

<?xml version="1.0" encoding="utf-8"?> <diff> <add sel="/wares"> <ware id="weapon_gen_m_laser_01_mk3" name="{20105,2014}" description="{20105,2012}" group="weapons" transport="equipment" volume="1" tags="equipment weapon"> <price min="103297" average="114775" max="126252" /> <production time="10" amount="1" method="default" name="{20206,101}"> <primary> <ware ware="advancedelectronics" amount="5" /> <ware ware="energycells" amount="10" /> <ware ware="weaponcomponents" amount="50" /> </primary> </production> <component ref="weapon_gen_m_laser_01_mk3_macro" /> <restriction licence="generaluseequipment" /> <use threshold="0.26" /> <owner faction="alliance" /> <owner faction="antigone" /> <owner faction="argon" /> <owner faction="buccaneers" /> <owner faction="holyorder" /> <owner faction="ministry" /> <owner faction="paranid" /> <owner faction="teladi" /> <owner faction="trinity" /> </ware> </add> </diff>

画像も置いておきます


ware id="weapon_gen_m_laser_01_mk3" がこのファイル内での項目名です。

group や tags は基本的にはバニラの同種のウェアのものをそのまま使えば問題はありません。

<price min="103297" average="114775" max="126252" />が販売価格で

<production time="10" amount="1" method="default" name="{20206,101}">

から

</production>

の間にある部分が生産に必要なウェアの定義となります。

<component ref="weapon_gen_m_laser_01_mk3_macro" />はこのウェアが参照する
macro名です。ここの設定を間違えるとバニラの中型パルスレーザーMk2が同名の別項目で
追加されるというような現象が発生するので注意しましょう。

<restriction licence="generaluseequipment" /> はそのまま購入に必要なライセンスです。

さて、wares.xmlの記述内に<diff> や <add sel="/wares">
のような項目があることに気付いたかもしれません。

これは、ゲームの既存のファイルをファイル全体を上書きすることなく変更を加える
diff patch というもので、ワークショップやNexusでModを公開する際に重要な手法です。

このファイル内では、wares.xml内の<wares>の中
(解凍したゲームファイル内のwares.xml参照)に
<add sel="/wares">

</add>

の間に含まれている記述を挿入するということを意味しています。

diff patchではほかにも項目の削除、変更を行う機能がありますが
ここでは解説しないので、いまはこういうもの、おまじないだと思ってください。

以上の手順をすべて完了すれば、ゲーム内の造船所、設備ドックやカスタムゲームスタート
画面で追加した武器が選択できるようになっていると思います。

武器の追加という点ではこれで完了ですが、このままでは武器の名称が
中型パルスレーザーMk2のままで紛らわしいですよね?

なのでここからもう少し頑張ってローカライズテキストを用意しましょう。

ローカライズテキストは"X4 Foundations\extensions\[あなたのMod名]\t"
フォルダ内に配置します。
自分で使うだけなら日本語のファイルのみでいいので、まずは
"0001-L081.xml"というファイルを作成します。

作成したら、以下の内容を用意してください。

<?xml version="1.0" encoding="UTF-8" ?> <language id="81"> <page id="29971005" title="New Weapons Test" descr="New Weapons Test" voice="no"> <t id="1">中型 パルスレーザーMk3</t> <t id="2">パルスレーザー</t> <t id="3">パルスレーザー</t> <t id="4">任意の説明文</t> </page> </language>

page id="29971005"の id=""は何でもいいですが、既存の他のModのページID
とかぶらないものにしましょう。

ローカライズテキストを用意したら、あとは"武器"と"ウェア"のファイルを開き

武器の方は

<identification name="{20105,2014}" basename="{20105,2011}" shortname="{20105,2015}" description="{20105,2012}" mk="3" />
になっていると思うので、"{20105,2014}"のように記述されている部分を変更し
自分のローカライズテキストを割り当てましょう。
{20105,2014}のように、コンマで区切られた左側の数字が page id="29971005"
で示されたページID
右側の数字が<t id="1"> のような項目のIDを表しています。

name="" は短縮形などではないフルネーム
basename=""は勢力名やサイズ名などを除いた名前
shortname=""は短縮名
description=""は説明文を表します。

これで武器の側はOKなので、ウェアの側も同じ手順で変更しましょう。

<ware id="weapon_gen_m_laser_01_mk3" name="{20105,2014}" description="{20105,2012}" group="weapons" transport="equipment" volume="1" tags="equipment weapon">

の name と description を設定したら、ゲーム内で正常に表示されているか確認してみましょう。
問題なければこれで新規武器の追加は完了です。お疲れ様でした。
中級2-1: 新しい船を追加しよう
ある程度ゲームが進んできて、ネメシスやらドラゴンやらカタナやら、使い勝手のいい船に
改造パーツをつけてプレイヤー専用機にして乗り回している方も多いかと思います。

X4というゲームはX3時代ほどではないですが、プレイヤーが一人で戦うのは厳しいゲームです。
もうちょっと強くてエースパイロットやヒーロー気分を味わえる船があったらと思ったこともあるかもしれませんね。

ということで、このセクションではプレイヤー専用の高性能な船を実装する方法を解説します。
といっても、やること自体は【中級編1-1】で行ったことと基本は同じで
コピーして編集するmacroファイルが船のmacroファイルになっただけです。

なので、ここではすでに上記のセクションでの新規macroの追加、登録、ローカライズテキストの追加の方法を把握しているのもとして解説します。

今回は、DLCがまだなかった時代から多くのプレイヤーに人気だったパラニドのコルベット
ネメシス ヴァンガードをより頑丈に、より高速にしたものを作ってみましょう。

まず、この船のmacroは
"assets\units\size_m\macros\ship_par_m_corvette_01_a_macro.xml"
となっています。その下に"ship_par_m_corvette_01_b_macro.xml"というのがありますが
これはセンチネル型のほうのmacroです。
ヴァンガード型のファイルをコピーし、任意の名前に変更してください。

では、中身を見ていきましょう。

<?xml version="1.0" encoding="utf-8"?> <!--Exported by: Michael (192.168.3.59) at 13.10.2021_12-19-04--> <macros> <macro name="ship_par_m_corvette_01_a_macro" class="ship_m"> <component ref="ship_par_m_corvette_01" /> <properties> <identification name="{20101,30302}" basename="{20101,30301}" description="{20101,30312}" variation="{20111,1101}" shortvariation="{20111,1103}" icon="ship_m_fight_01" /> <software> <software ware="software_dockmk2" compatible="1" /> <software ware="software_flightassistmk1" default="1" /> <software ware="software_scannerlongrangemk1" default="1" /> <software ware="software_scannerlongrangemk2" compatible="1" /> <software ware="software_scannerobjectmk1" default="1" /> <software ware="software_scannerobjectmk2" compatible="1" /> <software ware="software_targetmk1" default="1" /> <software ware="software_trademk1" compatible="1" /> </software> <explosiondamage value="500" shield="2500" /> <storage missile="40" /> <hull max="10000" /> <secrecy level="2" /> <purpose primary="fight" /> <people capacity="8" /> <physics mass="24.394"> <inertia pitch="3.214" yaw="3.214" roll="2.572" /> <drag forward="3.547" reverse="14.188" horizontal="13.02" vertical="13.02" pitch="7.739" yaw="7.739" roll="7.739" /> </physics> <thruster tags="medium" /> <ship type="corvette" /> <sound_occlusion inside="0.4" /> </properties> <connections> <connection ref="con_cockpit"> <macro ref="cockpit_gen_virtual_01_macro" connection="ship" /> </connection> <connection ref="con_dock_xs"> <macro ref="dock_gen_xs_ship_01_macro" connection="Connection_component" /> </connection> <connection ref="con_shipstorage_xs_01"> <macro ref="shipstorage_gen_xs_01_macro" connection="object" /> </connection> <connection ref="con_storage01"> <macro ref="storage_par_m_corvette_01_a_macro" connection="ShipConnection" /> </connection> </connections> </macro> </macros>


各項目について説明します。

<storage missile="40" /> はミサイルの搭載数
<hull max="10000" /> は船体耐久値
<people capacity="8" /> は乗組員数(船長は含まず)

<physics mass="24.394"> はゲーム内で船の重さとして表示されるもので
この値が小さいほど加速力が高くなります。

<inertia pitch="3.214" yaw="3.214" roll="2.572" /> は旋回時の慣性
少ないほど操舵の反応がよくなります。

<drag forward="3.547" reverse="14.188" horizontal="13.02" vertical="13.02" pitch="7.739" yaw="7.739" roll="7.739" />
これは各方向の抗力で、小さいほど最大速度が上がります。

<thruster tags="medium" /> は搭載できるスラスターの種類です。
スラスターそのものにグラフィックは存在しないので特大型などをくっつけても問題はないですが
推力が過剰で旋回が制御不能になる可能性があるので注意。

これらの要素を好みの内容に変更し
"X4 Foundations\extensions\[あなたのMod名]\assets\units\size_m\macros"内に保存したら
あとは【中級1-1】で行った作業と同様の手順でファイルを登録すれば
ゲーム内の造船所やカスタムゲームスタート画面で選択できるようになるはずです。
wares.xmlの記述内容に関してはバニラのwares.xml内にあるネメシスの記述を参考にしましょう。
中級3-1: 専用コンポーネントを作ろう
X4では、特定の船にしか搭載できない武装といったものがいくつか存在します。
わかりやすい例としては、各派閥の駆逐艦の主砲ですね。
ベヒーモスの主砲はベヒーモスにしか搭載できず、オデュッセウスには搭載できません。
このような制限はどこで定義されているのでしょうか?

さて 【初級1-1】で、"性能"ではなく"見た目"を定義しているファイルが別に存在していると
解説しましたね? 今回触れるのはその"見た目"の定義ファイルです。

このセクションでは、【中級2-1】で追加した改良型ネメシスにしか搭載できない
特別な武装を作ってみましょう。

まず用意する必要があるのは

  • 改良型ネメシスの"見た目"定義ファイル
  • 改良型ネメシス専用武装のmacroファイル
  • 改良型ネメシス専用武装の"見た目"定義ファイル
  • components.xmlの記述
  • macros.xmlの記述
  • wares.xmlの記述
  • 0001-L081のローカライズテキスト

となります。

まずは改良型ネメシスの見た目定義ファイルを用意しましょう。
これはバニラのネメシスのファイルをコピーして名前を変更すればOKです。
武装の方も同様の手順で用意しましょう。
これらのファイルはmacroファイルではないので"weaponsystems\standard\macros"
や"units\size_m\macros"の1つ上のフォルダに配置します。

ファイル内の一番上の方に"<component name="ship_par_m_corvette_01" class="ship_m">"
のような記述があると思いますが、それを別の名前に変更しておきましょう。

見た目定義のコピーと配置が終わったら、それらのファイルを
macroファイルをインデックスに登録した時と同様の手順で登録していく必要があります。
"X4 Foundations\extensions\[あなたのMod名]\index"内に
"components.xml"を作成し【中級2-1】でmacroファイルを登録した時と同様の手順で
見た目定義のファイルを登録していきます。

完了したら、忘れずに改良型ネメシスとその専用武装のmacroファイル内にある
"<component ref="ship_par_m_corvette_01" />"のような部分を
さきほど登録した見た目定義ファイルの名前に変更します。
実際のファイル名ではなく components.xml 内での登録名を指定してください。

これで下準備は完了です。

さて、この状態では見た目定義の記述を名前以外何も変更していないので
このままでは改良型ネメシス以外にも自由に搭載できてしまいます。

なので、ここで"武器の見た目"ファイル側で搭載できる場所の設定を
"船の見た目"ファイル側で武装スロットが対応している武装タイプを指定します。

まずは武器の見た目ファイル内の一番下の方にある
"<connection name="WeaponCon_01" tags="component weapon medium standard combat">”
このような記述を探してください。
この中の tags="component weapon medium standard combat"
で、どのスロットに搭載できるかが定義されています。
この場合は、搭載する武器スロットに weapon, medium, standard, combat
のタグが付いている必要があります。

一方で、船の見た目ファイルの方には
"<connection name="con_primaryweapon_04" tags="weapon medium standard missile platformcollision symmetry symmetry_left symmetry_2 combat ">"
このような記述があります。

2つを比べてみると、お互いに weapon, medium, standard, combat
のタグが含まれていることがわかりますね。

仕様としては、双方に同じタグが付いていれば装備することができますが
たとえば武器側に weapon medium missile combat があり
武器スロット側に weapon medium standard combat がついていた場合
スロット側に missile のタグがないので装備することができません。

また武器側に weapon medium missile combat があり
武器スロット側に weapon medium standard missile combat がついている場合は
タグの内容は完全に同じではありませんが、武器スロットのタグが
武器側についているタグをすべて含むので装備することができます。

これを踏まえて専用武装というものを実装します。
武器や武器スロットに指定するタグはハードコードされたものではないので
任意の名前のタグを指定することができます。

なので、改良型ネメシスの方の武器スロット
con_primaryweapon_01 から con_primaryweapon_05 までをファイル内から検索し
tags= の中に任意のタグを指定します。
ここでは例として advancednemesisonly としておきます。

そして武器側にも同じタグを指定すれば
その武器は改良型ネメシスにしか装備できなくなります。

改良型ネメシスの武器スロット側はタグを削除せず増やしただけなので
これまで通り通常の武装を装備可能なままです。

バニラでは各派閥の駆逐艦主砲などで同様の仕様が使われているので、参考にしてみましょう。

ベヒーモス主砲
"assets\props\WeaponSystems\capital\weapon_arg_l_destroyer_01_mk1.xml"
168行目

ベヒーモス
"assets\units\size_l\ship_arg_l_destroyer_01.xml"
676行目
中級4-1: diff patch を使用してバニラの要素を変更する
バニラのファイルの内容を上書きする方法は【初級1-2】で解説しましたが
これはファイル全体を完全に上書きする方法となっており
特定の武器や船のmacroのような1つのデータしか含まないファイルならともかく
wares.xmlやmacros.xmlなどの大量のデータを含むファイルでこれを行うと
非常に都合が悪くなります。

そこで使用するのが、diff patchという手法です。

diff patchは、バニラ、またはDLCや別のModに含まれるファイルを
パッチ適用用のModのフォルダ内の同じ場所にあるファイル内のパッチ定義を使って変更する
というもので、例としては以下のようなものがあります。

【元ファイル: ARG 特大型 万能型エンジン】
"assets\props\Engines\macros\engine_arg_xl_allround_01_mk1_macro.xml"

<?xml version="1.0" encoding="utf-8"?> <!--Exported by: nick (192.168.3.69) at 18.03.2020_13-06-30--> <macros> <macro name="engine_arg_xl_allround_01_mk1_macro" class="engine"> <component ref="engine_arg_xl_allround_01_mk1" /> <properties> <identification name="{20107,4004}" basename="{20107,4001}" shortname="{20107,4005}" makerrace="argon" description="{20107,4002}" mk="1" /> <boost duration="29" thrust="2" attack="10" release="1" /> <travel charge="30" thrust="31" attack="75" release="22.5" /> <thrust forward="11076" reverse="12184" /> <angular /> <hull max="12193" threshold="0.3" /> <effects> <boosting ref="arg_boost_fx_xl" /> </effects> <sounds> <enginedetail ref="enginedetail_ship_xl_01" /> </sounds> </properties> </macro> </macros>

【パッチファイル】
"X4 Foundations\extensions\[あなたのMod名]\assets\props\Engines\macros\engine_arg_xl_allround_01_mk1_macro.xml"

<?xml version='1.0' encoding='utf-8'?> <diff> <replace sel="/macros/macro/properties/travel/@charge">12</replace> <replace sel="/macros/macro/properties/travel/@thrust">50</replace> <replace sel="/macros/macro/properties/hull/@max">30000</replace> <remove sel="/macros/macro/properties/boost"></remove> </diff>

【パッチ適用結果】

<?xml version="1.0" encoding="utf-8"?> <!--Exported by: nick (192.168.3.69) at 18.03.2020_13-06-30--> <macros> <macro name="engine_arg_xl_allround_01_mk1_macro" class="engine"> <component ref="engine_arg_xl_allround_01_mk1" /> <properties> <identification name="{20107,4004}" basename="{20107,4001}" shortname="{20107,4005}" makerrace="argon" description="{20107,4002}" mk="1" /> <travel charge="12" thrust="50" attack="75" release="22.5" /> <thrust forward="11076" reverse="12184" /> <angular /> <hull max="30000" threshold="0.3" /> <effects> <boosting ref="arg_boost_fx_xl" /> </effects> </properties> </macro> </macros>

行った処理の内容は

<replace sel="/macros/macro/properties/travel/@charge">12</replace>
エンジンのトラベルモードチャージ時間を12秒にする

<replace sel="/macros/macro/properties/travel/@thrust">50</replace>
エンジンのトラベルモード時の推力倍率を50にする

<replace sel="/macros/macro/properties/hull/@max">30000</replace>
エンジンの耐久力を30000にする

<remove sel="/macros/macro/properties/boost"></remove>
エンジンのブースト機能を削除する


となります。

それぞれの処理内容を詳しく見ていきましょう。

まず "replace" は、指定された項目の変更を行います。
<replace sel="/macros/macro/properties/travel/@charge">12</replace>
は"macros/macro/properties"のブロック内にある
<travel charge="30" thrust="31" attack="75" release="22.5" />の
"charge" の項目を30から12に変更しています。

つぎに "remove" は"macros/macro/properties"にある
"boost"の項目を丸ごと削除しています。

ここでは使用していませんが <add sel=""></add>というものもあり
これは新規項目の追加ができます。

もうすこし詳細な説明としては

まずこのような内容のファイルがあるとします

<root> <properties> <node value="1"/> <node value="2"/> <node value="3"/> <multinode valueone="100" valuetwo="200" valuethree="300"/> </properties> </root>

これに対して
<node value="1"/>を<node value="4"/>に変更したいとします

その場合は、<node>という名前の項目が複数あり
<replace sel="root/properties/node"></replace>だけではどの<node>なのかがわかりません
こういう場合には
<replace sel="root/properties/node[@value='1']"> <node value="4"> </replace>
のように、項目の名前だけではなく内容も指定することでターゲットを区別することができます。

ほかにも

<replace sel="root/properties/multinode"> <multinode valueone="300" valuetwo="200" valuethree="100"/> </replace>

のように項目全体を一括で変更することもできます。

※注意点※

バニラのファイルに対する変更を行う場合はファイルの場所は
"[あなたのMod名]\assets"や
"[あなたのMod名]\libraries"になりますが
DLCや別のModのファイルを変更する場合は
"[あなたのMod名]\extensions\ego_dlc_split\assets"や
"[あなたのMod名]\extensions\[別のMod名]assets"などになることに注意してください。


さて、いろいろと解説しましたが
diff patchに関してはどうしても内容が複雑かつ長いものになってしまうので
https://forum.egosoft.com/viewtopic.php?t=354310
にあるガイドを読むか、既存のModのファイル内容を見て
自分のやりたいことと同じことをしているものを見つけて参考にすることをお勧めします。

Mod開発において、バニラのファイルやほかの作者のModの内容を見て参考にするというのは
ごく一般的な学習方法であり、ゲームファイルの基本的な構造や仕様を把握していれば
同系統のModやDLCの内容を見るだけで作り方がわかるというものも多いです。

このガイドは、あくまで基礎的なModの概念や構造について
日本語で解説するというものですので、ここに書かれていないような内容に関しては
既存のファイルを参考にするという方法で理解することができるので
そのような方法でMod開発について知る能力も身に着けていただければと思います。
上級1-X: モデルインポート用ツールについて
※こちらはツール類の事情の変化に合わせて
あとから追加された項目です。
使用するツール以外の情報、手順に関して
まず先の項目を確認してからお読みください。

↓↓XR Converter↓↓
forum.egosoft.com/viewtopic.php?f=181&t=404786#p4769763

こちらのツールへのリンクがあるフォーラムのスレッドが消えてしまっているため
現在使用できない状態にあります。もしかしたらどこかで見つかるかもしれませんが
X4ように作られた同様のツールが存在するため記載しておきます。

X4 Converter:
https://github.com/Cgettys/X4Converter/tree/master


このように Code → Download ZIP でファイルをダウンロードし、


.zip内にあるBlenderのアドオンが入った.zipを任意の場所にコピー。

あとは通常のBlenderのアドオンと同じ手順で有効化すればBlender内で
ファイル→インポート→X4 Importを選べばモデルのインポートができます。
上級1-1: 船のコンポーネント配置を変更しよう
各所で公開されているModのなかには、バニラの艦船のタレットや武装、シールドなどの
配置を変更、搭載数を増加させたりしているものがあります。
筆者が作成したModのなかでは
Super Asgard, More turrets for Capital ships, Fenrir - Asgard variant
などがあります。

ここでは、バニラの艦船のモデルを流用し、武装やシールドの搭載数を増やしたりする方法を
解説していきます。

まずはベースにしたい船の見た目定義ファイル(以降はコンポーネントファイルと呼びます)
をコピーし、名前を変更してcomponents.xmlに登録してください。
同様に船のmacroファイルも用意して登録しましょう。

ここまでは中級編で触れた部分なので、詳細は省きます。

では船のコンポーネントファイルの中を見てみましょう。
今回はベースの船としてアルゴンのコロッサス ヴァンガードを使用します。
ファイルは"assets\units\size_xl\ship_arg_xl_carrier_01.xml"になります。

ファイル内にはいくつものデータの階層がありますが、その中に
<connections>という階層があると思います。
エンジンやシールド、タレットや武装などのスロットはここで定義されています。

<connections>内にたくさんある
"<connection name="con_turret_l_001" group="group_up_mid_mid " tags="turret large standard missile combat ">"のような記述が装備スロットの定義です。

その中の

<offset> <position x="0" y="159.3311" z="-242.3653"/> </offset>

がスロットの座標の設定です。

<quaternion qx="6.585444E-10" qy="0.7071068" qz="6.585446E-10" qw="-0.7071067"/>
のように位置だけではなく設置角度が指定されているものもあります。

tags="turret large standard missile combat " の部分がそれが何のスロットであるかを表しており
この場合は 大型タレットのスロットとなっています。

ここまでファイルの内容を見てきて、船の正確な形や座標系の種類
(右手法か左手法か、Zが上かYが上か)といったことすらわからないのに
どうやって正確に場所を指定するのかと思ったかもしれません。

幸いなことに、そのような作業を何とかしてくれるツールが既に存在しています。

以下がこのセクションで使用するツールです。

XR Converter: --> 現在利用不可
forum.egosoft.com/viewtopic.php?f=181&t=404786#p4769763

Blender (バージョン3.5-3.6):
https://www.blender.org/download/releases/3-6/

X4 Blender Module Drag and Drop:
https://github.com/rjtwins/X4-Blender-Module-Drag-and-Drop

XR ConverterはX4の各種メッシュファイルのインポートに使用します。
Blenderはインポートしたメッシュの閲覧とX4 Blender Module Drag and Drop
で使用するファイルの作成に必要です。

ここからは単純にXMLを編集するだけではなく
Blenderの使い方を理解している必要があるので
このガイドではBlenderの基本操作ができるものとして解説を進めます。

では、実際の作業を進めていきましょう。

まず初めにゲームの各種艦船のメッシュをインポートする必要がありますが
そのためにバニラのすべての.catファイルを解凍済みであることを確認してください。
コンポーネントファイルではその船のメッシュデータフォルダ
以外からも様々なファイルを参照しているため、必要なファイルがすべてそろっていないと
メッシュのインポートができません。

またDLCに含まれる艦船を編集したい場合はそれらのDLCの.catを解凍しておく必要があります。

すべてのファイルを正しく解凍した場合、以下のようなフォルダ構造になるはずです。
(Timelinesは入りきらないので省略)
- [ルートフォルダ] - assets - units - size_l - size_m - size_s - size_xl - extensions - ego_dlc_boron - assets - units - size_l - size_m - size_s - size_xl - ego_dlc_pirate - assets - units - size_l - size_m - size_s - size_xl - ego_dlc_split - assets - units - size_l - size_m - size_s - size_xl - ego_dlc_terran - assets - units - size_l - size_m - size_s - size_xl

解凍したデータのフォルダ構造が正常であることを確認したら、メッシュのインポート
ツールである"XR Converter"を使用します。

このツールにGUIはなく、コマンドプロンプトから操作する必要があります。
ダウンロードしたフォルダ内にある "XRConvertersMain.exe"を作業用フォルダの
任意の場所に配置し、そのフォルダ内でエクスプローラーのウィンドウ上部にある
アドレス欄(ファイルパスが表示されている場所)の空いている部分をクリックして


テキストが入力できるので "cmd" と入力。
そうするとそのフォルダでコマンドプロンプトのウィンドウが開きます。

ウィンドウが開いたら、このセクションの最初の方でベースにすると説明した
コロッサス・ヴァンガードのコンポーネントファイルのフォルダを開いておき
エクスプローラーのウィンドウをもう一つ開いて
(ファイルやフォルダ一覧が表示されている場所に
カーソルを合わせてCtrl+Nでウィンドウを複製できます)
解凍したゲームデータのルートフォルダの1つ上のフォルダを表示します。

次は、コマンドプロンプトのウィンドウに戻り、次のコマンドを入力

"XRConvertersMain.exe importxmf "[解凍したデータのルートフォルダのパス]" "[インポートしたい船のコンポーネントファイルのパス]""

"importxmf" に続く2つのパラメーターのうち、1つ目はゲームデータのルートフォルダを指定し
2つ目はインポートしたいメッシュを参照するコンポーネントファイルを指定します。

すべて正常なら、コマンドウィンドウがもう一つ開き、少しして消えるはずです。

ウィンドウが消えたら目当てのコンポーネントファイルがある場所を確認します。
そこに"[コンポーネントファイル名].dae"というファイルがあれば成功です。
このファイルは汎用的な3Dモデルの形式(.objや.fbxなどと同様)なので
通常の3Dモデリングソフトでインポートすることができます。

これでメッシュのインポートは終わったので、Blenderを起動してさきほど
用意した.daeファイルを読み込んでください。

Blenderに読み込んだメッシュはゲーム内の実際の大きさの100分の1になっており
また、Blender内での-Y方向がゲーム内での+Z方向になります。(BlenderはZ-UpでX4はY-Up)
この部分はツールが補完してくれるので
Blender内で艦首が-Y方向を向いてさえいれば大丈夫です。

次は、ダウンロードした"X4 Blender Module Drag and Drop"のフォルダを開き
中に"templates"というフォルダがあることを確認します。
このフォルダにはバニラの各コンポーネント(タレットやシールドなど)の大きさと向きを
Blender内で確認するための見本が含まれているので、配置、追加したいコンポーネント
のテンプレートをインポートし、3Dビュー内のわかりやすい場所に置いておいてください。

インポートした艦船のモデルはそのままだと複数のLoDレイヤーやコリジョンメッシュなどが
重なった状態で表面がちらついていたりと非常に見づらいと思います。

そのままでは作業しにくいので

"part_mainXcollision"以外のメッシュは非表示にしましょう。
メッシュデータは基本的にエンプティの子オブジェクトとして設定されているので
見つからない場合は階層をたどっていきましょう。

これで準備はできたので、用意しておいたコンポーネントのテンプレートの名前を
作業しやすいものに変更します。

例として、中型タレットであれば "_mmturret_" のような名前に。
変な名前ですが、あとあと作業が楽になります。

テンプレートの名前変更が終わったら、そのコンポーネントテンプレートのオブジェクトを
Shift+Dで複製し、複製して "_mmturret_.001" のような名前になったものを
自分の好きなように船体表面に並べていくだけです。
オリジナルの "_mmturret_" などは使用しません。
(後で説明するので今はこの通りにしてください)

ただし、配置場所に気を付けないとバニラですでに配置されているほかのコンポーネントに
重なってしまうこともあるので、ゲーム内で船の装備画面を見ながら
注意して配置してください。

X4において、タレットなどは基本的に"グループ"に属しており、わかりやすい例でいえば
スプリットの空母 ラプター があります。
装備編集画面でタレットの項目を選ぶと、1項目内に5個だの9個だののタレットと
複数のシールドがまとめられていますよね?

タレット1つ1つを全部個別のスロットにするととんでもないことになるので
基本的には複数個を1つのグループとしてまとめています。

自分がこれで1グループだと思うだけのタレットとシールドを配置したら、いったん手を止めて
配置したコンポーネント類をグループに割り当てていきます。

ここで先ほどの奇妙な名前が役に立ちます。
Blenderには、オブジェクトの名前を一括変更する機能があり
変更したいオブジェクトをすべて選択した状態で Ctrl+F2を押すことで
一括変更のメニューを開くことができます。

グループ内のすべてのコンポーネントを選択し、Ctrl+F2で一括変更メニューを開き


検索内容: "\.0*"
正規表現を使ってオブジェクト名の後ろにある".00"のような余分な個所を削除
(".001" が "1"、".015" が "15"のようになります)

つぎに、モードを"名前を設定"に変更し

頭にグループ名を入力します。

ここでグループ名について。

X4 Blender Module Drag and Dropのreadmeにも書いてある通り
ツールにオブジェクトが何なのか、どのグループなのかを認識させるために
適切に名前を付けないといけないのですが、これは

[グループ名]_[コンポーネントのタイプ]_[コンポーネントの番号]
のように各要素をアンダースコアで区切って命名します。
グループ名に含まれる単語を区切りたい場合は "-"(ハイフン)を使用してください。

画像で説明するとこのようになります。


コンポーネント種別の例としては

mturret, mmturret, lturret, lmturret, mshield, lshield, xlshield

などがあります。
"mturret"は中型タレットですが、"mmturret"はミサイルに対応した中型タレットになります。
また、グループ名の頭に "left" や "right"とつけることでX軸方向反対側の位置に
同じ構成のグループを自動配置させることもできます。
詳細についてはツールのreadmeを確認してください。

バニラの艦船は通常、タレットを保護するシールドがグループに含まれていますが
これは配置したシールドコンポーネントのオブジェクトに保護したいタレットのグループ名と
同じものを割り当てることで実現できます。

好きなだけコンポーネントを配置したら、Blender内でのオブジェクトの座標や角度を
X4 Blender Module Drag and Dropで利用できるよう
ファイルにエクスポートする必要があります。

ファイル形式は ".x3d"を使用します。
エクスポート時の設定はreadmeに書かれていますが


上記の画像と同じよう設定してください。
エクスポート時は3Dビュー内で選択しているオブジェクトのみエクスポートされるので
選択漏れがないか、余計なものを選択していないかをしっかり確認しましょう。

エクスポートが完了したら、ようやくX4 Blender Module Drag and Dropの出番です。

ダウンロードしたフォルダ内にあるものをすべて任意の場所に展開し
フォルダ内にある main.exeを起動します。(Python実行環境がある場合はmain.pyでもOK)



このようなウィンドウが表示されるので "Open Files"ボタンを押して
エクスポートした.x3dファイルを開き、Open Filesのボタンの下の部分に
表示されているファイルをクリックしてから必要なら"On selected files"内の
"Mirror On" を押して対称配置機能を有効にして、一番下の "Start"を押します。
そうすると、Blenderでエクスポートした.x3dファイルと同じ場所に"[ファイル名]_output.xml"
という名前のファイルが生成されているはずです。中身を見てみましょう。

このような内容になっていると思いますが、これをそのままコンポーネント配置を変更したい
船のコンポーネントファイルのdiff patchや新規艦船の
コンポーネントファイルに挿入しても動作しません。

※注意事項※
.x3d → .xmlの出力が完了したら一度main.exeを終了させてください。
そうしないまま別のファイルを処理すると動作がおかしくなる場合があります。




X4 Blender Module Drag and Dropは少し古いツールなので、バージョン6.0で行われた
コンポーネント関連の仕様変更に対応していないため、その未対応部分を
手動で対応させる必要があります。

内容としては

"タレット" の "tags" に "combat" を追加
"シールド" の "tags" に "standard" を追加

が必要です。

必要なタグを追加したら、本セクションの最初の方で用意したコンポーネントファイルに
これらの記述を挿入する必要があります。

X4 Blender Module Drag and Dropで生成されたファイルの内容のうち

<connectionss> </connectionss>
の部分は無視して、その間にある

<connection group="left-bow-aa-1" name="con_m_turret_left-bow-aa-1_1" tags="turret medium standard hittable"> <offset> <position x="-58.61769999999999" y="-14.130999999999998" z="226.6186"/> <quaternion qw="-0.9863606420154906" qx="-0.09702328872623317" qy="-0.1298570833

のような部分をすべてコピーします。
上級1-2: 船のコンポーネント配置を変更しよう(続き)
※長すぎて入らないので分割※

コピーした内容をコンポーネントファイルの
<connections> </connections>

の間に入れれば完成です。

あとはゲームを起動してコンポーネントがしっかり追加されているかを確認してみましょう。

コンポーネントのスロットはあるが何も装備できない場合はタグの指定が間違っています。
コンポーネントの向きや場所がおかしい場合は
エクスポート時のオプションなどが間違っている可能性があります。

以上がコンポーネント配置の変更手順となります。

バニラの艦船のコンポーネント配置を変更するもよし
新規追加した艦船のコンポーネントファイルに組み込んでより強力な派生型にするもよしです。
上級2-1: オリジナル艦船を作ろう - 事前準備
この項目以下は工事中です!!!

SteamワークショップやNexus Modsにはいくつものオリジナルモデルの艦船を追加する
Modが存在していますが、当然そういったものが存在しているということは
自分で作ることができるということです。

このセクションでは自分だけのオリジナル艦船をゲーム内に実装する方法を解説します。

まず、必要となるツール類について:
なお、本セクションはゲームファイルはすべて解凍済みであることと
Blenderの操作が一通りできることを前提として進行します。

ツール
Blender[www.blender.org]
Egosoft Blender Mod Tools[www.egosoft.com](公式サンプルファイルのダウンロードあり)



アセット
  • 任意の3Dモデル
  • 任意のテクスチャ(バニラのマテリアルを使用する場合は不要)
以上が必要なもののリストです。
こうしてみると意外と少ないことが分かりますね。

3Dモデルについてですが、特に使いたいものが無い場合はデフォルトの立方体を
使用して本ガイド内の手順を進行することを推奨します。

必要なツールの導入が完了したら、次のセクションへ進みましょう。(工事中)

Tips: Egosoft Blender Mod Tools のインストールと設定

ツールのインストールの際は、ダウンロードしたインストーラーを起動後
以下の2つのフォルダを作成してインストール時の設定欄を埋める必要があります。

  • p1data --> Mod Toolsによってエクスポートされたデータの保存場所
  • p1[assets] --> エクスポートする"元データ / 作業ファイル"の保存場所

必要項目を入力してインストーラーでの作業が終わったら、Blender側から
アドオンの設定を行います。Egosoft のツール2種の有効化と
V-HACDの実行ファイルのパスの指定、アドオンの有効化をすればOKです。


Egosoft ToolsはNキーで表示できるサイドバー内、"Egosoft"タブ内にあります。
インストール完了後は"P1 Converter LOCAL"というショートカットが自動的に
追加されているので、これを実行することでエクスポーターを起動することができます。
(解説の最終段階で取り扱います)
上級2-2: オリジナル艦船を作ろう - モデルの下準備1
必要なツール類、およびアセットの用意が終わったら、次に3Dモデルを
X4: Foundationsで使用できる形式に整える必要があります。

ほとんどのゲームで共通することですが、メッシュデータは必ず三角面のみで
構成されている必要があり、また面の法線が外から見える側へ向いていなければなりません
面が表向きか裏向きかは、Blender側の機能で可視化することができるので
まずは法線の向きが正しいか確認しましょう。
画面右上のビューポートオーバーレイ→面の向き で切り替えられます。
(青で表示される面は表向き、赤は裏向きを意味します)

なお、多角形の面についてですが、こちらは一通りの作業が終わった後の仕上げとして
三角面化を行うことをお勧めします。最初に三角面化してしまうとモデルの微調整などの際に
編集しづらくなってしまいます。


法線の向きが問題ないことを確認したら、次はマテリアルの設定を行います。
X4の艦船Mod作成においては、Blender内で設定したマテリアルのプロパティは
エクスポート時にマテリアル名以外の一切が無視されるので、テクスチャなどの割り当ては
あくまで見た目の確認用であることに注意する必要があります。
以上の注意点を確認したら、実際の設定作業に移ります。

マテリアルの設定でまず最初にするべきことは、ゲームデータ上に存在する
マテリアルの名称を確認することになります。
名称に関しては "libraries\material_library.xml"内に記述されており
Blender内で設定する際は
のように登録されているマテリアル名に従う必要があり、Blender内で
指定したマテリアル名の参照がエクスポート時に自動的にメッシュデータに埋め込まれます。

Tips: 新しいマテリアルの登録方法

独自のテクスチャを使用した艦船Modが存在することかもわかる通り、マテリアルも
新規で登録することができます。
"libraries\material_library.xml"内にパッチを当て、記述を追加するだけなので、詳細については
バニラのファイルを参照、模倣してください。

(次のセクションへ続く)
上級2-3: オリジナル艦船を作ろう - モデルの下準備2
マテリアルの命名が完了したら、次はUVマップや頂点データの名前をX4が認識できる
物にする必要があります。基本的にはUVマップは"uv1" 頂点カラーは "col"
を使用します。(ほかにもペイント適用時のマスク用の頂点カラーなどもありますが
ここでは扱いません)
頂点カラー、およびUVマップの項目は

のようにデフォルトの画面レイアウト内の右下、プロパティウィンドウ内にあります。

ここまでくれば、もう少しの作業で"最低限船として機能するもの"レベルでの実装は完了です。

各種データ類の命名が終わったら、必要に応じてUVマップの編集、調整などを行い
テクスチャのマッピングがおかしくないか確認して次へ進みます。

Tips: バニラのテクスチャを画像編集ツールなどで開く方法

バニラの各種艦船の船体テクスチャなどは
"assets\textures\generic"内に格納されていますが
すべて .gz形式、圧縮アーカイブになっているように見えます。
このままでは開けないので、まずファイルを右クリックして、アーカイブを展開し
展開されたフォルダ内にある拡張子のないファイルを選択して右クリック→名前の変更
でファイル名の末尾に ".dds" を付け、拡張子を変更すると、通常通り画像編集ソフトで
参照、編集ができるようになります。
(名前の変更はファイルを選択してF2キーでも可能。Win11の場合はShift+右クリック)

※一部のツールは .gzのままでも読み込むことが可能な場合もあります。
上級2-4: オリジナル艦船を作ろう - ノード類の配置
上のセクションでは、Blender内でオブジェクトのデータ、マテリアルの名称を整えましたが
これだけではただの3Dモデルのままであり、船としては機能しません。

このセクションでは、船として機能させるための各種設定を行っていきます。

まずは、コンポーネントの配置です。
上級1: コンポーネント配置を変更しよう 触れたように、艦船にはエンジンやタレットなど
複数のコンポーネントが配置されています。これらのコンポーネントの中でも
コックピットの位置設定は最重要であり実装が比較的容易な、大型、特大型艦船の場合も
ブリッジの位置と内装データの参照がないとそもそも船を操縦することすらできません。

なので、最初に船として機能させるのに必須となる
コンポーネントの配置を済ませてしまいましょう。

Blender内の作業での大型、特大型艦船の最小構成は以下の通りです:

- メイン船体のオブジェクト ┣頂点カラー ┣UVマップ ┗マテリアル - コリジョン(当たり判定)データ - コックピットの位置 - プレイヤーの位置 - エンジンの位置

上記のリストのうち、コリジョンデータに関しては最後に行うので、ここでは
コックピットの位置、プレイヤーの位置、エンジンの位置の設定を行います。

これらの位置の設定は、"エンプティ"タイプのオブジェクトに
Egosoft Blender Mod Tools でデータの設定を行うことで可能です。

まずはEgosoft Mod Toolsのタブを開き、データを付与したいエンプティを選択してください。
選択したら、タブ内の "Connection Tags"のリスト内から "cockpit" にチェックを入れます。

これと同様の手順で "playercontrol" と "large engine standard hittable"
が設定されたエンプティを配置すれば
とりあえずは最小構成のコンポーネント配置が完成となります。

注意: 大型、特大型艦船の場合、エンジンは必ず何らかのグループに属している必要があります。
エクスポート後はバニラの大型艦船などのコンポーネントファイルを参考に
グループ設定を忘れずに行ってください。
(Egosoft Blender Tools側でもグループの設定は可能ですが長くなるので省略しています)


注意: エンプティのオブジェクト名はエクスポート時にそのまま使用されるため
問題を起こす可能性のある名前は使用しないようにしてください。

例:
- 2バイト文字全般
- 空白文字(スペース)
- アンダースコア以外の記号全般


Tips: エンプティに設定するコンポーネントタグの例
Egosoft Toolsで設定できるタグは、実際のバニラ艦船のコンポーネントファイル内にある
武器、タレット、エンジンなどの定義内にあるタグと同様のものを指定すると
スムーズに作業を進められます。

- engine large standard
- turret large standard missile combat
- shield extralarge standard

etc...
上級2-5: オリジナル艦船を作ろう - コリジョンデータの生成
最低限必要となるコンポーネントの配置が終わったら
エクスポート前の最後の仕上げに取り掛かります。

X4では、一般的なカプセルやメッシュコライダーの代わりに
複数パーツに分けられた特殊なコリジョンオブジェクトを使用してオブジェクトとの接触判定を
計算しており、このコリジョンオブジェクトの生成にEgosoft Blender Mod Toolsの機能が
必要となります。

コリジョンデータの生成には、まずコリジョンの生成対象としたいオブジェクトをすべて選択し
Blenderのオブジェクトモード内で "オブジェクト→V-HACD→Convex Hull"を選択します

選択すると、コリジョン生成時の計算パラメーターを指定するウィンドウ(画像を参照)
が表示されますが、ひとまずは設定を変更せず、コリジョン生成を実行してください。


生成処理が完了すると、オブジェクトの形状に沿って複数に分割された大量の
オブジェクトがシーン内に追加されるはずです。
これらのオブジェクトは基本的に手動で編集するものではないので
位置を動かしたり、スケールを変更したりしないようにしてください。
削除するのもNGです。

ここまでくれば、あとはエクスポートするだけです。
上級2-6: オリジナル艦船を作ろう - エクスポートと仕上げ
メッシュデータ、コンポーネント、コリジョンデータの設定が終わったら、最後に
X4で使用されるフォーマットでエクスポートする必要があります。

注意: エクスポートを行う前にBlenderのファイルを保存し
"P1 Converter LOCAL"のショートカットから
エクスポーターを起動しておく必要があります

一連の処理はEgosoft Blender Mod Toolsが自動で行うため、各種データの設定に問題が無ければ
Egosoft Mod Toolsのタブ内にある"export(XML)"ボタンを押せば処理が開始されます。
実行前に"Class"の設定からオブジェクトクラスを選んでおけばすこし
XML編集時の手間を減らすことができます。


ボタンを押した後は、エクスポーターのコンソールウィンドウ内に
各種報告が出力され、正常に完了すれば "p1data"フォルダ内に

ファイル: "[Blenderのプロジェクトファイル名].xml"
ファイル: "[Blenderのプロジェクトファイル名]_data.ani"
フォルダ: "[Blenderのプロジェクトファイル名]_data"

が生成されているはずです。ここまでくればもう最終段階ですね。
上記の3つのデータをあなたのModフォルダ内の対応する場所へコピーし
参照するブリッジのモデルの指定を行い
XML内の記述の調整やindex\components.xml、index\macros.xml、libraries\ware.xmlへの登録
というおなじみの作業済ませれば、特に問題が無い限り実際に
ゲーム内で船として使用することができます。お疲れ様でした。

Tips: コックピット/ブリッジのモデルの指定方法

バニラの艦船のmacroやコンポーネントファイルの記述と同様に
船のコンポーネントファイル内でタグに"cockpit"が指定されているconnection
にmacroファイル側からコックピットのmacroを割り当てることで
コックピットの内装を指定できます。コックピットが指定されていない場合、たとえば
カスタムゲームスタートで今回作成した船を開始時の船にしてゲームをロードした際
コックピットが存在しないことによってロードに失敗し、メインメニューに戻されるという
問題が発生します、ご注意ください。

【工事中】上級2-SP: トラブルシューティング【作業中】
開発作業中に発生することがある問題と
想定される原因、対処法の例です。

問題:
複雑な親子関係を持つオブジェクトのエクスポート時にエラーが出る

原因:
Egosoft Toolsが対応していない構造の親子関係が存在する

解決策:
基本的にX4のMod開発では親と連動して動くもの以外に親子関係の指定は不要なので
親子関係を解除するか、ネスト(多重階層化)しないようにする

====================

問題:
ゲーム内で表示されるモデルがマゼンタ色になっている

原因:
マテリアルの参照が間違っておりテクスチャなどを正常に読み込めない

解決策:
Blender内でマテリアルの命名を確認し、再エクスポートする
マテリアル参照はメッシュデータ内に埋め込まれるためコンポーネントファイル側の
マテリアル参照を変更しただけでは解決しない

====================

問題:
モデルの向きがおかしい

原因:
ゲーム側とBlender側で座標系が異なる X4はY-Upを使用し、BlenderはZ-Upを使用している

解決策:
Egosoft ToolsはBlenderとX4間での座標系の違いを考慮してエクスポートするため
Blender側で自主的にY-Upに合わせたり、-Y方向が前になるようにオブジェクトの向きを設定
する必要はない。Blender内の座標系に合わせ、+Zを上、+Yを前として作業する

====================

問題:
オブジェクトの位置が中央からずれている

原因:
オブジェクトの原点位置が見かけ上の中心点から外れている

解決策:
オブジェクトモードからオブジェクトの原点位置を再設定する。
必要に応じて原点を設定→3Dカーソルへ とすることで任意の位置を原点に指定できる。
【工事中】上級3-1: しっかりした船を作る【作業中】
バニラの艦船と同じように完全な機能を備えた船を作る方法を解説していきます

(作業中)
おまけ: XML内の各種パラメーターの解説(工事中)
Steamのテキストフォーマッティングが貧弱すぎて見やすく書くのが難しい……
(画像を張り付けたほうが見やすいだろうけどパラメーター名コピペできないのも不便だよね)

テキストフォーマッティングが貧弱で厳しいので以下のスプレッドシートで解説しています:

https://docs.google.com/spreadsheets/d/1N9d1kX4yBdTecxEXxLEZesgDwdGmzkqM2LVfn_urHLk/edit?usp=sharing

その他: ツール、情報、資料等
Egosoft 公式Discord: https://discord.gg/kDNV59f3J3
(Mod開発に関するチャンネルがあります。ただ、そもそも
英語できる人はすでにここの住人なのでは??? とも)

ツール類

  • XR Converter Model Picker[www.nexusmods.com]
    XR Converter用のコマンドライン引数を生成/実行できるGUIツール(自作)
  • X4 Sector Creator[www.nexusmods.com]
    (セクターの配置やステーション、ゲート接続の設定ができるGUIツール - 作者: Ven0maus)
  • X4 Code Complete[github.com]
    (VS Code 用の入力補完プラグイン - 作者: archenovalis)

XML編集関連

"jobs.xml" 用のdiff patch
上の画像のように <level exact="1"/> と <variation exact="0"/> のよくある設定の代わりに
<loadout ref="[loadouts.xml内で定義した装備構成]"/>とすることで
jobs.xml内の定義によって生成されるNPC艦船に
必ず特定の装備を搭載させられるようになります。

非公式サンプルファイル

- ARG ネビュラ(自作)[drive.google.com]
19 comentarios
gso25mm  [autor] 3 ABR a las 7:52 a. m. 
お知らせ:
ツール類に関して新しく2項目追加しました。
どちらも高度なMod開発向けのものになります。

ガイド自体に関しても余裕があればMDスクリプト関連の内容を
追加していこうと予定しているので気長にお待ちください。
gso25mm  [autor] 16 FEB a las 12:27 a. m. 
お知らせ:
モデルインポート用ツールについての説明を新しいほうのツールである
X4 Converter Blender Addon 基準のものを追加しました。
古い方に関してはそのまま残してあります。
白狼 碧 15 FEB a las 11:44 p. m. 
すみません、それらしいフォーラムを見つけたのでここに投下しておきます・・・

{ENLACE ELIMINADO}
白狼 碧 15 FEB a las 9:21 p. m. 
細かく解説していただき助かっております。
読みながら確認していたのですが、上級1-1に乗っている XR Converter のリンク先のフォーラムが消滅しており、DLすることが出来ません。どこかDL出来る場所が他にあれば教えて頂けると助かります
gso25mm  [autor] 2 FEB a las 12:02 a. m. 
お知らせ:
ガイドの内容に関して、書いている自分自身は当然わかるのでいいんですが
なにかここが分かりにくい、意味が伝わらなかったなどありましたら
フィードバックをいただけると改善できるかと思います。
gso25mm  [autor] 25 ENE a las 11:25 p. m. 
お知らせ:

上級2-1 - 2-6オリジナル艦船を作ろう の部分を仮実装しました。
基本的なModの製作がすでにできることを前提としているため
3Dモデルの設定準備と関係が無い部分は省略しています。
Schwarzemona 2 ENE a las 1:20 a. m. 
ありがとうございます!
gso25mm  [autor] 2 ENE a las 1:14 a. m. 
@karius
もちろんOKです。
自分はスクリプト書くのはほかで経験あっても
X4のようにXMLでそれをやるというのがかなりつらくてMDとAIScriptは放置状態だったので
この辺をカバーできるMod開発者が増えるのはうれしいですね。
Schwarzemona 1 ENE a las 10:01 p. m. 
gso25mmさんのアイディアを元に、艦隊の「指揮官に従属」命令を陣形を組むだけに変更したMODを作成したのですが、公開してもよろしいでしょうか?
Schwarzemona 1 ENE a las 12:50 a. m. 
ありがとうございます! 触らせていただきます!