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>
135 lines
9.4 KiB
Markdown
135 lines
9.4 KiB
Markdown
# 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 — это не страшнее, это дольше;
|
||
- приёмка меряется в песочнице и проект не подключает.
|
||
|
||
## Проверки
|
||
|
||
```bash
|
||
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`.
|