MOD制作情報 · マップ制作者、MOD作者、ミューテータ制作者、ブレイン作者向け

MOD制作情報

マップパックは1つの.oamapファイル、MODは1つの.oamodファイル、ミューテータは1つの.oamutファイル、ブレインは1つの.oabrainファイルで、いずれも最上位にマニフェストを置いたzipです。ゲームはマニフェストを検証し、パッケージをIDごとにインストールして、宣言されたルールどおりにプレイします。このガイドはフォルダーからカタログのリリースまでを順に案内し、各章からはエンジン自身のドキュメントにある元の規格へリンクしています。

フォルダーからプレイヤーのゲームまでインタラクティブなフロー図

どんなフォルダーでも構いません。マップ、またはMODのアーカイブとデータフォルダーを入れ、最上位にマニフェストを置きます。自分のフォルダーマップ、ユニット、スクリプト…マップパックはoamap.yaml、MODはoamod.yaml。厳格なYAMLで、ドキュメントは1つ、最上位は1つのマッピングです。マニフェストoamap.yaml / oamod.yamloa-tool packは読み込み時と同じようにマニフェストとファイルを確認し、パックのマップインデックスを書きます。oa-tool pack検証し、インデックスを書く分割されていない、単一ディスクのzipアーカイブです。リンク、デバイス名、絶対パス、..は使えず、展開後は最大4 GiBです。.oamap / .oamodzip1つ、マニフェスト1つファイルをCore Primeのコンテンツライブラリに提出するか、自分でレジストリを運営します。公開Core Primeまたは自前のレジストリカタログはパッケージキーのリリースごとに番号を振り、番号が大きいほうが更新です。バージョンが順序付けされることはありません。カタログのリリースr1、r2 … 並べ替えなしゲームは署名付きのカタログを読み、「入手」でリリースをインストールします。ゲーム内のライブラリOA › マップ / MOD › 入手デスクトップで開いた.oamapや.oamodは、そのままインストールされます。確認の内容は同じです。ファイルを開くダブルクリックでインストールファイル名ではなく、マニフェストのIDでインストールされます。1つ前のバージョンは.backupに保管されます。Documents/Open AnnihilationMaps/<id> · Mods/<id>インストールIDで展開ステップにポインターを重ねると従うルールが表示され、クリックするとその章が開きます。破線はレジストリを通さない経路です。
01

マップパックの構造

.oamapのzip、そのoamap.yamlマニフェスト、パッカーが書くマップインデックス、そしてマップのサイズと地形物でゲームに合うかどうかが決まる仕組み。

GitHub · docs/maps/oamap-standard.md
02

MODの構造

.oamodのzipとプロファイルoamod.yaml。識別情報、レイアウト、上限、データキー、スクリプト拡張、有効にする標準ハック。

GitHub · docs/mods/oamod-standard.md
03

ミューテータを作る

ベースゲームやどのMODにも重ねる小さな.oamut。フォルダー、マニフェスト、mutateが返すプラン、オプション、サンドボックス、重ねたときの適用順。

GitHub · docs/mutators/oamut-standard.md
04

Luaの例

実際のパッケージから取った、動作するスクリプト6つ。ルール1つ、上限付きの倍率変更、陣営別、ゲームを拒否できるunitsフック、featuresフック、フォルダーを重ねるfilesプラン。

GitHub · docs/mutators/oamut-standard.md#61-the-lua-forms
05

旧式ミューテータの移植

KroggyComm 1.1をアーカイブからパッケージへ。TA: Mutationのルールファイルはsmで残すか、Luaで書き直す。

GitHub · docs/mutators/authoring.md#15-importing-a-ta-mutation-mutator
06

確認、パック、公開

oa-tool mutator checkとpack、ドライラン、カタログページに表示される内容、アイコン、そしてCore Primeへのパッケージの提出方法。

GitHub · docs/mutators/authoring.md#1-a-first-mutator
07

ブレインを作る

コンピューターの席を1つプレイする.oabrain。フォルダー、マニフェストの全キー、タグ、レベル、全視界、スクリプトが動く場所、予算、停止したときに起きること。

GitHub · docs/brains/oabrain-standard.md
08

