Как сделать из нейросети честного Гейм-мастера? Мой опыт создания текстовой RPG с кубиками D20, картой и пермадезом

Привет, DTF!

Вы когда-нибудь ловили себя на мысли во время чтения книги или просмотра сериала: «Блин, а как бы повернулся сюжет, если бы мой персонаж поступил вот так?». Наверняка многие пробовали заходить с этим в ChatGPT или AI Dungeon.

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

Я знатно психанул от этого и решил написать свой игровой движок «Стирая Грань» (Beyond The Verge) — текстовую RPG полностью на русском языке, где свободная фантазия нейросети закована в жёсткие рамки классических настолок.

Тем более, сейчас можно навайбкодить что угодно, если приложить немного усилий :)

Интерфейс: Уходим от формата банального «чатика»

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

Чат-нарратив: Здесь разворачивается сам текст истории. Для тех, кому лень постоянно писать действия руками, движок генерирует контекстные кнопки выбора. Лист персонажа: Сайдбар на 11 вкладок. Тут и инвентарь, активные квесты спутники и уровень репутации.
Чат-нарратив: Здесь разворачивается сам текст истории. Для тех, кому лень постоянно писать действия руками, движок генерирует контекстные кнопки выбора. Лист персонажа: Сайдбар на 11 вкладок. Тут и инвентарь, активные квесты спутники и уровень репутации.
Полноценный интерактивный граф локаций. Никакого «вы стоите где-то в лесу». Есть туман войны, скрывающий неизведанные земли, и чёткие маркеры квестов. Куда кликнули — туда персонаж и путешествует, тратя энергию.
Полноценный интерактивный граф локаций. Никакого «вы стоите где-то в лесу». Есть туман войны, скрывающий неизведанные земли, и чёткие маркеры квестов. Куда кликнули — туда персонаж и путешествует, тратя энергию.

Как это устроено изнутри: Авторитарный бэкенд

ИИ в моей игре — это наёмный ведущий, у которого связаны руки. Он не может на ходу выдумать, что вы мгновенно разбогатели или стали бессмертным. На каждый ваш ход нейросеть обязана вернуть серверу строго валидируемый JSON-контракт.

Выглядит этот контракт под капотом примерно так:

{ "narration": "Вы продираетесь сквозь задымленный подлесок Мёртвого Перевала. Внезапно из тумана выскакивает одичавший гончий пес Пустоши. Вы успеваете перехватить оружие, но тварь полосует вас когтями по плечу, прежде чем вам удается отбросить её точным ударом. Похоже, шум привлек внимание — на скале неподалеку вы замечаете силуэт кочевника, который внимательно наблюдает за вами.", "state_changes": { "location": "dead_pass_depths", "objective": "survive_the_pass", "character_patch": { "hp": 9 }, "check_occurred": { "label": "Отражение атаки в ближнем бою", "stat": "might", "difficulty": 12, "outcome": "success" }, "inventory_found": [ { "name": "Когти гончей", "description": "Острые как бритва. Подойдут как материал для крафта.", "type": "material" } ], "resources_delta": { "label": "Патроны", "amount": -2 } }, "choices": [ { "id": "talk_to_scout", "label": "Окликнуть незнакомца на скале", "tag": "dialogue" }, { "id": "flee_to_outpost", "label": "Спешно уходить к аванпосту", "tag": "travel" } ], "importance": 6, "world_event_summary": "Схватка на Перевале привлекла внимание разведчиков фракции Рейдеров" }

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

За счёт такого контроля удалось реализовать механики, которых так не хватает обычным нейросетевым чатам:

  • Честный кубик D20. Любое критическое действие (взлом, обман, атака) рассчитывается через виртуальный бросок кубика, завязанный на ваши характеристики (might, wit, spirit, craft). Движок берёт текст вашего действия и превращает его в уникальный цифровой отпечаток. Считерить через «сейв-лоад» (перезагрузку страницы) не выйдет: кубик для одного и того же действия всегда выдаст тот же результат. Выпала единица — ИИ обязан описать ваш позорный провал.
  • Векторная память против склероза. Хроники мира кодируются и сохраняются в векторную базу данных. ИИ всегда помнит, что происходило 50 ходов назад, потому что бэкенд сам находит важные факты и незаметно подмешивает их в контекст перед каждым вашим действием.
  • Перманентная смерть и Эпилоги. На хардкоре у вас всего 3 жизни. Погибли от потери здоровья или истощения энергии — кампания закрывается навсегда. Но игра на этом не обрывается: ИИ генерирует масштабный финальный Эпилог (в духе Fallout или Disco Elysium), расписывая наследие вашего персонажа и судьбу фракций на основе всех совершённых вами выборов.
  • Живой мир (Butterfly Simulation). Пока вы думаете над ходом, на сервере тикает симуляция: фракции воюют за влияние, сменяются циклы дня и ночи, а погода меняется с вероятностью 15% за ход, напрямую меняя атмосферу в тексте.

Где пощупать?

Проект полностью живой, переведён на русский язык и оптимизирован под десктоп и мобильные браузеры: beyondtheverge.online

Чтобы не душнить заполнением форм и вводом почты, я сделал гостевой режим на 5 ходов. Можно зайти буквально за три секунды, создать персонажа и проверить, как бэкенд заставляет ИИ кидать кубики на ваши действия.

При создании профиля система выделяет бесплатный лимит примерно на 250 глубоких ходов. Почему именно столько? Один ваш клик «весит» около 4000 текстовых токенов, потому что движок постоянно шлёт ИИ огромные пласты памяти, инвентарь и карту, чтобы мир оставался персистентным и живым. Этого объёма с головой хватит, чтобы пройти одну большую историю или проверить память гейм-мастера на прочность.

Как сделать из нейросети честного Гейм-мастера? Мой опыт создания текстовой RPG с кубиками D20, картой и пермадезом

На выбор доступно 10 сеттингов (ЛитРПГ, мрачный гримдарк, постапокалипсис, уютный детектив, хоррор и т.д.) и 10 литературных жанров — движок сам пересоберёт под них стартовые квесты, расы и классы.

Залетайте, пробуйте скрафтить что-нибудь безумное из хлама или отлететь на хардкоре в первой же подворотне. Жду геймеров и коллег-разработчиков в комментариях — делитесь мыслями, критикуйте, баги сами себя не найдут!

10
1
19 комментариев