squad-proto/docs/19-agent.md
z.kirill 4382af2322 Документация: границы движка, работа через модель, дизайн игры до лейтгейма
18-engine.md    границы Tile2D, проекции 2D, формат проекта, второй проект
  19-agent.md     инструменты --tool, скиллы, терминал в редакторе
  20-gdd.md       акты, петли, рост отряда, закон масштаба, бюджет 200 часов
  21-damage.md    семь стихий, статусы, десять реакций, формулы, триггеры
  22-loot.md      редкости, аффиксы, артефакты, зачарования, материалы
  23-endgame.md   Бездна, мутации, лидерборды, 262 ачивки

Плюс правки 01/02/07/15/16/17 под переехавшие пути и новые правила забега.

Дизайнерская часть держится на одном законе: угроза растёт квадратично, сила
отряда — линейно с затуханием, разрыв закрывается ЗНАНИЕМ, а не числами. Из
него выведены и экономика опыта (41 млн против 44 млн дохода), и то, почему
реакции считаются от глубины, а не от урона оружия, и почему в Бездне
множитель HP разрешён, а во всём авторском контенте запрещён.

.claude/commands: скиллы /tile2d, /room, /floor — правила этого движка,
которые нельзя вывести из кода. Главное записано первым: не отчитываться об
успехе без прохода --tool validate.

Числа в этих документах — вход для инструментов, а не украшение. Расхождение
между таблицей и выводом инструмента означает, что неправ документ.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-13 21:07:45 +03:00

9.4 KiB
Raw Blame History

19 — Движок и языковая модель

Из чего это сделано

Три вещи, и порядок между ними важен:

Что Где Зачем
инструменты tile2d_editor --tool ... обратная связь: во что превращается содержимое
скиллы .claude/commands/*.md правила этого движка, которые нельзя вывести из кода
терминал панель снизу в редакторе, клавиша ` место, где всё это встречается

Инструменты — главное. Терминал без них был бы просто консолью в чужом окне.

Почему именно инструменты, а не «API редактора»

Содержимое проекта уже текст: комнаты, каталог сущностей и манифест лежат в git и правятся руками. Значит, править их умеет кто угодно, включая модель, — открыл файл, изменил, сохранил. Никакого особого интерфейса для этого не нужно.

Чего у модели нет — последствий. Собралась ли комната в этаж, достижима ли точка спавна от входа, выбрал ли этаж бюджет опасности, во что превращается набор на двадцать четвёртом этаже: на эти вопросы нельзя ответить, глядя на текст комнаты. Их знает только генератор.

Поэтому инструменты — это замкнутая петля: правка делается файлами, а последствия читаются командой. И всё выводится текстом, включая карту собранного этажа, — по той же причине, по которой ассеты проверяются через sf ascii, а не глазами по PNG: картинку нельзя ни продиффать, ни процитировать в отчёте, ни сравнить с такой же картинкой другого сида.

tile2d_editor --tool map 3 42 --project hollow

 20 ###.o.......#######.........#########.###.######
 21 ###..##.##..#######..##.##..####...........#####
 22 ##....@....................................#####
 23 ##.....#...............#.........###.......#####

# стена  . пол  @ старт  > спуск  < эвакуация  m тварь  o обстановка  $ лут

Полный список — --tool help. Код возврата 1 означает «не выполнено или найдена поломка», поэтому на инструменты можно вешать хуки и скрипты, а не читать вывод глазами.

инструменты в терминале редактора

Терминал

терминал редактора

Клавиша ` открывает панель снизу. Команды выполняются в корне репозитория: работают не только над содержимым — рядом код движка, документация и git. Каталог с бинарниками добавлен в PATH, поэтому tile2d_editor --tool validate пишется без путей.

Строка ввода работает в трёх режимах, Tab переключает:

режим что делает с введённой строкой
shell$ выполняет как команду
claude> claude -p "..."
codex> codex exec "..."

Одно поле, а не три — потому что работа выглядит как чередование: спросил, посмотрел, проверил инструментом, снова спросил.

Открытый в редакторе проект уходит детям переменной окружения TILE2D_PROJECT. Поэтому --tool validate без ключей проверяет именно его — и то же самое видит агент, запущенный отсюда. Дописывать --project в чужие команды строковой подстановкой было бы способом однажды подставить его не туда.

Чего терминал НЕ делает

Он не эмулятор терминала. Полный VT100 — альтернативный экран, адресация курсора, рамки из псевдографики — нужен ровно одному сорту программ: интерактивным TUI, и claude без ключей именно такой.

Строчный вывод здесь не упрощение, а выбор в пользу того, как с моделью работают из редактора на самом деле: claude -p и codex exec печатают обычный текст, инструменты печатают таблицы и карты, git и cmake — тоже текст. Эмулятор не нужен ни одному из них.

Полный интерактивный CLI открывается кнопкой EXTERNAL (или F12) во внешнем окне, в том же рабочем каталоге. Так у каждого способа остаётся то, в чём он хорош, и ни один не притворяется другим.

Шрифт панели — Consolas с кириллицей, а не встроенный шрифт raylib. Правило «тексты на экране латиницей» здесь не нарушается: оно про ИГРУ, где текст пишет разработчик. В терминал текст приходит извне, и выбора языка нет.

Скиллы

.claude/commands/: /tile2d — работа над проектом вообще, /room — сделать или починить комнату, /floor — править кривую сложности.

В них записано то, чего нет в коде и что модель иначе узнаёт слишком поздно:

  • не отчитываться об успехе без прохода --tool validate. Комната, которая безупречно читается в диффе, может запечатать карман от собственной двери — в этом репозитории так случилось дважды (storage, потом maw);
  • id сущностей — граница игры, а не движка. Движок поставит любой id из каталога проекта; squad_proto превращает в тварь только те, что перечислены в src/sim/spawn_catalog.cpp;
  • глубину нельзя делать труднее множителями HP — это не страшнее, это дольше;
  • приёмка меряется в песочнице и проект не подключает.

Проверки

tile2d_editor --tool validate --project descent    # код 0
tile2d_editor --tool validate --project hollow     # код 0
tile2d_editor --tool map 6 1 --project descent     # карта этажа текстом
tile2d_editor --term "tile2d_editor --tool floor 8 42"   # то же изнутри редактора

Ключ --term "<команда>" открывает редактор сразу с выполненной командой. Он нужен не только для картинок в документации: так редактор открывают «с делом» — открыл, и уже видно, что не сходится.

Чего ещё нет

  • Инструментов на запись. Всё, что здесь есть, только читает и считает; правит модель сами файлы. Это осознанно: запись через инструмент означала бы второй способ менять комнату, и рано или поздно они разошлись бы.
  • MCP-сервера. Инструменты доступны как команды, а не как протокол. Для claude и codex этого достаточно; для редакторов, которые умеют только MCP, понадобится обёртка.
  • Своей истории диалога. Каждый вызов claude -p независим; терминал хранит историю КОМАНД, но не контекст разговора. Длинную работу ведут во внешнем интерактивном CLI.
  • Правки текущей комнаты из терминала. Модель работает с файлами на диске, а редактор держит рабочую копию в памяти: после правки файла нажмите RELOAD.