かるく

おゲームめいん。

【Hearts of Iron Ⅳ】MOD製作 イベント製作:基礎①【初心者向け】

 HoI4プレイヤーの皆様、こんにちは。私です。

 さて、この記事を開いていただけたということは、HoI4のMOD製作に、真剣にせよ、好奇心にせよ、多少なりとも関心があるのだと思います。今回は、HoI4のMODの中でも重要な位置を占める「イベント」の製作について触れていきます。

 

 この記事内ではフォルダの位置を「Documents/Paradox Interactive/Hearts of Iron Ⅳ/mod」のように表記したり、最低限のMOD製作の知識を前提とするものです。これらについてあまり自信がない方は、事前にこちらの記事をお読みいただけると理解の一助になるかもしれません。

calustrategy.hatenablog.com

 

 また、今回から『メモ帳』ではなく、私が普段使っている『Notepad++』を使いたいと思いますので、念のために同じ環境でMOD製作を行いたいという方や、これから本格的にMOD製作を行いたいという方は以下のようなサイトを参考に『Notepad++』をインストールしてみてください。

www.howtonote.jp

 

 

1.「イベント」

 「イベント」はMODの中でも重要な位置にあります。皆様もゲームプレイの最中に様々なイベントによって物語が進行したり、戦略に大きな変化が訪れるという体験を経験なさっていると思います。そんなMODの中でも応用を効かせやすいMODの製作方法について、簡単に解説をしていきたいと思います。

 

1-1.作業フォルダ

 HoI4のMODは、フォルダによってそのデータが何に関するデータなのかを大まかに判断しています。そのため、まずは「イベント」のデータがどのフォルダに納められているのかを確認し、改変する前のデータを確かめましょう。

 

 「Steam」の「ライブラリ」から「Hearts of Iron Ⅳ」のタイトルを右クリックして、「管理」から「ローカルファイルを閲覧」をクリックします。そうすると、「Heart of Iron Ⅳ」のデータがある場所を見ることができます。

f:id:calufate:20200210161013p:plain

 この中のどのフォルダで作用するのかというと、わかりやすく「events」というフォルダがありますね。中を開いてみましょう。

f:id:calufate:20200211015841p:plain

 こちらは「history/countries/」にある「国家データ」のように単純に国ごとに分かれているわけではありません。例えば「AcePilots.txt」や「Baltic.txt」、「CapitulationEvents.txt」、「Decisions_Events.txt」など、明らかに国家単位とは関係ない名前まで見受けられます。これは大規模で世界中に影響を及ぼすようなイベントだったり、国家が特定の行動をとればどの国でも発生するようなイベントだったりと、国家単位で管理するのは不適切だと思われるイベントが多く存在しているからです。この中で言えば「AcePilots.txt」には「エースパイロットの誕生」や「エースパイロットの死亡」と言ったどの国でもあるようなイベントについて記述されています。

 

1-2.MOD製作

 「イベント」に関連するデータが「events」にあるということがわかったので、早速MODを作っていきましょう。まずは白紙のMODを用意します。

 前回と同様に「Hearts of Iron Ⅳ」を起動して「ランチャー画面」に移り、「MOD」から「MODツール」、「MODを作成」し、「名称」「バージョン」「ディレクトリ」「タグ」を適当に決めていきます。今回は皆様の任意の名称やディレクトリで問題ありません。私は前回作った『Shoshinsha Test Mod』を今後使う予定もないので、再利用していきたいと思います。なので、皆様のディレクトリは「ドキュメント/Paradox Interactive/Hears of Iron Ⅳ/mod/(任意のディレクトリ名)」になり、私のディレクトリは「ドキュメント/Paradox Interactive/Hears of Iron Ⅳ/mod/shoshinsha_test_mod」になりますので、これからの作業では「shoshinsha_test_mod」の部分を「(任意のディレクトリ名)」に置き換えて作業を行ってください。

 また、私の場合は、前回作った中身は不要なので「mod/shoshinsha_test_mod/history」および「mod/shoshinsha_test_mod/gfx」は削除しておきます。このとき、私と同じように『Shoshinsha Test Mod』を再利用しようとしていらっしゃる方は、「mod/shoshinsha_test_mod/descriptor.mod」は削除しないようにしてください。これはMODに関する情報が記載されており、白紙のMODであっても必要なものです。誤って削除した方は「ごみ箱」から「descriptor.mod」を右クリックして「元に戻す」を選択してください。

 

 これで白紙のMODフォルダができました。

