- Дата публикации
Как большие языковые модели прошли визуальную новеллу «Бесконечное лето»
Что открыли
Автор развернул несколько больших языковых моделей локально и заставил их играть в визуальную новеллу «Бесконечное Лето». Задача для ИИ — не просто нажимать случайные варианты, а осмысленно читать реплики, понимать контекст и выбирать ответы в диалогах.
Игра даёт 13 разных концовок и множество межличностных конфликтов. Это превращает её в стресс-тест для моделей: как они ведут себя в сложных отношениях, с кем «симпатизируют», избегают ли острых тем. Проект показал, что языковая модель может поддерживать непрерывный диалог внутри игры и самостоятельно проходить ветвящийся сюжет, если связать движок Ren’Py с внешним ИИ через простой сетевой мост.
Как исследовали
Автор использовал несколько локально развернутых моделей (в том числе DeepSeek) через Ollama. Фокус — не на сравнении моделей, а на том, можно ли вообще встроить их в механики визуальной новеллы.
Игра — «Бесконечное Лето» на движке Ren’Py. Скрипты игры хранятся в .rpy-файлах, где каждая строка — реплика персонажа или рассказчика, а выборы оформлены через конструкцию menu:. Именно это и превратилось в интерфейс для ИИ.
В игру добавили новый файл bridge.rpy. В нём автор объявил блок init -100 python и написал «мост» на чистом Python: TCP-сервер на сокетах, который слушает порт 8765 в отдельном потоке. Этот класс (CLIBridge) умеет отправлять и принимать JSON-сообщения и держит постоянное соединение с внешним процессом, где крутится языковая модель.
Дальше автор перехватил ключевую функцию движка — renpy.exports.say, которая отвечает за вывод каждой реплики на экран. Оригинальную ссылку сохранил, а поверх определил свою _cli_say. Новая версия очищает текст от простых тегов форматирования, вытаскивает имя персонажа (если оно есть) и отправляет реплику наружу через CLI‑мост. Внешний процесс с LLM читает контекст и возвращает ответ или выбор в меню.
Игровые действия — выбор пунктов в menu: — тоже автоматизировали: ИИ получает список вариантов и отдаёт индекс или текст нужного ответа. Вся логика запускается в фоновом режиме при старте игры за счёт низкого приоритета init -100 и init -90, чтобы не ломать остальной сценарий.
Что это меняет на практике
Эксперимент показывает: визуальные новеллы на Ren’Py можно превратить в полноценный полигон для тестирования ИИ‑агентов. Не нужны сложные интеграции — достаточно одного .rpy с TCP‑мостом и перехватом нескольких функций движка.
Для игровой индустрии это быстрый способ прототипировать:
- неигровых персонажей, которые ведут себя менее шаблонно;
- сюжетные развилки, которые подстраиваются под стиль игрока;
- автоматизированное тестирование сценариев: ИИ может прогнать десятки прохождений и собрать нетривиальные концовки.
Для исследователей языковых моделей здесь удобный и понятный стенд: модель сталкивается с конфликтами, романтическими линиями и моральными выборами, где «правильного» ответа нет. Это полезнее, чем сухие бенчмарки на наборе фраз.
До массовых продуктов рукой подать: Ren’Py уже популярен у инди‑команд, а интеграция сводится к одному служебному файлу и локально работающей модели. Ограничения очевидны — задержки из‑за генерации текста, необходимость оптимизировать промпты, плюс риск, что модель будет сглаживать острые углы сюжета. Но технически связка уже работает на бытовом железе и собирается за пару вечеров.
Что это значит для вас
Если вы разрабатываете игры на Ren’Py, пример показывает минимальный набор шагов, чтобы подключить языковую модель к живому проекту: локальный LLM через Ollama, один Python‑класс с TCP‑сокетом, перехват say и menu. Не нужно ждать большого движка или отдельного SDK.
Если вы экспериментируете с ИИ‑агентами, визуальные новеллы вроде «Бесконечного Лета» — удобный формат для проверки, как агент ведёт себя в истории: чьи маршруты он выбирает, насколько последователен, как реагирует на конфликты.
Если вы просто интересуетесь языковыми моделями, важно другое: ИИ можно не только спрашивать в чате, но и встраивать в готовые миры, где у него есть роли, отношения и последствия решений. Проект показывает это на знакомой игре, с открытым кодом и понятной архитектурой — и даёт отправную точку для собственных экспериментов.