ブレインのLua

Steady Commanderのマニフェストとスクリプト、フック、ブレインが知りうることとできること、数値、乱数、タイマー、チャット。

GitHub · docs/brains/oabrain-standard.md#7-what-a-brain-may-know
09

実例:Classic

Luaで書いた内蔵コンピューター。ファイル、タスク表、タスクの例、癖の注記、エンジンに残る部分、同じ命令を出すことの証明方法。

GitHub · docs/brains/authoring.md#13-classic-a-walkthrough
10

学習済みネットワーク

ブレインが.oannを同梱する理由、整数演算、レイヤー、実行方法、oa-tool brain net、上限、ライブラリでの表示。

GitHub · docs/brains/oabrain-standard.md#9-neural-networks
11

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

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

GitHub · docs/brains/authoring.md#11-testing
12

標準ハック

プロファイルが有効にできる文書化されたルールと、それぞれのキー、値、元になった挙動。シミュレーションハックはプレイヤー間で一致している必要があります。

GitHub · docs/mods/standard-hacks
13

スクリプト拡張

ユニットの撃破数や所有者の同盟など、プロファイルがMODのユニットスクリプトに渡せる値と、COBスクリプトでのそれぞれの読み方。

GitHub · docs/mods/script-extensions
14

バージョンとリリース

バージョンは自由なテキストで、順序付けされません。packaging.revisionは再パックのたびに上がり、カタログはリリースに番号を振ります。同じバージョンとリビジョンを異なる中身で使い回してはいけません。

GitHub · docs/mods/oamod-standard.md#47-catalogue-releases
15

Core Primeへの公開

パッケージの確認、コンテンツライブラリへの提出、リリースがカタログと全プレイヤーのライブラリに現れる仕組み、そして自前のレジストリの運営方法。

GitHub · docs/registries

クイックスタート:マップパック

# フォルダー1つ、中にマップ、最上位にマニフェスト
my-maps/
  oamap.yaml
  Ridge.tnt  Ridge.ota
  Long Lakes.tnt  Long Lakes.ota

# oamap.yaml
oamap: 1
id: my-maps
name: My Maps
version: "1.0"
author: {name: A. Mapper}
packaging: {revision: 1, date: 2026-10-18, packager: A. Mapper}

# 検証してパック。インデックスは自動で書かれる
$ oa-tool pack my-maps/ -o my-maps.oamap

クイックスタート:MOD

# ユニット上限を引き上げ、共通ルールを2つ有効にするMOD
oamod: 1
id: small-mod
name: Small Mod
version: "1.0"
author: {name: A. Modder}
packaging: {revision: 1, date: 2026-10-04, packager: A. Modder}

limits:
  units-per-player: {default: 500, max: 1000}

hacks:
  units.id-reuse-delay: true
  economy.deterministic-wind: true

# ファイルに書かれていない部分はすべて3.1cどおりに動作
$ oa-tool pack small-mod/ -o small-mod.oamod

クイックスタート:ミューテータ

# DrinkenのCommander Radar:フォルダー1つ、最上位にマニフェスト
commander-radar/
  oamut.yaml
  mutator.lua

# mutator.lua:ルール1つ。radarオプションで距離を選ぶ
function mutate(ctx)
  local distance = ctx.options.radar == "none" and 0 or 2880
  return {
    rules = {
      where { commander = 1, bmcode = 1 }:change {
        radardistance = set(distance),
      },
    },
  }
end

# フォルダーの外からパックし、.oamutを確認
$ oa-tool mutator pack commander-radar
$ oa-tool mutator check commander-radar-1.oamut

クイックスタート:ブレイン

# Steady Commander:フォルダー1つ、最上位にマニフェスト
steady-commander/
  oabrain.yaml
  brain.lua

# oabrain.yaml
oabrain: 1
id: steady-commander
name: Steady Commander
version: "1.0"
author:
  name: Ridge Workshop
description: "Builds a little economy, then a factory, and sends a squad when it is ready."
tags:
  - economy
  - teaching
works-with:
  - "*"

# フォルダーをパックし、.oabrainをゲームに対して確認
$ 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"