Такафуми Хориучи

Создание собственного покемона: исследовательский прототип внутри игры

Обзор

Я создал исследовательский прототип, который генерирует новый вид покемона по шести словам, выбранным во время игры. Через несколько минут он появляется в высокой траве: игрок может встретить его, поймать и дать прозвище. Прототип генерирует внешность, имя, тип, базовые характеристики, приёмы и данные для интеграции в игру.

Прототип связывает внутриигровой разговор, выбор слов, фоновую генерацию, встречу с диким покемоном, поимку и ввод прозвища, не останавливая игру. Каждый сгенерированный вид регистрируется в форме, доступной существующим игровым системам.

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

Вопрос — если что-то уникально, возникает ли привязанность?

Игры позволяют выбирать, развивать и называть персонажей, пока те не начинают ощущаться по-настоящему своими. Но отправной точкой всё равно остаётся набор вариантов, подготовленных разработчиком. Если бы генеративный ИИ позволял игроку участвовать в создании персонажа с самого начала, стала бы привязанность сильнее?

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

Прототип не позволяет сделать вывод о привязанности. Его цель — встроить сгенерированный контент в обычную игру и определить условия для будущих сравнений.

Ход игры

Ниже показан вариант с участием игрока. В лесу Петалбург (Petalburg Woods) игрок говорит со старушкой и выбирает шесть слов из существующего словаря Easy Chat. Генерация продолжается в фоне, пока игрок играет дальше. Крик сообщает о готовности нового вида; вход в высокую траву вызывает встречу, и покемона можно поймать обычными действиями. При каждой генерации создаются имя, тип, базовые характеристики, приёмы, боевые спрайты спереди и сзади и значок для команды. Полная последовательность показана в демонстрационном видео.

Пожилая пара стоит перед игроком в лесу Петалбург (Petalburg Woods). В диалоге спрашивается, какое существо представляет игрок.
Игрок начинает с разговора со старушкой.
Экран Easy Chat с заголовком Picture the creature: и выбранными словами BEAUTIFUL, ATTACK и FIRE.
Игрок описывает идею шестью словами из существующего словаря Easy Chat в Pokémon Emerald.
Игрок стоит у высокой травы в лесу. В диалоговом окне: The tall grass is rustling... Something is in there! — «Высокая трава шевелится… В ней кто-то есть!»
Генерация на ПК занимает несколько минут. Крик сообщает, что новый вид готов.
Экран боя: красная ящерица с пламенем на голове обращена к игроку. Текст: Wild FLAMEREL appeared! — «Появился дикий FLAMEREL!»
Огненный ящер FLAMEREL появляется из колышущейся травы.
Во время боя в FLAMEREL бросают покебол.
Как и другие виды, его можно поймать с помощью покебола.
Экран выбора прозвища FLAMEREL с введённым GGG.
Новому виду можно дать прозвище, как и любому другому покемону.
Экран команды: сгенерированный вид имеет собственный значок и показан вместе с тремя существующими покемонами.
Новый вид получает собственный значок и появляется в команде игрока.
Экран сведений о FLAMEREL: огненный тип, способность Blaze, характер Naughty; встречен на уровне 7 в Petalburg Woods.
Сгенерированные данные работают с существующим экраном сведений о покемоне.

Задача проектирования: сделать сгенерированных персонажей пригодными для игры

Создать нового персонажа и обеспечить его работу в игре — разные задачи. Слишком высокие характеристики нарушают баланс сложности, а несогласованные типы и приёмы могут затруднить развитие персонажа. Чрезмерно сложный дизайн может стать неузнаваемым при уменьшении до спрайта 64 × 64 пикселя.

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

Поэтому я сосредоточился на проектировании пространства возможных покемонов, а не одного персонажа. Человек задаёт цели, ограничения, запрещённое содержание и методы проверки; ИИ разрабатывает варианты в этих рамках. Этот работающий прототип воплощает мой подход к проектированию на основе ограничений.

Подход: определить условия генерации

Система просит большую языковую модель (LLM) заполнить заранее заданные поля — имя, тип, базовые характеристики, приёмы, форму тела и цвет, — а не написать произвольный текст. Валидатор проверяет каждый ответ перед его принятием. Если ответ нарушает правило, система возвращает конкретное нарушение и просит модель повторять генерацию, пока требования не будут выполнены.

  1. Человек задаёт границы. Требования к игровому балансу, читаемости спрайтов и допустимому содержанию становятся явными проверяемыми правилами.
  2. ИИ разрабатывает варианты. Модель использует слова игрока, предлагая значения разрешённых полей.
  3. Система проверяет результат по правилам: автоматически проверяются числовые диапазоны, сочетания приёмов и запрещённое содержание.
  4. Обратная связь касается только нарушений. Вариант, нарушивший правило, возвращается с указанием причины и генерируется заново.

