Хакатон — соло игра за 2 дня на Fable 5 и Nano Banana 2
- вторник, 4 августа 2026 г. в 00:00:07
Вот игра: https://games.zenkovich.space/TokenDelivery/
Вот код и ресурсы: https://github.com/o2-engine/o2-Template/pull/1
Дело в том, что я знатный велосипедостроитель! Я решил сделать игру не просто сам, но еще и полностью на своих инструментах:
игровой движок o2 - https://github.com/o2-engine/o2
нодовая ассето-генерилка онлайн - https://assetsline.zenkovich.space/
Одно дело баловаться синтетическими тестами, другое дело - сделать игру! Хоть и не большую. Начнем с движка

Это мой десятилетний пет-проект, который вот вот стал более-менее пригодным чтобы наконец-то делать в нем игры. В нем есть все что нужно для мобильных и веб игр: 2D / 3D, редактор и сцена, UI, партиклы, анимации, скрыптинг, звуки и физика. Почти как Unity3D, но без существенного изьяна
Я хотел проверить две пункта:
можно ли на o2 делать нормально игры. Именно делать игры, а не постоянно допиливать движок, ибо то ту то там отваливается
применение ИИ в рамках движка, сможет ли он генерить код и ассеты под него, разобраться с функаионалом и тп
Первый пункт, пожалуй, удался. Доработки были, но скорее минорные и по ходу дела, никак меня не тормозили.
Второй пункт, на удивление, тоже удалcя - весь код для игры сгенерен ИИ. Конечно, не без моей помощи, однако ИИ вполне понимал как работать с движком.
Здесь во многом повлияло то, что в репозитории o2 рядом с иходниками лежит markdown документация, где описана архитектура движка, и описаны все подсистемы. Так же в правилах ИИ описано, что прежде чем изобретать какой-то велосипед, стоит уточнить в документации наличие аналога. Например, в одну из итераций над другой игрой, он решил анимации сделать через изинги в коде. Все работает, однако кастомный код хуже чем внутренний формат анимаций, где все эти изинги есть и еще и в редакторе можно докрутить.
Так же повлиял и размер самого o2: всего несколько мегабайт исходного кода. Да, это не много, я знаю о чем говорю, потому что на работе сходники нашей игры (мобильной к слову) весят 70мб.
Ну и конечно же сам Fable 5. Последние модели и правда заставляют задумываться, что я буду делать когда роботы заберут мою работу
Внутри игры используется C++ вперемешку с JavaScript. Игра простая, вполне можно было бы обойтись JavaScript, но мне здесь было интересно проверить связку C++ и JS в своем движке.
Код написан с помощью Claude Fable 5, я его конечно же ревьюил, но руками не делал ничего.
Получилось это отчасти потому что юзал Fable 5, отчасти из-за покрытия тестов. Век тестов, я вам скажу! Раньше их не писали потому что лень, нет времени, из-за глупости... Но сейчас писать тесты - легче простого, грех не пользоваться
Итого вся игра (и движок впридачу) покрыты юнит тестами. Так же есть вкрапления интеграционных тестов на проверку механик: в движке есть функционал для снятия скриншотов, прокрутки кадров, кликов и тп - через тестовый драйвер, который ИИ может использовать для самопроверки.
Базовое правило в корне проекта: на все писать тесты и делать отчет
Это позволяет ИИ строго идти к выполнению задачи, вместо предположений и топтания на месте. В итоге это превращается скорее в работу гейм-дизайнера, где ты уже говоришь не что накодить, а что ты хочешь получить: "сделай небольшой баунс машинки после вопорота"
Далее ИИ идет сам по цепочке: кодить - тестировать - показать мне. Итого у меня скопилось более 50 скриншотов-отчетов о проделанной работе, по которым видно как "вырастает" игра

С одним лишь кодом игру не сделаешь! Окей, можно, смотря на явление демосцены, поражаешься на что может быть способен просто код...
Ну да ладно, в моей игре арт не генерится в рантайме, а сгенерен заранее. Использовал нынче популярный ИИ для генерации изображений - Nano Banana 2. Относительно дешев, умеет понимать стилистику, и почти что контролируемый. Забегая вперед - контроль генерации изображений и был самой большой головной болью
И здесь можно разделить работу над артом на три части:
генерация концепта, интерфейса и базовых объектов
генерация карты, зданий и пропсов (лавочки, кусты и тп)
генерация звуков, музыка, видео
Основная проблема генерации арта для игры: следование общему стилю и соблюдение технических требований.
Вы можете попросить ИИ сгенерировать иконку, кнопку, домик и все что нужно для игры - и он все сгенерирует. Но если вы попробуете собрать из этого игру или интерфейс... оно мягко говоря не будет подходить друг к другу. Каждый раз для ИИ это будет с чистого листа, и он сделает как посчитает нужным, а не как вы себе представляете
С этой идеей я сделал свою небольшую тулзу, где с помощью нод можно собирать пайплайны генерации арта, который будет наследовать стиль и описание, а так же заточен под игры - делать прозрачный фон, вырезать спрайты и тп
Вот пример пайплайнов для генерации арта в игру хакатона,
https://assetsline.zenkovich.space/#/s/FkxYrwbE-EIam4-tVhR7R6V6UnyvkAuGl5WuOAYdr_U?p=the%20loop
Как это работает:
сначала пользователем задается описание и сеттинг игры, с помощью текстовых нод
из этого генерируется концепт игры (или можно вставить свой)
из концепта генерятся экраны игры, объекты и так далее. Все они получают референс в виде самого концепта, поэтому все производные контролируемо наследуют стиль концепта
из концепта, экранов UI, заготовок игровых карт можно извлекать отдельные объекты. Например, спрайты UI - иконки, плашки, кнопки. Из концептов игровой карты объекты, тайлы земли и так далее
эти части можно "доработать" до нужного состояния, описав правки или даже нарисовав от руки какой-то пример
готовые спрайты сохранить в файлы для интеграции в движок
Если приглядеться к скриншоту выше, там так и сделано: слева сгенерирован концепт игры. Сверху извлечены элементы интерфейса HUD: иконка валюты, настройки, прогресс-бар топлива. Снизу извлечена машинка игрока, из нее сгенерено несколько других машинок для траффика.
Но не весь арт получилось сгенерить в этой тулзе, домики и тайлы карты пришлось генерировать с помощью скриптов

