Головна › Моддинг › Перевірити, запакувати й опублікувати мозок
Розділ 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 замінює вже наявний файл. --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 публікують із компʼютера супровідника: каталог підписується ключем, який ніколи не залишає цей компʼютер. Щоб мозок потрапив до списку:

  1. Створи issue в репозиторії Open Annihilation з .oabrain (або посиланням на нього), його автором і ліцензією.
  2. Супровідник проганяє перевірки на теці гри й додає мозок до записів пакетів бібліотеки.
  3. Наступна публікація вивантажує файл за його хешем, підписує новий каталог і збільшує його порядковий номер.
  4. За кілька хвилин він зʼявляється в Бібліотеці кожного гравця, а коли цей сайт почне показувати цей тип, — і тут.

Набір мап, мод чи мутатор пропонують так само. Див. Публікація в Core Prime.