Ограничения для сохранения игрового баланса. Я задал сумму базовых характеристик в диапазоне 280–360 и верхние и нижние пределы для каждой характеристики. Приёмы извлекались из исходного кода игры и ограничивались приёмами типа самого вида или нормального типа. Приёмы, приводящие к нокауту с одного удара, самоуничтожению, фиксированному урону, а также чрезмерно мощные приёмы были исключены. Валидатор также проверял число атакующих приёмов и наличие приёмов типа самого вида. Шанс поимки, скорость роста и другие факторы были фиксированы, чтобы различия между результатами генерации оставались пригодными для сравнения.

Ограничения для визуальной читаемости. Форма тела выбирается из вариантов с силуэтами, которые остаются различимыми при малом размере спрайта. Словарь цветов и особенностей также ограничен. Человекоподобные черты, кровь, оружие и текст исключены. Инструкции для генерации изображений всегда включают условия вроде «только одно существо», «показать всё тело» и «без лишних конечностей».

В одном зафиксированном запуске модель сначала предложила сумму базовых характеристик 380. Валидатор обнаружил нарушение и запросил повторную генерацию; в итоге получилась спецификация с суммой 320. Результатом разработки стал процесс, который отклоняет варианты за пределами заданных ограничений, а не полагается на случайный успех.

Сохранить весь процесс внутри игры

Игрок использует только внутриигровые разговоры, выбор слов и встречи в траве; отдельного экрана генерации нет. Вычислительно сложная работа выполняется процессом Python на ПК, который обменивается данными с игрой через файлы. Lua-скрипты в эмуляторе mGBA связывают две части, сохраняя привычное управление и вынося обработку ИИ за пределы игры.

  1. Генерация спецификации. Локальная языковая модель превращает шесть слов в данные вида, которые проверяются перед использованием.
  2. Генерация изображений. Модель создаёт опорную иллюстрацию, а затем визуально согласованные спрайты спереди и сзади и значок для команды.
  3. Преобразование в игровые данные. Изображения сокращаются до 15 цветов, затем преобразуются и сжимаются в спрайты и палитры, совместимые с Game Boy Advance (GBA).
  4. Интеграция в работающую игру. Данные записываются в зарезервированную область, добавляя новый вид без перезапуска игры.

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

То, что было подтверждено с помощью прототипа

Я самостоятельно создал прототип для проверки технической осуществимости. Это не законченная игра и не исследование с участием пользователей. Ниже разделены проверенные возможности, реализованные функции и то, что ещё не проверено.

Результат собственного опыта — только уникальности оказалось недостаточно для возникновения привязанности

Когда я сам играл в прототип, у меня не возникло сильной привязанности к сгенерированному покемону. Это моё личное впечатление как разработчика, а не результат, который можно обобщить на других игроков. Однако оно подсказало, что стоит менять в будущем сравнении.

Два фактора показались заслуживающими дальнейшего изучения.

При этом я чувствую привязанность к Ханагицунэ (Hanagitsune) — персонажу, которого создал вне автоматизированного игрового процесса через повторные диалоги с несколькими инструментами генеративного ИИ и ручную доработку. Я сравнивал варианты, исправлял детали и продолжал, пока результат меня не устроил. Думаю, этой привязанности способствовали и качество результата, и моё участие в процессе последовательных доработок.

Ханагицунэ спереди: бледно-зелёная лиса с хвостом, напоминающим ниспадающие лианы, покрытые цветами. Ханагицунэ сзади: виден цветущий хвост во всю длину.
Ханагицунэ — хранитель леса с цветущим хвостом. Там, где он пробегает, вырастают травы и цветы, принося новую жизнь даже бесплодной земле. Он считается символом непрерывного роста леса.
Экран сведений о Hanagi2ne: травяной тип, способность Overgrow, характер Brave; встречен на уровне 7 в Petalburg Woods. Спрайт — бледно-зелёная лиса с цветущим хвостом. Экран боя: Hanagi2ne со спины против дикого Poochyena. Текст: Hanagi2ne used ABSORB!
Ханагицунэ, созданный через повторные диалоги и ручную доработку, был реализован как вид в игре.

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

Реализация

Процесс генерации, система ограничений и проверок, преобразование данных для GBA и изменения в игре опубликованы в репозитории GitHub.

Этот независимый исследовательский проект создан на основе декомпиляции pret/pokeemerald. ROM-файлы, патчи ROM и игровые ресурсы не распространяются. Pokémon — товарный знак Nintendo, Creatures Inc. и Game Freak Inc.; проект не связан с этими компаниями и не одобрен ими.