かるく

おゲームめいん。

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

f:id:calufate:20200211122508p:plain

 皆様、こんばんは、私です。

 バレンタインシーズンも終わり、男性諸兄におかれましてはホワイトデーのお返しで頭を悩ませていることでしょう。……そうでもない? それは知らない。まぁ、HoI4プレイヤーの皆様であれば新DLCLa Résistance』(抵抗する者)の発売の方が重要でしょうか。

 さて、前回はイベントを目的の条件下でのみ発生するように調整しました。しかし、それらはあくまで何の効果も発揮しないイベントでした。もちろん、フレーバー的なイベントもゲーム展開に味を持たせるために重要なものではありますが、よりダイナミックにゲームに変化を加えるためには様々な効果をもたらすイベントが必要です。

 今回は、イベントに効果を付与させてよりダイナミックに場面を動かしていくイベント製作についてみていきましょう。

 

 今回の記事では、根本的なイベント製作方法についての知識を前提として話を進めていきますので、それらについて自信のない方は先に以下の記事を読まれると、理解の一助になるやもしれません。

calustrategy.hatenablog.com

 

 

1.効果のあるイベント

1-1.効果の付与

 新しく1からイベントを考案するのも面倒なので、前回使った「帝都不祥事件(二・二六事件)」に効果を加えていくことにしましょう。

 ちなみに、「帝都不祥事件」のイベントはこんな感じでした。

f:id:calufate:20200212232931p:plain

 「帝都不祥事件」は青年将校たちのクーデター未遂ということで、このイベントでは「安定度の低下」というデバフ効果を実装したいと思います。

 

 このようなイベントまたは国家方針、ディシジョンなど様々な場面において効果を発揮するのが「Command」です。「安定度の低下」もそうですし、「研究ボーナスを付与」「特定の州を中核州へ」「特定の国家を傀儡へ」「建造物を追加・削除」というその場その場で効果が発揮するものは、「Command」を用います。「Command」はかなり応用が利くものですので、発想次第でかなり面白い効果を発揮させることも不可能ではありません。そこはMOD製作者の腕の見せ所と言えるでしょう。

 

 では、早速、目的の「Command」を探して使っていきましょう。

 英語が読める方は「Commands」を、英語を見たくもない方は「MOD/コマンドリスト」を参考に目的の「Command」をまずは見つけましょう。当該ページを開き、キーボードの「Ctrl」と「F」キーを同時押しで右上に検索欄を出し、「Commands」の場合は「stability」で、「MOD/コマンドリスト」の場合は「安定度」で検索すると「add_stability」という項目と「set_stability」という項目の2つが見つかると思います。

 両者も使用例にあるように「add_stability = 0.1」や「set_stability = 0.5」のように等号の先を小数で指定して使うものです。この場合、小数は100分率で考える必要があるので、「0.1」は「10%」のことであり、「0.5」は「50%」のことです。そして、前者が「add(加える)」とあるように「現在の値に加える」ものであり、後者が「set(設定する)」とあるように「現在の値をこの値にする」ものです。例えば、現在の安定度が90%の国家で「add_stability = 0.1」の効果が発揮すると安定度は90%に10%を追加して安定度は100%になりますし、「set_stability = 0.1」の効果が発揮すると安定度は90%から10%になります。90%から10%まで安定度が落ちるイベントってなんだ……。

 

 今回は「現在の安定度を増減させる」ことを目的としているため、より適切な「add_stability」の方を使っていきましょう。

 ご存知の通り、多くのイベントでは選択肢を選んだ時に効果を発揮します。なので、今回は選択肢の段落である「option = { }」にそのまま追記していきましょう。

f:id:calufate:20200226163837p:plain

 今回は「add_stability =」の等号の向こう側を「-0.05」にしています。「add_stability」は安定度を増加させる「Command」ですが、その増加する数字が「-(マイナス)」であれば当然減少方向に作用してくれます。今回は「-0.05」なので「安定度を5%減少する」という効果になっているはずです。

 

 早速確認をしていきましょう。

 まずはMODを有効にしてからHoI4を起動し、日本を選択してイベントが発生するまで待ちます……というのも不毛なので、こちらから強引にイベントを起動させてみましょう。

 HoI4でキーボードの「半角/全角キー」を押すと左の方に枠が出てくるのはご存知の方も多いかもしれません。

