홈 › 모딩 정보 › 브레인 확인, 패키징, 공개
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용 명령입니다. 가이드의 도움말은 브레인 명령 세 가지를 다음과 같이 보여 줍니다.

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으로 표시됩니다. 다음 두 명령은 가이드가 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

확인은 0으로 종료합니다. result: ok는 그 실행의 결과입니다. fits: ok는 스크립트의 fits가 true를 돌려줬다는 뜻입니다. --json은 객체 하나를 출력합니다. --mod는 모드 폴더를 지정합니다. --level은 레벨 ID를 고르며, 생략하면 첫 레벨입니다.

pack이 거부하는 것

따로 지정하지 않으면 pack은 ID, 하이픈, 버전을 이어 .oabrain으로 끝나는 파일을 씁니다. --force는 이미 있는 파일을 덮어씁니다. brain pack에 --game-dir 옵션을 주면 사용법 오류입니다. brain check는 --game-dir 옵션을 받습니다. pack은 잘못된 매니페스트, 레이아웃 밖의 파일, 소스가 아닌 Lua, 바이트가 매니페스트의 다이제스트와 다른 네트워크, 제한 안의 정사각형 PNG가 아닌 아이콘을 거부합니다. Lua는 컴파일만 하고 실행하지 않습니다. .oann 파일은 해시만 계산하고 해석하지 않습니다.

헤드리스 경기

--brain-match는 컴퓨터 자리 두 개를 플레이합니다. 각 자리는 설치된 브레인 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의 built 수는 6입니다. status playing은 브레인이 아직 호출되고 있었다는 뜻입니다. 같은 폴더를 기본 제공 플레이어(이 경기에서 Steady Commander의 built 수는 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를 호출하지 않으므로 기록 파일에 샘플 줄이 없습니다.

‘이 모드로 확인’ 버튼과 로그

‘이 모드로 확인’은 라이브러리에서 설치된 브레인에 있는 버튼으로, 판정이 설정되어 있을 때 표시됩니다. 그 사본을 불러와 fits를 실행합니다. 브레인을 자리에 앉히지는 않습니다. 게임 중이거나 확인이 실행 중일 때는 꺼져 있습니다.

앱은 계정 데이터 폴더 아래 logs/brains/seat-에 플레이어 인덱스에 1을 더한 값을 붙인 경로로 자리 로그를 씁니다. 그곳에 브레인을 앉힐 때마다 파일을 새로 시작합니다. 첫 줄은 매니페스트 이름, 버전, ID, 레벨, 자리, 경기 시드입니다. 출력된 줄은 틱과 텍스트로 덧붙습니다. 파일은 1 MiB에서 멈춥니다.

목록의 oabrain 종류

Core Prime에서 목록 종류는 oabrain입니다. 패키지는 Brains/ 아래 ID 폴더에 설치됩니다. 목록 종류를 모르는 게임은 그 항목을 건너뛰므로, 이전 버전의 게임에는 패키지가 표시되지 않습니다. 이 사이트의 AI 강화 섹션은 목록이 이 종류를 제공할 때까지 ‘준비 중’으로 표시됩니다.

Core Prime에 제출하기

Core Prime 콘텐츠 라이브러리는 관리자의 컴퓨터에서 공개되며, 목록은 그 컴퓨터 밖으로 나가지 않는 키로 서명됩니다. 브레인을 목록에 올리려면:

  1. .oabrain 파일(또는 그 링크), 제작자, 라이선스를 담아 Open Annihilation 리포지토리에 이슈를 여세요.
  2. 관리자가 게임 폴더에 대해 검사를 실행하고 라이브러리의 패키지 기록에 추가합니다.
  3. 다음 공개 때 파일이 해시 기준으로 업로드되고, 새 목록에 서명하며 시퀀스 번호를 올립니다.
  4. 몇 분 뒤에는 모든 플레이어의 라이브러리에 나타나며, 이 사이트가 이 종류를 표시하게 되면 이 사이트에도 나타납니다.

맵 팩, 모드, 뮤테이터도 같은 방법으로 제출합니다. Core Prime에 공개하기 장을 참고하세요.