Как написать квест для игры с нейросетью: ветвление без дыр в логике
Ветвящийся квест - это граф из целей, точек выбора и условий выполнения. Нейросети можно доверить текст квеста, но не логику: состояние (квестодатель, обещанная награда, статус, флаг выплаты) должен держать код и проверять каждое изменение, которое предлагает модель. Иначе квесты дублируются, закрываются раньше времени и платят дважды.
Как написать квест для игры с нейросетью: структуры ветвления, пошаговый план и 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. Самая опасная для нейросети комбинация, как выяснилось.
Как написать квест для игры: пошагово
Чтобы написать квест для игры, начни не с текста, а с условий: что считается выполнением, кто выдаёт и принимает квест, что обещано и где игрок может застрять. Текст пишется последним - его можно отдать нейросети. Условия и состояние пишутся первыми и живут в коде или в движке.
На примере квеста "Убить тварь и найти поставщика":
- Разбей цель на проверяемые подцели. Не одна строка "убить и найти", а две: "тварь мертва" и "поставщик найден". Квест закрыт, только когда закрыты обе. У меня этот квест закрылся после первой половины - модель решила, что одной победы хватит.
- Нарисуй бутылочные горлышки. Куда бы ни пошёл игрок, все ветки сходятся в двух точках: бой с тварью и встреча с поставщиком. Между ними пусть ИИ импровизирует сколько хочет.
- Заведи состояние квеста отдельными полями: статус (active, completed, failed), квестодатель, обещанная награда, флаг "награда выплачена". Это не текст, это ряд в базе.
- Пропиши, где квест сдаётся. Награда - только у квестодателя и только после выполнения, не в момент удара по твари в лесу.
- Задай бюджет глубины для поиска. Если "найти поставщика" - это исследование, через N шагов без результата сцена должна прийти к развязке, а не плодить новые развилки.
- Прогони провокации до релиза: "я всё сделал" без доказательств, промах по живой цели, переспрос того же поручения другими словами.
Про скоуп отдельно: квест на две подцели и три ветки - уже приличный кусок работы для соло. Как прикидывать такие объёмы, я разбирал в статье как начать делать игры в одиночку.
Можно ли доверить нейросети писать квесты?
Текст квеста нейросети доверить можно, логику - нет. Модель пишет живые реплики и описания, но сама не держит состояние: забывает обещанную награду, путает статусы, объявляет квест выполненным раньше времени. Рабочая схема - нейросеть генерирует прозу и предлагает изменения, а код проверяет и применяет их.
С качеством самого текста тоже не всё радужно. В исследовании 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-конвейером по темам и заметкам из практики, факты сверены с первоисточниками, финальный текст я прочитал, поправил и утвердил перед публикацией. Обложку к статье тоже рисует нейросеть. Про сам конвейер — в разделе обо мне.