f:id:calufate:20200226165919p:plain

 これは「Console」で、ここから特定のコマンドを利用することで、所謂チート的なことが行えます。まぁ、チートはさておき、MOD製作者にとっては自作したイベントや国家方針の確認などの際に手早く確認が行える機能なので便利です。

 早速「Console Command」を入力して、と言いたいところですが、通常環境で「半角/全角キー」を押したら入力が日本語になってしまい、かといってもう一度「半角/全角キー」を押したら枠が消えてしまうというジレンマに襲われると思います。私の場合はWindowsの機能で「半角/全角キー」の本来の機能を「Shift + Enter」で行うようにしているため、これを起動させても半角入力が可能になっています。

 今から皆様にはその設定を、というのも面倒なので、ここは大人しく枠を出現させてからキーボードの「Caps Lock」を押して強制的に半角入力しかできないようにしてみましょう。私の環境では完全に同じ状況が再現できないので、確実にできるかはわかりませんが、これでおそらく「Console」を開いて半角入力ができるようになったと思います。駄目だったら、コメントか何かで教えてもらえたらまた何か方法を考えます。ちなみに、「Caps Lock」の解除は再び「Caps Lock」を押せば大丈夫です。

 この「Console」で使える「Console Command」も多くあるので、確認したい方は「Console Commands」か「データ集/チートコード」を見ましょう。

 イベントを確認するための「Console Command」は「event」という非常にわかりやすいものです。使い方としては「event」と入力し、半角スペースを空けてから「イベントID」を入力すればそのイベントが発生します。今回「帝都不祥事件」の「イベントID」は「stm.1」なので「Console」に「event stm.1」と入力し、Enterを押すと「帝都不祥事件」が発生します。

f:id:calufate:20200226171935p:plain

f:id:calufate:20200226171957p:plain

 マウスカーソルを選択肢の上に置いてみたところ、狙い通り「安定度の基本値に-5%」という効果があります。

 ちなみに、このとき「Console」を見ると、このイベントの発生条件が確認できます。以前実装した通りなので問題ないこともわかります。

 

 以上で選択肢に効果を与える、という基本事項は達成できました。あとは「Commands」や「MOD/コマンドリスト」を参考にしながら目的の効果を同じように付与していくことで、自分が望む効果のイベントを作れるようになると思います。

 

1-2.連続するイベント

 上ではイベントの選択肢に「Command」を使って効果を付与する方法をみてきました。この「Command」の中には様々な効果のものが存在し、どのようなイベントを作りたいかによって使い分けていくことになりますが、その中でも使用頻度が非常に高く、MODを製作上では欠かせない「country_event」について触れていきたいと思います。

 

 「country_event」の効果は「特定のイベントを発生させる」というものです。つまり、あるイベントが発生し、そのイベントの選択肢によって、さらにイベントが発生する、という連続するイベントを作ることができます。

 例えば、「ダンツィヒか、戦争か」では、国家方針でドイツが「ダンツィヒか、戦争か」を完了することで、ポーランドにドイツに屈するか対抗するかを選択するイベントが発生します。さらにそのイベントによるポーランドの選択によって、ドイツにポーランドダンツィヒを差し出したあるいは戦争を選んだという報告のイベントが発生します。

 これらのイベントは、事前のイベントによってさらに後続のイベントが引き起こされる、という連続した構成になっています。このような場合に「帝都不祥事件」のような特定の条件下での発生とするには不都合が多いため、「country_event」によって後続のイベントを発生させていくという形をとることになります。

 

 と、長々と説明しましたが、実際にやってみた方が早いでしょう。

 

 「帝都不祥事件(二・二六事件)」では連続するイベントは少しばかり考えづらいですが、あくまでMOD練習なので強引でも適当にイベントを展開させていってみましょう。MOD製作は何をやったって良いのです。

 というわけで、内容は後々考えるとして「帝都不祥事件」の選択肢次第で発生するイベントを新しく用意します。

f:id:calufate:20200227115835p:plain

 用意しました。新しいイベントは基本的に下に新しくコピーして貼り付けをしてから数字を一つ増やせば完了です。皆様の場合は「stm.2」になるかと思いますが、私の場合は前回のおまけで一つイベントを追加していたので、「stm.3」になっています。この数字は必ず一つずつ増やさないといけない、という類のものではありませんので、「stm.2」を作らずに「stm.3」を作っても問題ありません。

 さて、内容は決めていないこのイベントですが、このまま実装してこのイベントIDを「country_event」で発生させる、というだけでは不都合があるということにお気づきでしょうか。「trigger = { }」が存在せず、「何の条件もなく発生するイベント」になってしまっていますね。これでは以前試したように、勝手に何度もこのイベントが発生することになります。あくまで一つ前の「帝都不祥事件」の選択肢の結果を受けて発生するイベントにしたいのに、それでは不適切です。

 そこで、今回はこれを「country_event」によってのみ発生するイベントであることを指定するために「is_triggered_only = yes」(トリガーによってのみ発動)を使っていきたいと思います。これは「fire_only_once = yes」と使い方は同じです。「country_event = { }」の中に直接記述します。

f:id:calufate:20200227121132p:plain

 これでこのイベントは「country_event」という「Command」でのみ発生するようになりました。勝手に何度も発生して鬱陶しいという事態にはなりません。

 発生するイベントを用意できたので、実際に「帝都不祥事件」からこのイベントを発生させるようにしてみましょう。この場合は、他の「Commad」と同様に「option = { }」の中に「country_event」を記述していきます。

