GameMod

DCS World: Mod の構成

DCS の Mod (GameGUI) の構成について。備忘録。

ディレクトリ構成

基本となる構成:

saved games/
 |- dcs/
     |- Mods/
     |   |- tech/
     |       |- {MOD_NAME}/
     |           |- Options/
     |           |   |- (files)
     |           |- Theme/
     |           |   |- (files)
     |           |- entry.lua
     |- Scripts/
         |- Hooks
             |- {MOD_NAME}.lua

各ファイルについて

entry.lua

entry.lua は Mod のサマリファイルである。
デフォルトでは Mods/Aircraft/ もしくは Mods/tech/ の下がスキャン対象 (再帰的) になるらしい。Mod 用のディレクトリを作ってその中に配置するのが妥当かと思われる。
(DCS-SRS は Mods/Services の下に Mod 本体を配置しているので、例外がありそう)

declere_plugin(mod_id, information)および plugin_done()を記述することによって、Mod のメタデータを宣言することができる。これらの情報は DCS 起動時に読み込まれ、メインメニューにアイコンを表示したり settings 画面の項目を追加したりするのに使われる。 (詳細については後述)

Scripts/Hooks/***.lua

ゲーム実行中に発生した Hook/Callback の対象となる処理を記述するファイルである。

ここに置くファイルにフック処理を直接書いてもよいが、いくつかの Mod を見るとどうやら entry.lua の近くに配置した別ファイルをロードすることが多いようである。 (特にルールはない)
参考として、Tacview の場合は Mods/tech/tacview/bin/tacview.dll を呼び出していて、DCS-SRS の場合は Mods/Services/DCS-SRS/Script/DCS-SRSGameGUI.lua を呼び出している。

Theme ディレクトリ

Mod のアイコン画像ファイルを配置するディレクトリ。entry.lua 内でディレクトリ名を指定する。(ディレクトリ名は Theme でなくてもよい)

Options ディレクトリ

Mod の設定画面 (GUI) および設定項目を定義したファイルを配置するディレクトリ。 entry.lua 内でディレクトリ名を指定する。(ディレクトリ名は Options でなくてもよい)

利用できる API とコールバック

DCS のインストールディレクトリ下 (DCSWorld/API/DCS_ControlAPI.html) に、利用可能な API やコールバックを列挙したマニュアルが配置されている。

マニュアルの付近にヘッダファイル (.h) やテンプレートプロジェクト (.sln) などが存在するので、それらを利用することもできる。 (当方未確認)

DCS World: Scripting の概要

(注: 個人用備忘録)
バージョン: DCS World 2.9.1

Scripting の種類

hoggitworld の情報を流し見する限りだと、大きく分けて 2種類の分類があり、 Mod にはさらに 3つに分けられる模様。

  • Mission
  • Mod
    • Export
    • Server control
    • Liveries

Scripting の種類の概要

Mission

Lua スクリプトをミッションファイル (.miz) に組み込む形で動作する。

ゲーム内オブジェクトのコントロールができるのは Mission Scripting のみである。僚機や AI 機や地上ユニットなどの動作を制御したい場合は、 Mission Scripting の形で実装する必要がある。
無線コマンドなどを追加できるのも Mission Scripting のみ。

Mod – Export

Export.lua ファイルから直接呼び出される形で動作する。ベースは Lua だが、DLL を呼び出す形で別のプログラムを実行することができる。基本的には ~\Saved Games\dcs\Scripts\Export.lua に直接処理を記述するか、そこから呼び出されるような形で処理を記述する。

Mission Scripting とは少々異なる方法でゲーム内の情報を取得できるほか、 (おそらく十分なドキュメント化されていないが) プレイヤーが操作している機体の状態を取得/変更することもできる。独自の計器やコントローラーをハードウェアとして作成した場合などに、Export を通じて DCS と連動させることができる。

LoGetWorldObjects などの Object 系 API に関しては、自機の状態ではなく全てのゲーム内オブジェクトの状態 (位置/速度など) にアクセスできる。マルチプレイヤーの場合、 (おそらく不正行為を防ぐため) サーバー側で一部の API へのアクセスを制限するように設定することができる。

Mod – GameGUI

ゲームサーバーもしくはクライアントにインストールする形で動作する。マルチプレイヤーのサーバーとしても利用できる処理群。作るのは少々手間だが、 Export の上位互換。 ~\Saved Games\dcs\Mods\tech の下に Mod 用のフォルダを作り、その中に処理群を作成する。

メニュー画面内にアイコンを出したり、設定画面に Mod 用の項目を追加したりできる。ゲーム内の情報にアクセスする方法は、 Export と同じものが使える。

Liveries

Livery は機体 Mod のことだが、特に調べてないので詳細不明。 ~\Saved Games\dcs\Mods\Aircraft の下に機体用のフォルダを作り、必要なファイルを設置する。