· 1 мин

Как написать квест для игры с нейросетью: ветвление без дыр в логике

Ветвящийся квест - это граф из целей, точек выбора и условий выполнения. Нейросети можно доверить текст квеста, но не логику: состояние (квестодатель, обещанная награда, статус, флаг выплаты) должен держать код и проверять каждое изменение, которое предлагает модель. Иначе квесты дублируются, закрываются раньше времени и платят дважды.

Как написать квест для игры с нейросетью: структуры ветвления, пошаговый план и 10 реальных поломок логики из ИИ-мастера DnD на Python с фиксами.

Как написать квест для игры с нейросетью: ветвление без дыр в логике
В статье · 7 разделовразвернуть

Ветвящийся квест - это граф из целей, точек выбора и условий, при которых квест считается выполненным. В создании игр с нейросетью правило одно: ИИ пишет текст квеста, а состояние (кто выдал, что обещано, выполнено ли, оплачено ли) держит код. Отдашь состояние модели - логика посыплется на первом десятке ходов.

Я это знаю не по книжкам. Пилю ИИ-мастера для DnD в Telegram (@dnd5char_bot, бэкенд на Python), и квесты там рождаются прямо в игре: игрок поговорил с трактирщиком - нейросеть выдала поручение. С 10 июля по 12 сентября 2026 я закрыл больше двадцати задач только про квесты. Двойные награды, квесты-зомби, закрытие при живом враге - всё было. Ниже то, что из этого вышло: как проектировать квест, чтобы его не развалила ни нейросеть, ни ты сам.

Сквозной пример на всю статью - реальный квест из прода "Убить тварь и найти поставщика". Он сломался ровно так, как ломаются квесты, которые сочиняет ИИ.

Что такое ветвящийся квест и какие структуры бывают

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

Готовую классификацию дал Сэм Кабо Эшвелл в статье Standard Patterns in Choice-Based Games (январь 2015). Восемь паттернов, последняя колонка - мой опыт с генерацией:

ПаттернКак устроенЧто будет, если ветки дописывает нейросеть
Time CaveСильное ветвление, много концовок, ветки почти не сходятсяОбъём текста растёт лавиной, проверить связность нереально
GauntletДлинная линейная нить, боковые ветки быстро заканчиваются или возвращаютсяСамый безопасный: состояния мало, ломать нечего
Branch and BottleneckВетки регулярно сходятся в общих событиях, выборы помнятся через состояниеМодель забывает флаги прошлых выборов, если их не держит код
QuestМодульные кластеры веток, сходятся к нескольким победным концовкамПлодит дубли и закрывает цели раньше времени
Open MapСтатичная география, между узлами можно ходить туда-обратноГенерирует коридоры бесконечно, если не задать цель
Sorting HatРаннее ветвление распределяет игрока на крупные линейные веткиНормально, если развилка одна и фиксируется кодом
Floating ModulesСцены доступны по состоянию, без центрального сюжетаБез жёстких условий доступа модель выдаёт сцену невпопад
Loop and GrowЦентральная петля, на каждом круге состояние открывает новоеДержится, только пока счётчики круга живут в базе

ИИ-мастер в моём боте - это по сути Quest плюс Open Map. Самая опасная для нейросети комбинация, как выяснилось.

Как написать квест для игры: пошагово

Чтобы написать квест для игры, начни не с текста, а с условий: что считается выполнением, кто выдаёт и принимает квест, что обещано и где игрок может застрять. Текст пишется последним - его можно отдать нейросети. Условия и состояние пишутся первыми и живут в коде или в движке.

На примере квеста "Убить тварь и найти поставщика":

  1. Разбей цель на проверяемые подцели. Не одна строка "убить и найти", а две: "тварь мертва" и "поставщик найден". Квест закрыт, только когда закрыты обе. У меня этот квест закрылся после первой половины - модель решила, что одной победы хватит.
  2. Нарисуй бутылочные горлышки. Куда бы ни пошёл игрок, все ветки сходятся в двух точках: бой с тварью и встреча с поставщиком. Между ними пусть ИИ импровизирует сколько хочет.
  3. Заведи состояние квеста отдельными полями: статус (active, completed, failed), квестодатель, обещанная награда, флаг "награда выплачена". Это не текст, это ряд в базе.
  4. Пропиши, где квест сдаётся. Награда - только у квестодателя и только после выполнения, не в момент удара по твари в лесу.
  5. Задай бюджет глубины для поиска. Если "найти поставщика" - это исследование, через N шагов без результата сцена должна прийти к развязке, а не плодить новые развилки.
  6. Прогони провокации до релиза: "я всё сделал" без доказательств, промах по живой цели, переспрос того же поручения другими словами.