f:id:calufate:20200227121830p:plain

 「option = { }」の中にある「Command」の「country_event = { }」は「id = 」と「days = 」を指定する必要があります。「id = 」は当然、後から発生させるイベントのことです。そして「days =」はそのイベントが何日後に発生するのかを指定しています。勿論、すぐさま後続のイベントが発生する場合は「days = 1」やもしくはここは「hours = 」(時間)も使えるので「hours = 1」にすれば即座に後続のイベントが発生します。

 しかし、実際には多くの出来事は数日やそれ以上の期間をかけて起こっていくもので、選択肢を選んで即座に次のイベントが発生するのは違和感がありますし、何よりそんなに詰められてイベントを発生されてはプレイヤーが疲れてしまいます。

 なので、自分が実装したいイベントがどれほどの期間で進んでいくのか、どれくらいの頻度ならプレイヤーの負担にならないかはしっかりと考えながらイベントが発生するまでの日数は決めていきましょう。

 今回は「days = 2」となっているので、選択肢を選んだ二日後に「stm.3」が発生することになるはずです。早速、HoI4で確かめてみましょう。

f:id:calufate:20200227124456p:plain

f:id:calufate:20200227124516p:plain

 「Console」で「event stm.1」と入力し「帝都不祥事件」を発生させ、選択肢を押して丁度2日後に「stm.3」のイベントが発生しました。無事、「country_event」の実装を行うことができたようです。

 

 実装自体はここで完了ですが、折角ですので、選択肢を増やしたり、訳を追加してそれっぽい形にしていきましょう。

f:id:calufate:20200227143639p:plain

f:id:calufate:20200227143654p:plain

f:id:calufate:20200227143707p:plain

f:id:calufate:20200227143917p:plain

f:id:calufate:20200227143937p:plain

f:id:calufate:20200227143957p:plain

 というわけで、強引に「Console」でイベントを二回発生させて両方の選択肢を選びましたが、無事、それぞれのイベントが発生しました。例えば、ここから「譲歩」を選んだ場合にはより内戦を誘発しやすくしていったり、政体に影響を及ぼすようなイベントを継続して発生させると、より面白くなるかもしれません。

 

 連続するイベントの実装は以上です。お疲れさまでした。

 

2.最後に

2-1.まとめ

 「is_triggered_only = yes」のイベントはその利便性からかなり使用頻度が高くなると思います。選択肢を選んで効果が発揮しておしまい、ではなく、他国にも影響を及ぼすようなイベントの場合、そちら側の報告イベントも用意しなければ、勝手に数値が変更する、という奇妙な挙動になり、その国を操作するプレイヤーとしては納得がいかないでしょう。勿論、当該国家以外のプレイを想定しないMODであればそれでも大丈夫かもしれません。それは製作者次第ですので、労力と比較しながら検討すると良いと思います。

 これでイベントに関する基礎的な部分については解説したと思います。あとは「Command」や「Condition」にどのようなものがあるかを把握していけば、かなりのイベントが作れるようになると思います。ここまでお疲れさまでした。たくさんイベントを作ってMODを増やしていきましょう。

 

2-2.おまけ:二・二六事件

 さて、ここまで実装してきた「帝都不祥事件」ですが、多くの方が思っているようにできれば2月26日に発生させたいものです。勿論、HoI4には直接日付を指定したりすることはできません。

 少し詳しい話をするのであれば、例えば「date > 1936.02.25」「date < 1936.02.27」のようにしたとしても、「イベントが条件を満たしているか?」のチェックがデフォルトでは「20日ごと」に発生するため、あまりに期間が短いものについては発生せずに終わることになります。無論、そのチェックの頻度も変えることはできますが、頻度を高くしてしまうとゲームが重たくなるのであまり推奨できません。

 

 では、2月26日に丁度イベントを発生させることはできないのでしょうか。確かにHoI4では「N月N日」と日付を指定することはできませんが、非常に都合が良いことに「Command」の「country_event = { }」では「N日後」と日付を指定することが可能です。

 どういうことか、実際にやっていってみましょう。

f:id:calufate:20200227160621p:plain

 まずは「stm.1」を「country_event」でしか発生しないようにするために「is_triggered_only = yes」を追加。

 ここからですが、バニラのHoI4にある「history/countries/JAP - Japan.txt」を「mod/shoshinsha_test_mod/history/countries/JAP - Japan.txt」となるようにコピー。

f:id:calufate:20200227161039p:plain

 コピーした「JAP - Japan.txt」を開いて以下のように記述します。

f:id:calufate:20200227161539p:plain

 これはゲーム開始と同時に「Command」を使用し、ゲーム開始時である「1936年1月1日」から「56日後」である「1936年2月26日」に「stm.1」のイベントを発生させる、というものです。かなり強引な手法ではありますが、これによって「二・二六事件」を実装することも可能です。

f:id:calufate:20200227161716p:plain

 「二・二六事件」はゲームが始まったばかりの時期なので、この手法でも大きな問題はありませんが、これ以上に先となるとかなりゲーム展開などにも左右されるので、いつでも使える手段ではありません。しかし、このように序盤では使えないこともない手法ですので、何かに役立てば良いと思います。

 

 おまけは以上です。今回でイベントの基礎的な部分は終わりましたので、とりあえず、国民精神あたりを解説してから国家方針につなげていけたら良いかな、という風に考えていますが、予定は未定です。