「Stellaris」の新DLC「The Machine Age」発売は5月7日!

「Crusader Kings III」開発日記#37――Modの作成

CK3 開発日記

「Crusader Kings III」開発日記#37が公開されていましたので、その内容をご紹介。今回はModについて。本体発売前の開発日記です。

前回:開発日記#36――早く行かなきゃ


スポンサーリンク

開発日記

開発日記#37は、Modについて。

commonデータベースフォルダ。

  • 私たちはゲームにおいてModで幅広くさまざまなことを行えるようにしようとした。すなわち、80以上のデータベースオブジェクトフォルダ(一部にはサブフォルダもある)、非常に用途の広いイベントシステム構造、完全に変更可能なGUIシステム、historyファイル、ローカライゼーション、効果音、音楽などだ。ゲームのほとんどの部分を自分のニーズに合わせて変えられる。
  • 以下では全体的になにができるかよりCK2のMod制作者がワクワクするであろうことについて触れる。
  • ImperatorとCrusader Kings IIIのスクリプト言語は、Jominiと呼ばれる社内のグランドストラテジーライブラリをベースにしている。これはクラウゼヴィッツエンジン上でよりグランドストラテジーゲームに重点を置いたレイヤーとして振る舞うものだ。
  • Imperatorがリリースされたとき、私(注:CK3チームのプログラマーであるblackninja9939(Matthew)氏)はJominiから直接得られる情報や、上記の2つのゲームで共通する情報について多くの情報を投稿した。ご興味があれば私のGrand Jomini Modding Information Manuscriptスレッドをチェックするのをお勧めする。イベントスクリプトについてもっと知りたい場合は、開発日記#30がいい記事なのでぜひチェックしてほしい。

キャラクターインタラクション

  • CK2からの特に大きな変更点はキャラクターインタラクションだ。CK2では結婚の申し込み、宣戦布告、同盟などはほとんどハードコード化されており、後のパッチで「標的のあるディシジョン」を追加する機能が導入された。
  • CK3ではこうした機能をすべてオープンにし、統一されたキャラクターインタラクションシステムを使いたいと考え、すべての行動がスクリプトシステムを経由するようにした。これによって多くの利点があった。わずかなファイルの変更でAIがその行動を行うウェイトを変更できるようになり、また誰がその行動を行えるか、どんな人物と相性がいいかなども同様だ。そしてこれはもちろんMod制作者にも開放されている。
  • 誰がいいターゲットであるか、どのくらいの頻度で評価すべきか(これはパフォーマンスにとって重要だ)をAIに伝えることで、AIも改造したインタラクションを使うようにスクリプトできる。
  • インタラクションとのリンクにはまだハードコード部分があり、AIが簡単でない方法で使用する必要があるインタラクションの場合には特に多い。そうしたインタラクションはすべて明確だが、削除しようとするとゲームの読み込み時に「このインタラクションは必要なので元に戻してください」という警告が出る。この動作はインタラクションに限らずほとんどすべてのハードコードされたデータベースオブジェクトに適用される。

インタラクションが使用できるすべてのオプションのリストは省略します。

Modの組み合わせ

  • 複数のModを組み合わせるのはいつも少し厄介だが、多くの自作パッチを必要としなくていいように、互換性を向上させたいと思っていた。

「狂気(lunatic)」特性を上書きするファイル(上段)と変更後の特性の表示(下段)。

  • 少しでもこれを助けるため、新たなエントリーが別ファイルにある場合でも、キーによってデータベースエントリーを上書きできるようにした。つまり、「狂気」特性の中身を上書きしたい場合、特性ファイル全部をコピーしてその中のひとつのエントリーだけを変えるのではなく、自分のファイルに「狂気」特性の中身を含めることができるということだ。
  • これは他のmodのファイルにも適用され、自分のファイルが最初にロードされる限りは他のmodの特性その他のデータベース要素を上書きできる。(注:自分のファイルが最後にロードされる場合ではなく?)
  • 現在のところ、完全に上書きするのではなく定義を追加するのはサポートしていない。というのはそれには作り直さなければならないものが多く、さらにそれを広範囲にテストする必要もあるからだが、将来のために心に留めておいてはいる。

アラート・問題・通知

  • 開発日記#16で述べたように、ゲームを説明する新しいインターフェースユーティリティはすべて改造可能だ。つまりスクリプトを使って追加、削除、変更ができるということだ。
  • 通知とtoastsについてはもっともシンプルだ。commonフォルダに通知に関するデータベースエントリーを作成し、実行したい場所でsend_interface_message、あるいはsend_interface_toast エフェクトを使用する。
  • アラート、アドバイス、現在の問題(issues)については、すべて同じ「重要なアクション」システムを経由するが、違いは見た目や場所についてどのタイプを使用するかという点にある。こうした重要なアクションにはcheck_create_actionとeffectブロックがあり、両方とも作成された場合とクリックされたときの動作をチェックするインターフェイスエフェクトを実行する。
  • check_create_actionで実行される主なインターフェースエフェクトはtry_create_important_actionで、これはこのアクションタイプのUI要素を作成しようとし、通常はifチェックの後ろにある。
  • UI要素がクリックされたときのエフェクトブロックには、実行するのにいいアイディアがいくつかある。応答型のアドバイスであれば、start_tutorial_lessonを使用するのがいいだろう。アラートや問題の場合はopen_view_dataエフェクトを使用してアラートや問題の原因に対処するのに役立つウィンドウを開くことができる。

  • 注意事項:この開発日記を書いている間に1.0ではModで見るようなカスタムアイコンを追加しても実際には機能しないことがわかった。1.1では既に修正されている。
  • 提案は重要なアクションに似ているが、プレイヤーにとってどれだけ重要かをチェックするウェイトのフィールドと、ターゲットとなる可能性のあるものがどれかをチェックするスコアのフィールドがある。例えば請求権捏造の提案では、近くに捏造できる場所があるか、既にいくつの請求権を持っているか、既に請求権を捏造しているかによってウェイトが変わる。捏造を提案する称号のスコアは伯爵領の開発レベル、どれくらい容易に征服できるか、教派や文化を共有しているかなどを基にする。

スクリプトされたGUI

  • Imperatorと同様、インターフェースは信じられないほど改造可能で、GUIスクリプト言語は通常のデータベースやイベントスクリプトとは異なるが、非常に汎用性が高く、ゲーム内のほとんどすべてのGUI要素の外観や位置、機能を変更できる。また、ゲーム内にはGUIデバッグモードがあり、階層を表示したり、その要素が定義されているファイルや行を開いたりすることができ、インターフェースでの作業をより簡単にする。
  • 現在のところ、私たちは自分で新たなウィンドウGUIを作成するのはサポートしていない(私の終わりのないTodoリストには入っている)が、常に表示されているメインのHUDウィンドウの子ウィンドウとして作成すると簡単で、どんなものでもできる。
  • Jomini Moddingの情報に簡単に記載されているが、スクリプトされたGUIを作成することが可能で、GUIシステムと通常のスクリプトシステムの間にリンクを張ることができる。これによってさまざまなトリガーが真か偽かを評価するかどうか、マルチプレイで安全なゲーム状態においてエフェクトを実行できるかをテストできる。

  • これはカスタマイズしたインターフェースの例だ。異なる教派の成人キャラクター殺害のために押せるボタンを表示する。

次回:開発日記#38――遺産のショーケース

スポンサーリンク

コメント

タイトルとURLをコピーしました