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:
- 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.
- Um responsável executa as verificações com a pasta do jogo e acrescenta-o aos registos de pacotes da biblioteca.
- A publicação seguinte carrega o ficheiro pelo seu hash, assina o novo catálogo e aumenta o seu número de sequência.
- 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.