Início › Info de modding › Verificar, empacotar e publicar um cérebro
Capítulo 11

Verificar, empacotar e publicar um cérebro

oa-tool brain pack e check, uma partida sem interface e um rasto, a verificação da Biblioteca e o registo do lugar, o tipo oabrain do catálogo e como oferecer o pacote ao Core Prime.

Este capítulo resume docs/brains/oabrain-standard.md, docs/brains/authoring.md e docs/playing-with-brains.md. Esses documentos são o texto normativo.

Empacotar e verificar

Um cérebro é empacotado e verificado com oa-tool brain pack e oa-tool brain check. oa-tool pack e oa-tool check são os comandos para um .oamap ou um .oamod. A ajuda do guia lista os três comandos de cérebro:

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.

Empacote a partir de fora da pasta. check carrega um .oabrain, ou uma pasta cujo topo contenha o oabrain.yaml, com um jogo. Coloca o cérebro num mapa plano de substituição e nunca faz avançar essa partida. Uma fase que não correu indica not run. Estes dois comandos são a execução do guia para o Steady Commander, seguidos do relatório que se obteve:

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

A verificação termina com 0. result: ok é essa execução. fits: ok é o fits do script a devolver true. --json imprime um objeto. --mod indica uma pasta de mod. --level escolhe um id de nível e, se for omitido, o primeiro nível.

O que pack recusa

Sem mais opções, pack escreve o id, um hífen e a versão, terminados em .oabrain. --force substitui um ficheiro que já exista. --game-dir em brain pack é um erro de utilização. brain check aceita --game-dir. pack recusa um manifesto com erros, um ficheiro fora da estrutura, Lua que não seja código-fonte, uma rede cujos bytes não correspondam ao resumo que o manifesto indica e um ícone que não seja um PNG quadrado dentro dos limites. O Lua é compilado e não é executado. Um ficheiro .oann tem o hash calculado e não é interpretado.

Uma partida sem interface

--brain-match joga dois lugares de computador. Cada lugar é um id de cérebro instalado, uma pasta ou builtin. Precisa de --headless-check, --match-ticks e --brain-map. A partida do guia entre o Steady Commander e o 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

Termina com 0. Todas as linhas começam por brain match. winner none e reason time significam que os dois lugares ainda tinham unidades quando a contagem de ticks se esgotou. Nessa partida contra o Classic, a contagem de construções do Steady Commander é 6. status playing significa que o cérebro ainda estava a ser chamado. A mesma pasta contra o jogador integrado, em que a contagem de construções do Steady Commander é 7, é a execução cujo rasto mostra as ordens do próprio script:

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

Um rasto

--brain-trace e --brain-record acompanham uma partida. Ambos precisam de --headless-check e --match-ticks. O rasto da partida contra o jogador integrado começa assim:

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

Um temporizador é uma linha call timer. O lugar 1 do relatório é o lugar 0 do registo. own-draw é brain.random. O Steady Commander nunca chama brain.record, por isso o seu ficheiro de registo não tem nenhuma linha de amostra.

VERIFICAR COM ESTE MOD, e o registo

VERIFICAR COM ESTE MOD é um botão de um cérebro instalado na Biblioteca, mostrado quando há um veredicto. Carrega essa cópia e corre fits. Não coloca o cérebro num lugar. Fica desativado durante uma partida e enquanto a verificação está a decorrer.

A aplicação escreve o registo do lugar em logs/brains/seat- seguido do índice do jogador mais um, dentro da pasta de dados da conta. O ficheiro recomeça para cada cérebro aí colocado. A primeira linha tem o nome do manifesto, a versão, o id, o nível, o lugar e a semente da partida. Cada linha impressa é acrescentada com o tick e o texto. O ficheiro para em 1 MiB.

O tipo oabrain do catálogo

No Core Prime, o tipo no catálogo é oabrain. O pacote instala-se em Brains/ com o id. Um jogo que não conhece um tipo do catálogo salta essa entrada, por isso um jogo mais antigo não lista o pacote. A secção de melhorias de IA deste site continua marcada como para breve até o catálogo servir esse tipo.

Ofereça-o ao Core Prime

A biblioteca de conteúdos do Core Prime é publicada a partir da máquina de um responsável: o catálogo é assinado com uma chave que nunca sai de lá. Para ter um cérebro listado:

  1. Abra uma issue no repositório do Open Annihilation com o .oabrain (ou uma ligação para ele), o seu autor e a licença.
  2. Um responsável executa as verificações com a pasta do jogo e acrescenta-o aos registos de pacotes da biblioteca.
  3. A publicação seguinte carrega o ficheiro pelo seu hash, assina o novo catálogo e aumenta o seu número de sequência.
  4. Minutos depois, está na Biblioteca de cada jogador e, quando este site listar esse tipo, também aqui.

Um pacote de mapas, um mod ou um mutador oferece-se da mesma forma. Consulte Publicar no Core Prime.