Диалоги с NPC, которые не двигают цифры, и мир, который помнит прошлую партию — апдейт «Вертикали власти»
Привет, DTF. Неделю назад я рассказывал про «Вертикаль власти» — текстовый симулятор правления, где LLM понимает свободный ввод и ведёт историю, но числа считает детерминированный Rule Engine: у нейросети физически нет права записи в игровое состояние, поэтому её нельзя ни уговорить, ни разжалобить. Вот тот пост: https://dtf.ru/indie/5190578-tekstovaya-igra-vertikal-vlasti
За неделю игра прилично подросла — рассказываю, что добавилось и какие решения за этим стоят. Спойлер: самое интересное — как сделать диалоги с NPC, не открыв нейросети чёрный ход к читерству.
Диалоги с фракциями: право голоса без права записи
Теперь с любой из семи фракций можно поговорить — отдельным окном, не тратя ход. Нейросеть отыгрывает главу силовиков или редактора газеты: цели и рычаги фракция берёт из БД, текущую лояльность получает словами («холодна», «враждебна») — не числом, чтобы не сорить цифрами в отыгрыш. Память партии подключена: NPC помнит, что ты делал.
Архитектурная развилка была одна, и она принципиальная: может ли разговор менять state? Ответ — категорически нет. Разговоры бесплатны и не расходуют лимит ходов; если бы удачная реплика двигала лояльность, получился бы бесконечный источник влияния — и LLM вернула бы себе право записи в мир, только через диалоговую дверь. Вся конструкция «рассказчик при жёстком гейммастере» рухнула бы в том месте, где казалась самой живой.
Поэтому влияние идёт двумя честными каналами:
- Итог разговора ложится в память партии — дальше его читают нарратор и генератор подсказок, и мир реагирует на сказанное.
- Часть действий заперта за разговором: правило вида «пакт с силовиками» недоступно, пока не закрыт диалог с этой фракцией. Проверка детерминированная, по таблице диалогов, а не разбором текста — доступность действия обязана быть однозначной.
Побочный урок: NPC сначала «отвечал на пустоту» — реплика игрока на момент LLM-вызова ещё не записана в БД, и в контекст уходила только прошлая история. На фейковом клиенте в тестах это невидимо, поймалось только живым прогоном. Теперь текущая реплика едет в контекст отдельным параметром, а на неё смотрит регрессионный тест.
Наследие: мир помнит, кем ты был
Доигранная партия оставляет отпечаток на следующей в том же мире: стартовые лояльности фракций сдвигаются в память о предыдущем правителе, а завязка новой партии прямо рассказывает, кто и как тебя помнит.
Главная опасность такой механики — снежный ком: победитель стартует сильнее, побеждает ещё легче, и так далее. Держат её три правила: учитывается только последняя доигранная партия (наследие не копится); след оставляют лишь крайности — фракции, у которых лояльность сильно отклонилась от середины; и «правило зеркала» — отпечаток никогда не бывает односторонним. Безупречная партия всё равно даёт завистника, полный провал — того, кому он был выгоден. Технически наследие идёт через тот же канал модификаторов, что и архетипы на старте, с тем же клэмпингом: отдельного пути записи в state не появилось, инвариант «числа считает только Rule Engine» не тронут.
Лидерборд, ники, достижения
Каждая доигранная партия получает счёт (ресурсы нормируются в долю своего диапазона — иначе мир с миллиардами в казне обгонял бы мир с процентами), и по нему строится доска лучших: по мирам и за период. Одна строка на игрока — его лучшая партия, чтобы один активный игрок не занял весь топ своими прогонами. На доске все анонимны («Игрок #42»), пока сами не зададут ник. Плюс достижения — от «дожил до 10-го хода» до накопительных за всю карьеру — и личная статистика.
Одиннадцатый мир: ИИ-лаборатория
И новый мир, который я не мог не сделать: ведёшь ИИ-лабу от гаража до системы, решающей задачи, которым её не учили. Первый мир, где ресурсы устроены треугольником, а не тремя шкалами: возможности растут за счёт доверия, безопасность тормозит возможности, деньги приходят под обещания. «Прокачать всё» невозможно по конструкции. Ирония в том, что игру про гонку за AGI ведёт та самая нейросеть, про которую эта игра, — под теми же запретами.
Движку для нового мира по-прежнему не нужно ни строчки кода: вертикаль — это строки в базе. Миров теперь одиннадцать, эпох на них — шестьдесят.
Поиграть
Бесплатно, без регистрации, партия начинается за две минуты:
- В браузере: https://vertical-game.ru
- В Telegram: @vertical_game_bot
Как и в прошлый раз, главный вопрос к вам: на каком ходу стало скучно и почему. Именно из ответов на него выросли и диалоги, и наследие.