Про скоуп отдельно: квест на две подцели и три ветки - уже приличный кусок работы для соло. Как прикидывать такие объёмы, я разбирал в статье как начать делать игры в одиночку.

Можно ли доверить нейросети писать квесты?

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

С качеством самого текста тоже не всё радужно. В исследовании Värtinen, Hämäläinen и Guckelsberger (IEEE Transactions on Games, 2024) собрали 978 квестов из шести RPG, дообучили на них GPT-2 и показали результат 349 игрокам. Приемлемым оказалось примерно одно описание из пяти. Модели с тех пор сильно подросли, и прозу мой нарратор пишет вполне читабельную.

Проблема в другом. Когда я полез в базу, 1473 из 1477 активных квестов были без цены, а 1426 - без квестодателя. Нейросеть исправно сочиняла "принеси голову волка - заплачу", но поля в состоянии не заполняла. Механика оплаты, которую я так старательно писал, не включалась почти ни у кого :)

Где нейросеть ломает логику квеста

Нейросеть ломает логику квеста в трёх местах: создание (дубли и мусорные квесты), завершение (закрывает раньше времени или при живой цели) и награда (платит дважды или не ту сумму). Все три - про состояние, а не про текст. Ниже реальные поломки из моего бота, июль-сентябрь 2026:

ПоломкаКак выглядело в игреЧем закрыл
Дубли по смыслуИз одного запроса NPC директор плодил несколько почти одинаковых квестовГейт near-дублей: 3 переформулировки дали 0 новых рядов
Квест-зомбиТолько что закрытый квест рождался зановоСверка не только с активными, но и с закрытыми за последние 60 минут
Мусор из реплик"Требую расчёт", "рассказываю" создавали квесты: 3 мусорных за 17 ходовФильтр речевых актов; на реплее 250 прод-квестов мусор пойман 7 из 7
Ложное завершениеКвест закрывался на проходном ходуСтрогое сопоставление (минимум 2 общих основы) и правило "продвижение не равно завершению"
Живая цельКвест закрыт с наградой, а упырь дрался ещё 3 ходаВето завершения, пока цель жива: 4 повтора бага подряд, квест остался активным
Составной квест"Убить тварь и найти поставщика" закрылся после первой частиНазвание режется на подцели, отрицания в прозе учитываются
Голословная сдача"Я всё сделал" закрывало квест с наградойКвестодатель требует доказательств, без них квест активен
Двойная наградаОбещанное золото платилось дваждыФлаг "выплачено" и единый канал выплаты
Чужая ценаИгрок сказал "за десять золотых", NPC ответил "двадцать", записалось 10Цену пишет только ответ NPC, торг игрока игнорируется
Бесконечное подземельеКвест-исследование без цели: нарратор плодил коридоры и развилки вечноБюджет глубины и принудительная развязка

Любимый баг, который без опыта не придумаешь: договорённость "два серебряных" записалась в награду как 2 золотых. При сдаче игрок получал в 10 раз больше обещанного. Нейросеть просто не различала монеты, а схема хранила награду в золоте.

С составным квестом из сквозного примера отдельная история. Первый фикс резал название на подцели, но проза "поставщик так и не объявился" снимала вето: проверка видела слово "поставщик" и считала его найденным. Отрицания пришлось учить отдельно. Подробно этот разбор лежит на dnd-dm.ru.

Как я держу логику квестов в ИИ-мастере на Python

Логику квестов в моём боте держит не нейросеть, а связка из трёх слоёв. Нарратор (LLM) пишет прозу. Отдельный вызов, директор состояния, читает ход и предлагает изменения: создать квест, закрыть, записать цену. Код на Python проверяет каждое предложение гейтами и только потом пишет в базу.

Квест у меня - это ряд в PostgreSQL. Поля, которые выросли из багов выше:

