모딩 정보 · 맵 제작자, 모드 제작자, 뮤테이터 제작자, 브레인 제작자를 위한 안내

모딩 정보

맵 팩은 .oamap 파일 하나, 모드는 .oamod 파일 하나, 뮤테이터는 .oamut 파일 하나, 브레인은 .oabrain 파일 하나이며, 모두 최상위에 매니페스트가 있는 zip입니다. 게임은 매니페스트를 검증하고, 패키지를 ID 기준으로 설치하며, 선언된 규칙대로 플레이합니다. 이 가이드는 폴더 하나에서 목록 릴리스까지 안내하며, 각 장은 엔진 문서에서 그 장이 요약한 표준으로 연결됩니다.

폴더에서 플레이어의 게임까지대화형 흐름도

어떤 폴더든 됩니다. 맵이나 모드의 아카이브와 데이터 폴더를 넣고, 최상위에 매니페스트를 둡니다.내 폴더맵, 유닛, 스크립트…맵 팩은 oamap.yaml, 모드는 oamod.yaml입니다. 엄격한 YAML로, 문서 하나에 최상위 매핑 하나입니다.매니페스트oamap.yaml / oamod.yamloa-tool pack은 불러올 때와 똑같이 매니페스트와 파일을 확인하고, 맵 팩이면 맵 인덱스를 작성합니다.oa-tool pack검증하고 인덱스 작성분할하지 않은 zip 아카이브입니다. 링크, 장치 이름, 절대 경로, .. 경로는 쓸 수 없으며, 압축을 풀었을 때 최대 4 GiB입니다..oamap / .oamodzip 하나, 매니페스트 하나파일을 Core Prime 콘텐츠 라이브러리에 제출하거나, 직접 저장소를 운영하세요.공개Core Prime 또는 직접 운영하는 저장소목록은 패키지 키의 릴리스마다 번호를 매기며, 번호가 높으면 업데이트입니다. 버전은 순서를 따지지 않습니다.목록 릴리스r1, r2 … 순서는 바뀌지 않음게임이 서명된 목록을 읽고, ‘받기’로 릴리스를 설치합니다.게임의 라이브러리OA › 맵 / 모드 › 받기바탕 화면에서 연 .oamap이나 .oamod 파일은 스스로 설치되며, 같은 검사를 거칩니다.파일 열기더블클릭하면 설치파일 이름이 아니라 매니페스트의 ID 기준으로 설치되며, 한 버전 전의 것은 .backup에 보관됩니다.Documents/Open AnnihilationMaps/<id> · Mods/<id>설치ID 기준으로 압축 해제단계에 마우스를 올리면 그 단계가 따르는 규칙이 보이고, 클릭하면 해당 장이 열립니다. 점선은 저장소를 거치지 않는 경로입니다.
01

맵 팩의 구조

.oamap zip, oamap.yaml 매니페스트, 패커가 쓰는 맵 인덱스, 그리고 맵의 크기와 지형지물로 게임에 맞는지 정하는 방식.

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

모드의 구조

.oamod zip과 프로필 oamod.yaml: 식별 정보, 레이아웃, 제한, 데이터 키, 스크립트 확장, 프로필이 켜는 표준 수정 항목.

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

뮤테이터 만들기

기본 게임이나 어떤 모드 위에든 덧씌우는 작은 .oamut: 폴더, 매니페스트, mutate가 돌려주는 계획, 옵션, 샌드박스, 여러 개를 쌓을 때의 적용 순서.

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

Lua 예제

실제 패키지에서 가져온 작동하는 스크립트 6개: 규칙 하나, 상한이 있는 배율, 진영별 규칙, 게임을 거부할 수 있는 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

브레인 만들기

컴퓨터 자리 하나를 플레이하는 .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

스크립트 확장

프로필이 모드의 유닛 스크립트에 줄 수 있는 값(유닛의 처치 수, 소유자의 동맹 등)과 COB 스크립트가 각 값을 읽는 방법.

GitHub · docs/mods/script-extensions
14

버전과 릴리스

버전은 자유 텍스트이며 순서를 따지지 않습니다. packaging.revision은 다시 패키징할 때마다 올라가고, 목록은 릴리스에 번호를 매깁니다. 같은 버전과 리비전을 다른 바이트로 다시 쓰지 마세요.

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

Core Prime에 공개하기

패키지 확인, 콘텐츠 라이브러리에 제출하기, 릴리스가 목록과 모든 플레이어의 라이브러리에 나타나는 방식, 직접 저장소를 운영하는 방법.

GitHub · docs/registries

빠른 시작: 맵 팩

# 폴더 하나에 맵을 넣고, 최상위에 매니페스트를 둡니다
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

빠른 시작: 모드

# 유닛 제한을 늘리고 공유 규칙 두 개를 켜는 모드
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: 폴더 하나, 최상위에 매니페스트
commander-radar/
  oamut.yaml
  mutator.lua

# mutator.lua: 규칙 하나. 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: 폴더 하나, 최상위에 매니페스트
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"