Modding Info · for map makers, mod authors, mutator makers and brain authors

Modding Info

A map pack is one .oamap file, a mod is one .oamod file, a mutator is one .oamut file, and a brain is one .oabrain file: a zip with a manifest at the top. The game validates the manifest, installs the package by its id, and plays it by its declared rules. This guide takes you from a folder to a catalogue release, and every chapter links to the standard it summarises in the engine's own docs.

01

Anatomy of a map pack

The .oamap zip, its oamap.yaml manifest, the map index the packer writes, and how a map's size and features decide whether it fits a game.

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

Anatomy of a mod

The .oamod zip and the profile oamod.yaml: identity, layout, limits, data keys, script extensions and the standard hacks it turns on.

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

Make a mutator

A small .oamut layered over the base game or any mod: the folder, the manifest, the plan mutate returns, options, the sandbox and the order a stack applies.

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

Lua examples

Six working scripts from real packages: one rule, scaling with caps, a side, a units hook that can refuse the game, a features hook, and a files plan with layered folders.

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

Port a legacy mutator

KroggyComm 1.1 from its archives to a package, and a TA: Mutation rule file kept with sm or rewritten as Lua.

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

Check, pack and publish

oa-tool mutator check and pack, a dry run, what the catalogue page shows, the icon, and how to offer the package to Core Prime.

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

Make a brain

A .oabrain that plays one computer seat: the folder, every manifest key, the tags, levels, full awareness, where the script runs, the budgets, and what happens when it stops.

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

The brain's Lua

Steady Commander's manifest and script, the hooks, what a brain may know and do, numbers, random draws, timers and chat.

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

Classic, a worked example

The built-in computer player written in Lua: its files, the task table, one task, the quirk notes, what stays in the engine, and how the same orders are proven.

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

Learned networks

Why a brain might ship a .oann, integer arithmetic, the layers, running one, oa-tool brain net, the limits, and what the Library shows.

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

Check, pack and publish a brain

oa-tool brain pack and check, a headless match and a trace, the Library's check and the seat log, the catalogue's oabrain kind, and how to offer the package to Core Prime.

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

Standard hacks

The documented rules a profile may switch on, each with its key, values and the behaviour it came from. Simulation hacks must agree between players.

GitHub · docs/mods/standard-hacks
13

Script extensions

The values a profile can give a mod's unit scripts, such as a unit's kill count or its owner's alliances, with how a COB script reads each.

GitHub · docs/mods/script-extensions
14

Versions and releases

Your version is free text and never ordered. packaging.revision rises with each repack; the catalogue numbers releases. Never reuse a version and revision with different bytes.

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

Publishing to Core Prime

Checking a package, offering it to the content library, how a release appears in the catalogue and in every player's Library, and how to run a registry of your own.

GitHub · docs/registries

Quick start: a map pack

# one folder, your maps inside, a manifest at the top
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}

# validate and pack; the index is written for you
$ oa-tool pack my-maps/ -o my-maps.oamap

Quick start: a mod

# a mod that raises the unit limit and turns on two shared rules
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

# everything the file leaves out plays as 3.1c
$ oa-tool pack small-mod/ -o small-mod.oamod

Quick start: a mutator

# Commander Radar, by Drinken: one folder, the manifest at the top
commander-radar/
  oamut.yaml
  mutator.lua

# mutator.lua: one rule; the radar option picks the distance
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

# pack from outside the folder, then check the .oamut
$ oa-tool mutator pack commander-radar
$ oa-tool mutator check commander-radar-1.oamut

Quick start: a brain

# Steady Commander: one folder, the manifest at the top
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:
  - "*"

# pack the folder, then check the .oabrain against a game
$ 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"