ホーム › MOD制作情報 › ブレインの確認、パック、公開
第11章

ブレインの確認、パック、公開

oa-tool brain packとcheck、ヘッドレス対戦とトレース、ライブラリの確認と席のログ、カタログの種類oabrain、そしてCore Primeへのパッケージの提出方法。

この章はdocs/brains/oabrain-standard.md、docs/brains/authoring.md、docs/playing-with-brains.mdの要約です。規範となるのはこれらのドキュメントです。

パックと確認

ブレインのパックと確認には、oa-tool brain packとoa-tool brain checkを使います。oa-tool packとoa-tool checkは.oamapと.oamod用のコマンドです。ガイドのヘルプには、ブレイン用の3つのコマンドが載っています:

oa-tool brain pack FOLDER [--out FILE] [--force]
    Pack a brain folder as a .oabrain.
oa-tool brain check FILE --game-dir DIR [--mod FOLDER] [--level LEVEL] [--side N] [--json]
    Load a brain against a game and report how it started.
oa-tool brain net MODEL.onnx --calibrate DATA [--out FILE] [--weights int8|int16] [--max-difference X] [--force] [--json]
    Convert an ONNX model to a .oann.

パックはフォルダーの外から行います。checkは.oabrain、または最上位にoabrain.yamlがあるフォルダーを、ゲームに対して読み込みます。平らな代用マップ上でブレインを席に着かせ、その対戦のティックは一度も進めません。実行されなかったフェーズにはnot runと表示されます。次の2つのコマンドは、ガイドがSteady Commanderで実行したもので、その後にレポートが続きます:

build/oa-tool brain pack brains/examples/steady-commander --out /tmp/brain-scratch/steady-commander.oabrain
build/oa-tool brain check /tmp/brain-scratch/steady-commander.oabrain --game-dir "$OA_GAME_DIR"
brain: steady-commander 1.0 level easy
game: totala
mod: none
load: ok, 0 instructions
fits: ok, 0 instructions
start: ok, 15 instructions
lua: 1231655 bytes
networks: 0 bytes
result: ok

checkは0で終了します。result: okがその実行結果です。fits: okは、スクリプトのfitsがtrueを返したことを示します。--jsonはオブジェクトを1つ出力します。--modはMODのフォルダーを指定します。--levelはレベルのIDを選び、省略すると最初のレベルになります。

packが拒否するもの

何も指定しなければ、packはID、ハイフン、バージョンをつなげ、.oabrainで終わる名前のファイルを書きます。--forceは既存のファイルを置き換えます。brain packで--game-dirを使うと、使い方のエラーになります。brain checkは--game-dirを受け付けます。packが拒否するのは、壊れたマニフェスト、レイアウトにないファイル、ソースでないLua、マニフェストが指定するダイジェストと中身が一致しないネットワーク、上限内の正方形のPNGでないアイコンです。Luaはコンパイルされますが、実行はされません。.oannファイルはハッシュを取られますが、解釈はされません。

ヘッドレス対戦

--brain-matchは、2つのコンピューターの席で対戦させます。各席は、インストール済みのブレインのID、フォルダー、またはbuiltinです。--headless-check、--match-ticks、--brain-mapが必要です。ガイドにある、Steady CommanderとClassicの対戦は次のとおりです:

open-annihilation --skip-intro --mute --headless-check --game-dir "$OA_GAME_DIR" \
  --user-folder /tmp/brain-user --data-dir /tmp/brain-scratch/data \
  --brain-match brains/examples/steady-commander,brains/classic \
  --brain-levels medium,medium \
  --brain-map "Painted Desert" --seed 4242 --match-ticks 1800 \
  --brain-record /tmp/brain-scratch/record.txt

これは0で終了します。どの行もbrain matchで始まります。winner noneとreason timeは、ティック数を使い切ったときに両方の席にまだユニットが残っていたことを意味します。このClassicとの対戦で、Steady Commanderの建設数は6です。status playingは、ブレインがまだ呼び出されていたことを意味します。同じフォルダーを内蔵コンピューターと対戦させるとSteady Commanderの建設数は7になり、その実行のトレースにスクリプト自身の命令が表れます:

open-annihilation --skip-intro --mute --headless-check --game-dir "$OA_GAME_DIR" \
  --user-folder /tmp/brain-user --data-dir /tmp/brain-scratch/data \
  --brain-match brains/examples/steady-commander,builtin \
  --brain-levels medium,hard \
  --brain-map "Painted Desert" --seed 4242 --match-ticks 2400 \
  --brain-trace /tmp/brain-scratch/trace-play.txt \
  --brain-record /tmp/brain-scratch/record-play.txt

トレース

--brain-traceと--brain-recordは、対戦に付けて使います。どちらも--headless-checkと--match-ticksが必要です。内蔵コンピューターとの対戦のトレースは、次のように始まります:

brain log 1
tick 0 seat 0 brain
call fits
tick 0 seat 0 brain
call start

タイマーはcall timerの行です。レポートのseat 1は、ログのseat 0です。own-drawはbrain.randomです。Steady Commanderはbrain.recordを呼ばないので、記録ファイルにサンプルの行はありません。

「このMODで確認」とログ

「このMODで確認」は、ライブラリでインストール済みのブレインに付くボタンで、判定が設定されているときに表示されます。そのコピーを読み込み、fitsを実行します。ブレインを席に着かせることはありません。ゲーム中と、確認の実行中は使えません。

アプリは席のログを、アカウントのデータフォルダーの下にあるlogs/brains/seat-に、プレイヤーのインデックスに1を足した数を付けた名前で書きます。ファイルは、そこに席を着かせたブレインごとに新しく始まります。最初の行は、マニフェストの名前、バージョン、ID、レベル、席、対戦のシードです。printした行は、ティックとテキストとして追記されます。ファイルは1 MiBで止まります。

カタログの種類oabrain

Core Primeでは、カタログの種類はoabrainです。パッケージはBrains/の下のIDのフォルダーにインストールされます。カタログの種類を知らないゲームはその項目を飛ばすので、古いゲームにはこのパッケージが表示されません。このサイトの「AI強化」セクションは、カタログがこの種類を配信するまで「近日公開」のままです。

Core Primeに提出する

Core Primeのコンテンツライブラリは、メンテナーのマシンから公開されています。カタログは、そのマシンから外に出ない鍵で署名されます。ブレインを掲載するには:

  1. Open AnnihilationのリポジトリでIssueを作成し、.oabrain(またはそのリンク)、作者、ライセンスを添えます。
  2. メンテナーがゲームフォルダーに対して確認を実行し、ライブラリのパッケージ記録に追加します。
  3. 次の公開で、ファイルがハッシュ値の名前でアップロードされ、新しいカタログに署名され、そのシーケンス番号が上がります。
  4. 数分後には全プレイヤーのライブラリに載り、このサイトがこの種類を掲載するようになれば、このサイトにも載ります。

マップパック、MOD、ミューテータも同じ方法で提出します。Core Primeへの公開を参照してください。