f:id:calufate:20200211022800p:plain

 イベントに関するMODを作りたいので、先ほど確認した「events」フォルダを新規作成から「mod/shoshinsha_test_mod/events」となるように作ってあげます。

f:id:calufate:20200211023017p:plain

スペルミスに注意!

 これで作業フォルダを用意できました。ここまでは前回と同じですが、困ったことに今回は改変元のデータというものが存在しません。なぜなら、前回が「Franklin Denalo Roosevelt」さんのデータを改変するだけだったのに対して、今回は一から新しいイベントを作るからです。

 こういうときは、すでにあるイベントを参考にしながら作っていきましょう。試しに「バニラのHoI4のデータ」にある「events/Germany.txt」を開いてみます。

f:id:calufate:20200211024358p:plain

 一気にやる気を失ったかもしれませんが、これでも一部です。さらに下にスクロールしていくと、全部で6,093行あるようです。このようにドイツ並みの規模の国家でイベントを作ろうとするとこれだけの記述量が必要になります。気になって確認しましたが、MODの『The Great War』の最大サイズのファイルであるロシアのイベントでは804行なのに対し、『Kaiserreich』のネーデルランドのイベントは19,482行ありました。狂ってる。

 もちろん、量が多ければ良いMODというわけではありませんし、個人でそれだけの量のイベントを最初から作成できるかというのは怪しいですので、バージョンアップという形でどんどん追加していくのが望ましいと思います。

 

 さて、参考にしようと試しに「events/Germany.txt」を開いたわけですが、全く意味がわかりません。この意味が分からない記述の羅列であるここから何を参考にするのでしょうか。

 いくらか下へとスクロールしていき、「#」がコメントアウトつまり製作者のただのメモ書きということに気を付けると、何度も同じ文の構造が繰り返されているのがわかります。

 それが

add_namespace = germany

country_event = {

 id = germany.数

 title = germany.数.t

 desc = germany.数.d

 picture = GFX_XXXXXXXXXXX

 

 (is_triggered_only = yes) たまに無い。

 

 なんかごちゃごちゃ。

 

 option = {

  name = germany.数.a

  なんかごちゃごちゃ。

 }

 たまにoptionが複数ある。

}

という構造です。他に「events/France.txt」や「events/Britain.txt」を開いても「germany.数」が「france.数」や「britain.数」に変わっているだけで、構造自体は大きく変わりません。そして、複数のファイルを見比べると、その変わっている「germany」や「france」、「britain」というのがファイルの一番最初に記述されている「add_namespace =」に書かれてあることに気が付きました。

 つまり、「add_namespace = 」で適当な名前を付けて、同じような文構造を再現すればイベントを作成できそうです。

 

 早速、試してみましょう。

 まずは「mod/shoshinsha_test_mod/events/」にテキストファイルを新規作成して「shoshinsha_test_mod.txt」という名前にしてみます。

f:id:calufate:20200211032242p:plain

 「mod/shoshinsha_test_mod/events/shoshinsha_test_mod.txt」を開くと何も記入していない白紙の画面が出てきます。

 そこに先ほど見たイベントファイルと同じような文構造にするために「add_namespace」と「country_event」を追加していきます。「add_namespace =」で宣言した言葉は何度も繰り返して書くことになりそうなので、「shoshinsha_test_mod」ではなく「stm」と省略しておきたいと思います。また、「picture =」は明らかに写真のことなので、写真を選ぶのも面倒なので今回は適当に「events/Germany.txt」の「id = germany.1」にある「picture = 」をそのままコピーしました。

