← Дневник разработки

Что здесь есть, а чего здесь нет

Раньше новый мир в Гримхолде был правкой в коде. Не фигурально: чтобы мир появился, кто-то дописывал его в seed.py, отправлял pull request и ждал ревью. Реестр, черновики, лестница публикации — всё это давно работало, а сам мир всё равно приходил из репозитория.

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

Где именно игра догадывалась за автора

Это не одна забытая настройка. Допущение «здесь тёмное фэнтези» лежало в местах, про которые никто специально не думал:

  • Классы. Игроку предлагали следопыта, мага, вора и воина. Четыре слова, зашитые в приложение.
  • Деньги. Кошелёк считался в золоте. В мире про восемнадцатый год — тоже в золоте.
  • Снаряжение. Один общий список на все миры сразу.
  • Имена. Игрок бросает имя герою, и это первое, что он вообще узнаёт о мире. Список был из тёмных веков Европы — германские, норвежские, англосаксонские, кельтские, славянские, византийские. Для тёмного фэнтези верно. Для Петрограда восемнадцатого года — нет.

По отдельности каждый пункт выглядит мелочью. Вместе они означают, что «создать мир» на деле значило «написать историю внутри нашего мира».

Сеттинг — это то, чем мир является

Теперь у мира есть вторая половина, отдельная от фикции. Она называется сеттинг и отвечает ровно на этот вопрос: что здесь бывает.

Сеттинг объявляет эпоху, деньги, снаряжение, классы и имена. Эпоха — обычный текст, и он главнее остального: этим текстом связан рассказчик. Вот пример, который стоит подсказкой прямо в поле:

Тысяча девятьсот восемнадцатый год. Есть винтовки, телеграф, паровозы и керосин. Магия здесь редка, дорого обходится тому, кто её творит, и удивляет людей меньше, чем пулемёт.

Мир указывает на сеттинг, а не хранит его в себе. Так сделано не из аккуратности: текст сеттинга нужен на трёх языках, и все наши миры тёмного фэнтези делят один словарь вместо того, чтобы каждый держал свою копию — и переводил её отдельно.

Класс при этом остаётся костюмом поверх механики. Автор волен назвать класс как угодно и одеть как угодно — но не может сделать его сильнее: хиты и характеристики принадлежат приложению и автору недоступны. Игрок видит нетраннера, кубик видит мага.

Мир собирается по ступеням, и каждая сразу записывается

Дальше автор строит сам мир — в браузере, ступенями: места, люди, фракции, задания, завязка, облик, обложка.

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

Три вещи, которые мы решили заранее и о которых стоит сказать прямо:

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

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

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

Что здесь делает ИИ, а что по-прежнему делает человек

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

И перевод. Костюм класса нужен на русском, английском и украинском, иначе сеттинг не опубликуется — и правильно, иначе английскому игроку предложат «пластуна». Написали на своём языке, нажали «перевести с ИИ» — пустые языки заполнились. То, что вы уже написали руками, не трогается.

Чего ИИ не делает — так это не решает, что миру выходить к игрокам. Автор в Гримхолде — отдельная роль: он создаёт миры и не может их публиковать. Лестница черновик → одобрен → опубликован проходится только человеком с правами администратора, и перепрыгнуть ступень нельзя — мир доходит до игрока лишь тогда, когда под ним кто-то подписался. Это не бюрократия, а единственная защита, которая тут работает: всё, что сгенерировано, дальше становится каноном и накапливается с первого хода.

Последний мир, который пришлось написать кодом

«Красная зима» — восемнадцатый год и магия — первый мир, который не является тёмным фэнтези. Кошелёк в рублях, четыре своих класса, свой каталог, и рассказчик держит эпоху всю партию. Пока это черновик, и для неё это правильное состояние.

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

Сюда мы и зовём авторов. Если вам интересно построить свой мир — не приключение внутри нашего, а мир со своими деньгами, своим снаряжением и своими словами, — напишите нам на grimhold.world. Роль автора выдаётся руками, и мы читаем каждую заявку.