status          active / completed / failed
giver           квестодатель - сдать можно только ему
reward_gp       обещанная награда, пишется из ответа NPC
reward_paid     флаг "выплачено", второй раз не платим
payoff_note     какой должна быть развязка
depth_budget    сколько шагов исследования до развязки

Каждое поле - отдельная поломка из таблицы. reward_paid появился после двойных выплат, giver - после того, как квест сдавался не тому NPC, depth_budget - после бесконечного подземелья.

Что получилось в цифрах:

  • в сентябре 2026 я вынес квесты в отдельный модуль и прогнал окно наблюдения: 1664 хода по логу кассы, 0 расхождений, 0 квестов "закрыт, но не оплачен";
  • принудительная развязка исследования наступает на 2-й ход давления, до фикса было 3. Строгое "этим же ходом" лёгкая модель нарратора не держит, я принял критерий "не дольше двух ходов";
  • тестов в проекте к 18 августа 2026 было 6642, заметная часть - про квесты и деньги.

Гоняю это всё живым QA с реальными аккаунтами: агенты играют, провоцируют баги, пишут вердикты. Как устроен такой стенд, описывал в статье про AI-агентов для тестирования Telegram mini-app.

Игра на Python: что взять для ветвления без нейросети

Если квесты заранее написаны автором, а не генерируются в рантайме, тащить LLM в движок не нужно. Для игры на Python есть Ren'Py: движок визуальных новелл с ветвлением, сохранениями и откатом, сценарии пишутся на своём языке со вставками Python. Для диалогов в любом движке есть ink от inkle: открытый язык с 2016 года, версия 1.0 вышла в феврале 2021, он сам помнит каждый выбор игрока и умеет условные варианты.

Если же думаешь делать игру прямо в мессенджере, сравнение бота, mini app и LLM-варианта есть тут.

Читайте такжеКак создать игру в одиночку с ИИ: что вывозит соло-разработчик в 2026Как создать игру в одиночку с ИИ в 2026: какой движок взять, что агенты в Unity и Godot делают сами, что даёт игра одним промптом и почему соло-проекты умирают от скоупа.

Когда нейросеть для квестов не нужна

Нейросеть в рантайме квеста не нужна, если все ветки можно перечислить заранее, а игрок выбирает из кнопок. Тогда квест пишется руками в ink или Ren'Py, а ИИ годится как помощник для черновиков реплик. Генерация квестов на лету оправдана только там, где игрок пишет свободным текстом и ветки заранее не перечислить.

Моя граница такая: если весь граф квеста влезает на одну схему, нейросеть в движок не пускаю. Каждая генеративная ветка стоит гейтов, тестов и живого QA. Строчку в промпте "не дублируй квесты" модель обходит, проверено: дубли шли прямо мимо запрета в промпте директора. Работает только код.

Эшвелл писал про branch and bottleneck, что такие структуры "almost always rely on heavy use of state-tracking", то есть почти всегда держатся на плотном отслеживании состояния. С нейросетью это правило становится жёстче: состояние - единственное, что удерживает квест от развала. Текст пусть пишет модель, а за поля в базе отвечаешь ты.

Частые вопросы

Какой движок взять для текстового квеста на Python?

Для визуальной новеллы или текстового квеста на Python подходит Ren'Py: ветвление, сохранения и откат там есть из коробки, сценарий пишется на своём языке со вставками Python. Если нужен только диалоговый слой для другого движка, удобнее ink от inkle - открытый язык, который сам помнит выборы игрока.

Сколько веток должно быть в квесте?

Столько, сколько готов протестировать. Удобная форма для инди - branch and bottleneck: ветки расходятся, но регулярно сходятся в нескольких ключевых событиях, а разницу выборов помнят флаги. Так объём текста растёт линейно, а не лавиной, как в сильно ветвящейся структуре.

Можно ли сгенерировать весь сюжет игры нейросетью?

Черновик сюжета - да, готовую игру без правки - нет. В исследовании IEEE Transactions on Games (2024) игроки сочли приемлемым примерно одно сгенерированное описание квеста из пяти. Современные модели пишут лучше, но связность веток и состояние всё равно проверяет автор или код.

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

Влад Новиков
Пишу про AI-разработку без глянца. Новые разборы — сначала в канале.
Подписаться