Проблема в том, что карта города в игре изометрическая, что накладывает жесткие ограничения на арт для игры:
все объекты карты должны располагаться четко по сетке
должны быть соблюдены углы изометрии
И здесь очередная проблема предсказуемости генератора арта. Да, домики с концепта извлекались весьма бодро, но у всех них плыли либо наклон, либо перспектива, либо вообще все сразу. Попытки собрать из этого "город" были просто ужасны - все криво, косо и вразнобой
Пришлось делать еще более детерминированный пайплайн генерации арта, с помощью скриптов.
Картинки зданий и пропсов все так же генерировались nano banana 2, однако до и после генерации были шаги, добавляющие предсказуемости результату:
Генерация концептов зданий и пропсов с помощью лайн-арта, сгенеренного скриптом. Здесь скрипт готовит супер-простые изображения зданий с четкими параметрами изометрии и размерами сетки. Они в примерах на скриншоте сверху, серые домики с простыми окнами и красным основанием
этот лайн-арт, концепт и довольно жесткие промты подавались на генерацию nano banana 2
полученный результат анализировался скриптом и отправлялся на доп правки через генерацию ИИ. Под сгенеренное здание подкладывался лайн-арт, и жесткий промт - исправить ошибки соответствия параметрам изометрии, убрав его остатки
исправленный вариант проходил валидацию скриптом, если изображение содержало пиксели явно не там где они могли быть - результат отбраковывался и отправлялся на перегенерацию
последний этап - валидация человеком. Подготовленные отчеты я просматривал сам, и указывал какие варианты удачные, а какие генерировать заново

Отдельного внимания заслуживают тайлы дороги, т.к. в них требуется максимальная точность арта, ведь они должны идеально стыковаться друг с другом
У меня было много итераций и попыток сгенерировать готовый тайлсет. Было много правдоподобных вариантов, но они не стыковались и отличались по стилю от концепта. Либо вылезали артефакты разметки дороги и другие мелочи
Здесь выход был такой же, как с домиками - генерация поверх лайн-арта. Но здесь даже пришлось идти еще дальше:

генерировать тайлы дороги в векторном виде в 2D
переводить в изометрию
накладывать текстуры дороги, бардюров и разметку программно
прогонять итоговый тайлсет через nano banana 2 с промтом "улучши, но соблюдай границы"
Получилось хорошо, и попадало в стиль. А самое главное - я получил хорошие стыка тайлов дороги при генерации города.

Здесь финально все генерируется в коде, с простыми правилами и весами у зданий и объектов. Какой-то архитектурной идеи тут нет, и если присматриваться можно найти кучу абсурда. На хакатоне время ограничено, поэтому вот так. Хотя, безусловно, генерацию можно довести.
Интересный момент тут был с попыткой генерировать целые кварталы через nano banana 2. Идея простая - вместо того чтобы составлять кварталы из объектов в коде, можно вставлять целые кварталы, сгенеренные ИИ: они получались гораздо интереснее и продуманнее, без абсурдных расположений зданий и объектов. Лавочки органично стояли в небольших скверах, ларьки не зажаты между 2мя зданиями и вообще много мелких прикольных деталей.
Но довести не получилось, ведь даже супер-детерменированный пайплайн все равно давал отсилы 5% хороших генераций, и идею пришлось отбросить. Плыло все: тени, изометрия, квартал мог спонтанно вырасти вверх потому что пешеходная дорожка логично бы там продолжалась... в общем, довольно бесполезно

Тут все просто, подключен ElevenLabs к нодовой тулзе генерации, и все звуки с фоновой музыкой сгенерированы через него. Немного стоит приловчиться к заданию промта и параметров, но в итоге получается супер-просто

Еще прикольная штука - вставка видео в игру, вместо анимаций. Идея далеко не новая, просто раньше запихивать видео в мобильные игры считалось слишком тяжелым. Сейчас уже можно позволить себе на современных девайсах. А анимацию сделать - пол минуты
Работает просто: видео генерируется с хромокеем, который отрезается шейдером в игре на девайсе. Сверху не самый удачный цвет хромакея выбран, вокруг синего чипа видны артефакты. Но сделано все буквально за 10 минут, что на мой взгял отлично для игры
Хорошо это или плохо, что игра сгенерена с помощью ИИ? Кто-то скажет "нейрослоп!" и отчасти будет прав, нас ждут наводнения беспросветно тупых игр, склепанных за один день.
Однако я тут вижду и массу плюсов. Во-первых, для себя - я могу делать игры, не имея дорогузей команды художников, тестировщиков и программистов. Я могу реализовывать свои идеи
Во-вторых, так как порог сложности выпуска игры снижается, конкуренция выйдет в плоскость интереса самой игры и геймплея. То есть будут побеждать в игре на выживание не просто те, кто способен сделать игру, а самые интересные идеи с точки зрения задумки и геймплея. Думаю это однозначно приведет нас к очередным шедеврам
Больше о разработки игры, движка и околотехнического, в моем менее формальном телеграм канале: https://t.me/o2engine