Мой покемон, единственный в мире
июль 2026
Обзор
Посреди игры, в окне внутри самой игры, игрок набирает несколько слов. Игра продолжает работать, а ИИ превращает эти слова в совершенно новый вид покемона — рисунок, имя, тип, базовые характеристики и приёмы — и вносит его как полноправный вид. Ты встречаешь его в высокой траве, ловишь, даёшь прозвище и растишь, как любого другого.
Ничего не написано заранее. Вида, который в итоге оказывается в файле сохранения, прежде не существовало, и больше он не существует нигде.
Часть того, что игры всегда предлагали, — это возможность сделать нечто своё. На деле это означало выбор из заранее заданного набора. Этот проект существует, чтобы проверить, делает ли порождающий ИИ слово своё буквально верным — и, что важнее, становится ли буквально своё тем, к чему игрок действительно привязывается.
Как это проходит
Всё начинается с разговора с пожилой женщиной в Петалбургском лесу. Ты описываешь существо, которое держишь в голове; пока ты продолжаешь играть, эти слова превращаются в вид; и через несколько минут он уже ждёт в высокой траве — чтобы его встретили, поймали и дальше использовали ровно так же, как всё остальное в игре. Всё делается на месте: имя, тип, базовые характеристики, набор приёмов, оба боевых спрайта и значок в отряде.
Полный проход, от начала до конца, записан здесь: My Own Pokémon Generation — demo02.
Почему именно это, а не генератор существ
Интересная задача не в том, способен ли ИИ выдумать покемона. Она в том, способен ли он выдумать такого, которого игра сумеет принять, не развалившись. Предоставленный самому себе, генератор выдаёт либо нечто непригодное — чудовище с суммой характеристик 900, обесценивающее игру, — либо нечто неприятное: искажённый спрайт, который перестаёт читаться как существо.
Значит, работа дизайнера здесь — не существо. Это пространство, внутри которого оно порождается: диапазоны характеристик, правила допустимости приёмов, силуэты, переживающие спрайт 64×64, словарь, которым игроку вообще позволено описывать. Модель обходит это пространство. Определять его ей не дано.
Этот проект — то место, где моя философия дизайна перестаёт быть утверждением и подвергается проверке: определить цели, ценности, ограничения и границы, формирующие пространство решений, дать порождению произойти внутри него и выяснить, держится ли результат.
Рамка и есть исследование
Языковая модель никогда не пишет свободно. Она заполняет поля фиксированной схемы, и каждый выход заново проверяется валидатором. Нарушения возвращаются на повторное порождение вместе с конкретным правилом, которое было нарушено.
Ограничения баланса сохраняют игру играбельной. Сумма базовых характеристик удерживается в фиксированном диапазоне — от 280 до 360, примерно уровень стартового покемона — с диапазонами по каждой характеристике, а спецификации вне диапазона отклоняются сразу. Приёмы автоматически извлекаются из исходников pokeemerald, затем фильтруются до собственного типа вида или обычного типа, при этом убираются приёмы мгновенного нокаута, эффекты самоуничтожения и фиксированный или чрезмерный урон. Полученный набор проверяется на состоятельность: достаточно ли атакующих приёмов, есть ли хотя бы одна атака своего типа, не больше ли одного приёма высокой мощности. Уровни назначаются рамкой детерминированно, а не моделью. Всё остальное закреплено — одна способность на тип, шанс поимки, кривая роста, соотношение полов, совместимость с ТМ — так что индивидуальные различия остаются внутри полей схемы, а прогоны остаются сопоставимыми.
Ограничения внешнего вида не дают выходу развалиться. Схемы тела берутся из белого списка силуэтов, переживающих спрайт 64×64: четвероногое, грызун, птица, ящерица. Цвет выбирается из именованного белого списка, а цвет тела для покедекса выводится из него механически. Признаки ограничены одной-тремя короткими заготовленными формулировками, а чёрный список отклоняет человеческие черты, кровь, оружие и текст. Итоговую инструкцию рамка собирает сама и добавляет к ней постоянное окончание: одно существо, во весь рост, связная анатомия, без лишних конечностей, спокойное выражение.
Это работает, и за этой работой можно наблюдать. В одном записанном прогоне модель предложила сумму базовых характеристик 380; валидатор отклонил её трижды — 380, 360, 340 — пока спецификация не легла внутрь диапазона, на 320.
Как это устроено
Сама игра не порождает ничего. Работу выполняет постоянно запущенный на компьютере процесс Python, а обе половины разговаривают через файловый почтовый ящик, который Lua-скрипт в mGBA опрашивает каждый кадр.
- Текст. Локальная модель (
qwen3:8b) превращает слова в проверенную запись вида. - Изображение. Модель изображений рисует эталонную иллюстрацию, а затем три согласованных между собой ракурса: передний боевой спрайт, задний и значок в отряде.
- Преобразование. Рисунок квантуется к общей палитре из 15 цветов и переводится в спрайтовый формат pokeemerald.
- Кодирование. Спрайты становятся двоичными данными GBA: тайлы 4bpp и 1bpp, палитры
gbapal, совместимое с BIOS сжатие LZ77. - Внедрение. Двоичные данные записываются в зарезервированную область ROM.
Запись в картридж во время работы означает, что запущенный экземпляр подхватывает новый вид без перезапуска, а та же последовательность байтов уходит на диск, так что изменение переживает перезагрузку.
То, что появляется, устойчиво и необратимо. Оно бродит по миру: сбежишь или проиграешь — оно останется. Собьёшь его — и он потерян навсегда.
Реализация
Генератор, рамка ограничений, кодировщики GBA и патч на стороне игры опубликованы полностью: github.com/takafumihoriuchi/my-own-pokemon-generation.
Послесловие — о привязанности
Прототип закрывает технический вопрос. За ним стоит тот, который меня действительно занимает: значит ли покемон, порождённый для тебя и не существующий больше нигде, в конце концов больше, чем тот, что шёл вместе с игрой?
Из игры в собственную сборку — выборка из одного, и читать в этом больше не стоит — вырисовываются два условия, управляющие ответом.
- Сколько тебя самого в это вошло. Ввести шесть слов — это участие, но тонкое: то, что возвращается, ощущается доставленным, а не сделанным. Похоже, важен не объём вклада, а его свойство — усилие, повторные подходы, место для правки и некоторая ответственность за то, каким всё вышло.
- Качество. Привязанности, похоже, нужно, чтобы порождённое перешагнуло порог. Ниже него сам факт, что нечто уникально и принадлежит тебе, не удерживает чувство в одиночку.
Случай вне игры говорит об обоих условиях. Работая вручную с ChatGPT, ходя туда-сюда, пока не остался доволен, я спроектировал собственный вид — Hanagitsune. Я к нему привязан. Я его сделал, а не заказал, и вышедшее перешагнуло порог качества.
Оба условия поддаются работе. Более глубокий процесс изготовления — выбирать, переделывать, отвергать — сдвигает первое; лучшие модели и тщательнее спроектированная рамка инструкций сдвигают второе. Туда это и идёт дальше.
Так что результат прототипа — не приговор по вопросу. Это вопрос, сделанный измеримым: две величины, которые теперь можно намеренно двигать и наблюдать.
Построено на декомпиляции pret/pokeemerald в порядке личного исследования. Ни ROM, ни патч к ROM, ни игровые ресурсы не распространяются, а все приведённые здесь спрайты — оригинальные работы, порождённые ИИ. Pokémon — товарный знак Nintendo, Creatures Inc. и GAME FREAK Inc.; этот проект не связан с ними и не одобрен ими.