f:id:calufate:20200211032936p:plain

 とりあえず、記入していきましたが、どことなく見づらいです。HoI4のMODでは「Tabキー」による段落分けは特にMODの動作に影響を及ぼしませんので、見やすいように「Tabキー」を使って「id」や「title」の前に空間を開けていきましょう。ちなみに「Tabキー」はテキストファイルでは段落を分けるのによく使うので、文字の並びを整えたいときには活用しましょう。

f:id:calufate:20200211033251p:plain

 これで少しは見やすくなりました。詳しいことはわかりませんが、これでイベントができていると思われます。なので、試しにこれを保存してからこのMODを起動してみました。

 すると、アメリカプレイでもソ連プレイでもこのようなイベントが発生しました。

f:id:calufate:20200211033749p:plain

f:id:calufate:20200211033804p:plain

 おそらく他の国でも同様のイベントが発生していると思われます。バグか何かのように見えますが、このイベントを見ると、イベント名が「stm.1.t」、イベント文が「stm.1.d」、選択肢が「stm.1.a」になっています。もしや、と思い、イベントに記述した「option」を一つ追加すると、このようなことになりました。

f:id:calufate:20200211034408p:plain

f:id:calufate:20200211034343p:plain

 つまり、このようにイベントを書くと、すべての国家に対して「stm.1.t」という名前で「stm.1.d」という説明文で「stm.1.a」や「stm.1.b」という名前の選択肢があるイベントを追加することができるということがわかりました。

 

 フレーバー的なイベントだと特に効果も必要ないので、本質的な部分ではこれだけで十分ではありますが、そうだとしてもさすがに「stm.1.t」や「stm.1.d」、「stm.1.a」では味気ありません。なので、これらに名前を与えてあげたいと思います。

 これらに名前を与えるには「localisation」というフォルダの中身をいじっていきます。「localisation」は言語に関するファイルが入っている場所で、中身を開くと「_l_(言語).yml」というファイルがたくさん並んでいます。これらは、HoI4の言語選択で当該言語を選択した場合に、そのファイルを読み込んで、その中にある言葉を表示するようになっています。皆様がサブスクライブしているであろう『Japanese Launguage Mod』ではこのファイルのうち、「_l_english.yml」を改変し、中身を日本語にすることで、言語選択を英語にしたときに日本語の文章が読み込まれるようになっています。イベントの名前や文章もここによって日本語にされているため、上記のイベント「stm.1」を編集するには、これを真似します。

 

 まずは「mod/shoshinsha_test_mod/localisation」を用意します。

f:id:calufate:20200211043602p:plain

 そして、中身に新規作成からテキストファイルを作り、名前を「stm_l_english.yml」にします。このとき、拡張子「.txt」を「.yml」に確実に改変し、種類が「YMLファイル」になっていることを確認してください。念のため、「stm_l_english.yml」の「l」はアルファベットの小文字の「L(エル)」で、「Launguage(言語)」を意味していると思われます。

f:id:calufate:20200211043925p:plain

 「.yml」はテキストエディタで問題なく開けると思うので、「Notepad++」で開いてください。白紙の中身が表示されるので、以下のように書いてください。

f:id:calufate:20200211044134p:plain

 ここから改行し、半角スペースを空けてから、さらに以下のように追記してください。

f:id:calufate:20200211044500p:plain

 察しの良い方はわかったかもしれませんが、「stm.1.t」のイベント名をその後ろの「""」内に、「stm.1.d」のイベント文をその後ろの「""」内に、「stm.1.a」の選択肢名をその後ろの「""」内に記入していきます。今回は適当な名前を付けていきます。

