Перевірити, запакувати й опублікувати мозок
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 замінює вже наявний файл. --game-dir у brain pack — помилка використання. 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 — 6. status playing означає, що мозок іще викликали. Та сама тека проти вбудованого гравця, де кількість збудованого для Steady Commander — 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. Місце 1 у звіті — це log seat 0. own-draw — це brain.random. Steady Commander ніколи не викликає brain.record, тож у його файлі запису немає рядка зразка.
ПЕРЕВІРИТИ З ЦИМ МОДОМ і журнал
ПЕРЕВІРИТИ З ЦИМ МОДОМ — кнопка на встановленому мозку в Бібліотеці, яка показується, коли задано вердикт. Вона завантажує цю копію й запускає fits. Вона не садить мозок на місце. Під час гри й поки триває перевірка вона вимкнена.
Застосунок пише журнал місця в logs/brains/seat-, до якого додається індекс гравця плюс один, у теці даних облікового запису. Для кожного мозку, посадженого на це місце, файл починається заново. Перший рядок — назва з маніфесту, версія, id, рівень, місце й seed матчу. Надрукований рядок дописується як тік і текст. Файл обривається на 1 MiB.
Тип oabrain у каталозі
У Core Prime тип у каталозі — oabrain. Пакет установлюється в Brains/ і теку з його id. Гра, яка не знає типу з каталогу, пропускає цей запис, тож старіша гра пакета не покаже. Розділ «Покращення ШІ» на цьому сайті лишається з позначкою «незабаром», доки каталог не почне віддавати цей тип.
Запропонуй його Core Prime
Бібліотеку вмісту Core Prime публікують із компʼютера супровідника: каталог підписується ключем, який ніколи не залишає цей компʼютер. Щоб мозок потрапив до списку:
- Створи issue в репозиторії Open Annihilation з .oabrain (або посиланням на нього), його автором і ліцензією.
- Супровідник проганяє перевірки на теці гри й додає мозок до записів пакетів бібліотеки.
- Наступна публікація вивантажує файл за його хешем, підписує новий каталог і збільшує його порядковий номер.
- За кілька хвилин він зʼявляється в Бібліотеці кожного гравця, а коли цей сайт почне показувати цей тип, — і тут.
Набір мап, мод чи мутатор пропонують так само. Див. Публікація в Core Prime.