Verificar, empacotar e publicar um cérebro
oa-tool brain pack e check, uma partida sem interface e um rastreamento, a verificação da Biblioteca e o log do lugar, o tipo oabrain 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 de fora da pasta. check carrega um .oabrain, ou uma pasta cujo topo contém oabrain.yaml, com um jogo. Ele põe o cérebro num lugar, num mapa plano substituto, e nunca avança um tick dessa partida. Uma fase que não rodou diz not run. Estes dois comandos são a execução do guia para o Steady Commander, com o relatório que veio em seguida:
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 sai com 0. result: ok é essa execução. fits: ok é o fits do script retornando true. --json imprime um objeto. --mod indica a pasta de um mod. --level escolhe o ID de um nível, e o primeiro nível quando omitido.
O que pack recusa
Sem outras opções, pack escreve o ID, um hífen e a versão, terminando em .oabrain. --force substitui um arquivo que já existe. --game-dir em brain pack é um erro de uso. brain check aceita --game-dir. pack recusa um manifesto com erros, um arquivo fora da estrutura, Lua que não é código-fonte, uma rede cujos bytes não correspondem ao hash que o manifesto indica e um ícone que não é um PNG quadrado dentro dos limites. O Lua é compilado, não executado. Um arquivo .oann é verificado pelo hash, não interpretado.
Uma partida sem interface
--brain-match joga com dois lugares de computador. Cada lugar é o ID de um cérebro instalado, uma pasta ou builtin. Ele exige --headless-check, --match-ticks e --brain-map. A partida do guia, Steady Commander contra 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
Ela sai com 0. Toda linha começa com brain match. winner none e reason time significam que os dois lugares ainda tinham unidades quando a contagem de ticks acabou. Nessa partida contra o Classic, a contagem de construções do Steady Commander é 6. status playing significa que o cérebro ainda estava sendo chamado. A mesma pasta contra o jogador integrado, em que a contagem de construções do Steady Commander é 7, é a execução cujo rastreamento 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 rastreamento
--brain-trace e --brain-record vão junto com uma partida. Os dois exigem --headless-check e --match-ticks. O rastreamento 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 timer é uma linha call timer. O lugar 1 do relatório é o lugar 0 do log. own-draw é brain.random. O Steady Commander nunca chama brain.record, então seu arquivo de registro não tem nenhuma linha de amostra.
VERIFICAR COM ESTE MOD, e o log
VERIFICAR COM ESTE MOD é um botão de um cérebro instalado na Biblioteca, mostrado quando há um veredito definido. Ele carrega essa cópia e roda fits. Ele não põe o cérebro num lugar. Fica desativado durante uma partida e enquanto a verificação está em andamento.
O app escreve o log do lugar em logs/brains/seat- seguido do índice do jogador mais um, na pasta de dados da conta. O arquivo recomeça para cada cérebro posto ali. A primeira linha traz o nome do manifesto, a versão, o ID, o nível, o lugar e a semente da partida. Cada linha impressa é acrescentada como o tick e o texto. O arquivo para em 1 MiB.
O tipo oabrain do catálogo
No Core Prime, o tipo no catálogo é oabrain. O pacote se instala em Brains/ seguido do ID. Um jogo que não conhece um tipo do catálogo pula essa entrada, então uma versão mais antiga do jogo não lista o pacote. A seção Melhorias de IA deste site continua marcada como Em breve até que o catálogo sirva o tipo.
Ofereça-o ao Core Prime
A biblioteca de conteúdo do Core Prime é publicada da máquina de um mantenedor: o catálogo é assinado com uma chave que nunca sai dela. Para ter um cérebro listado:
- Abra uma issue no repositório do Open Annihilation no GitHub com o .oabrain (ou um link para ele), o autor e a licença.
- Um mantenedor roda as verificações com a pasta do jogo e o adiciona aos registros de pacotes da biblioteca.
- A publicação seguinte envia o arquivo pelo hash, assina o novo catálogo e aumenta o número de sequência dele.
- Minutos depois, ele está na Biblioteca de todos os jogadores e, quando este site passar a listar o tipo, aqui também.
Um pacote de mapas, um mod ou um mutador é oferecido do mesmo jeito. Veja Publicar no Core Prime.