← Все статьи
burniq / Истории

Я хотел сделать игру мечты с ИИ. Получился симулятор ловли говна

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

Игра, которую я давно хотел сделать

Я давно хотел сделать свою игру. Перебирал идеи, отсеивал то, во что самому было бы неинтересно играть. Одна из задумок появилась после «Стражей Галактики»: мне понравилось быть командиром, указывать команде, что и где нужно сделать. Захотелось попробовать что-то похожее, но с возможностями современных нейросетей.

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

С Codex — помощником для написания кода — я уже пробовал работать над этой игрой раньше. Теперь вернулся к проекту. Интерпретация команд в целом получалась неплохо. Проблемы начались с того, что должно было происходить на экране.

Красивый арт ещё не был персонажем

Мне хотелось, чтобы бойцы выглядели симпатично и нормально двигались. Мы искали стиль: я показывал PEAK, Deathloop, просил упростить детализацию до уровня Warcraft III. В конце концов получилась картинка, которая меня действительно устроила. Я ответил: «Отлично, это то что нужно».

Концепт, который мне понравился. Именно такого персонажа хотелось увидеть в игре.
Концепт, который мне понравился. Именно такого персонажа хотелось увидеть в игре.

Но перенести этот стиль в трёхмерную модель не получилось. Референс уже был перед глазами, а результат всё равно сильно от него отличался.

«Мягко говоря, 3д результат не соответствует 2д концепту…»

Слева — одобренный концепт. В центре и справа — модель в игровом движке. Для меня разница оказалась слишком большой.
Слева — одобренный концепт. В центре и справа — модель в игровом движке. Для меня разница оказалась слишком большой.

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

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

Противники появлялись из ниоткуда при подходе к их позиции, двигались не так, как хотелось. Где-то было слишком просто, где-то — непонятно, что вообще делать. Я хотел командовать отрядом, а по уровню можно было просто пробежать. Зачем тогда нужна команда?

Мне не хватало последовательности в разработке. Хотелось, чтобы помощник задавал больше вопросов, уточнял задумку и учитывал её, когда делал следующую часть игры. Приходилось запускать очередную версию, обнаруживать такие вещи и возвращаться с объяснениями.

Попробуем без стрельбы

Тогда я стал искать идею, которая казалась проще. Возможность командовать мне по-прежнему нравилась. А если вместо отряда будет строительная бригада, а я — прораб?

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

Я ориентировался на знакомые строительные игры. Есть Minecraft, Rust; мне нравится Raft. Казалось, что можно взять понятные принципы строительства и добавить к ним рабочих, с которыми общаешься через ИИ. Получившийся прототип, однако, совсем не давал того ощущения, ради которого я люблю такие игры.

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

Из переписки

Что приходилось объяснять на практике

  1. Никита

    на первом же уровне ты сделал яму из которой можно не выбраться.

    Сначала нужно было добиться, чтобы обучение вообще можно было пройти.

  2. Никита

    удобное - это с иконками-превью элемента как это уже реализовано в десятках лучших игр жанра, это когда не открывается отдельное меню останавливающее игру

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

  3. Никита

    чем отличается домкрат, лифт и подъемник?

    Новые названия появлялись, но разница в применении была неочевидной.

Фрагменты моих сообщений; написание сохранено.

Я просил разнообразные механизмы и одновременно хотел, чтобы в игре смог разобраться девятилетний ребёнок. Мне были нужны понятные действия, из которых можно собирать разные решения. А получалось, что разбираться приходилось уже с самим набором инструментов.

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

В процессе я и сам менял решения. Например, попросил изометрию, а после отказался от неё. Но этим не объяснялись ни яма без выхода, ни неудобное строительство, ни механизмы с почти одинаковыми функциями. Даже когда было понятно, чего я хочу, до подходящего результата оставалось много работы.

До решения отложить большой проект я отправил 100 сообщений: с идеями, ответами на вопросы, замечаниями и просьбами переделать. Я думал, что смогу обходиться без подробного ТЗ, обсуждая всё по ходу. На этой попытке такой подход не сработал так, как я ожидал. Приходилось слишком многое проговаривать и проверять самому, а игра всё ещё меня не устраивала.

Я попросил сохранить проект на будущее. Следующую задачу хотелось сделать настолько простой, чтобы уже не спорить о том, какой должна быть игра.

Ладно, будем ловить говно

К этому моменту результат большой разработки мне самому казался какашкой. Так что идея следующей игры возникла вполне в тему: симулятор ловли какашек.

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

Такой жанр давно знаком. Мне хотелось сделать небольшую игру-мем: зацепить нелепой темой и дать простой повод поиграть. Глубокой истории и сложной системы команд здесь уже не требовалось.

Через 23 минуты после сообщения с идеей я написал: «это уже выглядит действительно рабочим вариантом». Это время между двумя репликами в чате. Впереди была ещё доводка, но саму задумку уже можно было попробовать.

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

И даже здесь оказалось недостаточно просто заставить человечка ловить предметы. Нужно было сделать так, чтобы играть оставалось интересно. Как меняется сложность? Что происходит после промаха? Ради чего проходить дальше?

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

Поздний гардероб: примерка, разные лица, обычные и премиальные костюмы в одной сетке.
Поздний гардероб: примерка, разные лица, обычные и премиальные костюмы в одной сетке.

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

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

Путь проекта

Что осталось от первоначальной идеи

  1. Отряд

    Командовать бойцами с разными характерами и свободной интерпретацией приказов.

  2. Бригада

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

  3. Высотка

    Дать строительству цель: поднять тележку с грузом по этажам.

  4. Корзина

    Отложить большой проект и собрать отдельную маленькую игру с понятными правилами.

Получилась ли моя игра?

Вот текущий результат: ловля, пятна на полу, бонусы, костюмы. Его можно показать, а не только описать словами.

Вот как выглядит результат: ловля, промахи, пятна на полу и примерка костюма. Запись из игрового движка; персонажем управляет демонстрационный скрипт.

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

Самой большой ошибкой в моих ожиданиях было то, сколько работы я надеялся оставить нейросети. Я хотел обсуждать идеи, пробовать варианты и вместе находить удачные решения. На практике приходилось подробно объяснять даже привычные игровые вещи, проверять очередную реализацию и снова объяснять, что с ней не так.

Не думаю, что одно подробное ТЗ само по себе решило бы проблемы моделей, анимаций и уровней. Но мой расчёт на то, что всё удастся согласовать и собрать на лету, тоже не оправдался. Эту работу всё равно нужно было делать, и значительная её часть осталась на мне.

Маленькая игра-мем получилась. Свою первоначальную игру я пока не сделал. Большой проект сохранён — к нему ещё хочется вернуться, уже с пониманием того, сколько в нём предстоит решить самому.

Увеличенное изображение