f:id:calufate:20200211044910p:plain

 これを保存し、ゲームを起動してみます……が、イベント名は「stm.1.t」のまま、イベント文も「stm.1.d」のまま、選択肢も「stm.1.a」のままでした。

 そこで「HoI4WIKI」をチェックしてみると「ガイドライン」にこのような記述がありました。

 エンコードが何なのか良くわからない方も多いかもしれませんが、大雑把に言えば「訛り」のようなものだと思って大丈夫だと思います。言語ファイル(.yml)では、UTF-8-BOMという方言でしゃべるのに、他のテキストファイル(.txt)と同様にUTF-8という方言でしゃべっているため、相手に良く伝わっていないのです。なので、訛りを修正してあげる必要があります。

 「Notepad++」には簡単にエンコードを変更できるツールバーがあるので、それを利用します。「mod/shoshinsha_test_mod/localisation/stm_l_english.yml」を開いててツールバーから「Encoding」をクリックし、「Encode in UTF-8-BOM」を選択し、保存します。

f:id:calufate:20200211050436p:plain

 この状態でゲームを起動すると、このようなイベントが発生しました。

f:id:calufate:20200211050545p:plain

 

2.最後に

2-1.まとめ

  今回は何の効果もないフレーバー的なイベントを追加するMODを作りました。ゲームをより盛り上げるためにも、フレーバー的なイベントは大切な要素になると思います。

 しかし、これだけでは盛り上がりに欠けるのも確かですし、もう少し影響のあるイベントを追加したいという方もいらっしゃると思います。全くもって同意するところではありますが、MOD製作では基本的なことを理解し、自ら応用する方法を考えることが大切になってきます。自分の想像するMODの手法がすべて用意されているわけではないので、どのような道筋でMODを再現するのかは自分で考える以外に方法がありません。なので、今は基本的なことを理解した上で、応用をする基礎を作り上げることに注力していただくのが一番かと思います。

 地道なことも多いMOD製作ですが、出来上がったMODが実際にゲーム上で動作するのは非常に楽しいです。ゆっくり焦らずにMOD製作の技術を身に着けていきましょう。

 

2-2.おまけ:MODの競合

 MODは「既存のデータを上書きしたり、新規のデータを追加する」ことによって望む状態を作り出すものであることは前回の記事でも述べましたが、既存のデータを上書きすることには大きな問題点が含まれます。

 それが「MODの競合」です。

 皆様の中にも複数のMODを同時に使用しようとしたら、競合して片方しか適応されない、という事態に遭遇した方はいらっしゃると思います。それがなぜ発生するのかと言うと、既存のデータを改変するMODを同時に使用すると、改変されたデータを片方しか読み込めないからです。具体例を交えながら考えていきましょう。

 

 私は以前の記事で「history/coutries/USA - USA.txt」を改変して、「Roosevelt」さんの顔と名前を自分にするMODを作りました。今度は全く別の新しいMODを作成し、「history/coutries/USA - USA.txt」を改変して初期研究枠を6つにするMODを製作したとします。

 このとき、同時にMODを適応したらどのようなことが起きるでしょうか?

 この場合、HoI4はアメリカ合衆国のデータを読み込む際にMODを優先して読み込みますが、「history/countries/USA - USA.txt」が存在するMODは二つあります。HoI4はアメリカ合衆国のデータとして一つの「history/countries/USA - USA.txt」しか読み込めません。結果として、片方の「history/countries/USA - USA.txt」だけが読み込まれ、「大統領の顔と名前が自分になる」か「初期研究枠が6つになる」のいづれかしか効果を発揮しません。これが競合の原因です。

 つまり、あまりに多くのデータを改変するMODはたくさん競合してしまうことになるため、MOD製作の際には必要最低限のファイルだけ改変する方が、競合の可能性も減らせ、動作も軽くなるのでおすすめです。