3 года инди разработки в никуда.
Всем привет.
Три года я делал игру, в которой приключения не были заранее написаны автором. Около полутора месяцев назад я решил остановить разработку этой версии проекта.
Это будет не совсем обычное начало дневника инди-разработки. Прежде чем рассказывать о новом, гораздо более компактном проекте, я хочу объяснить, откуда он появился и на что ушли предыдущие три года.
(Заранее прошу прощения DTF против того чтобы я заливал медиа, я пытался)
С чего всё началось
Когда я начинал, у меня не было готовой идеи игры. О геймдеве я задумывался редко. Опыт программирования у меня был, желание сделать что-то своё - тоже, но я не понимал, что именно хочу создать.
Момент, с которого всё началось, я помню довольно отчётливо.
Однажды вечером я размышлял о Baldur’s Gate 3. Это отличная игра, богатая механиками и возможностями. Но меня расстраивала не сама игра и даже не существование гайдов, а то, как быстро обсуждение RPG сводится к готовым билдам: возьми это, не бери то, делай так - и твой герой станет сильным.
Когда для всего уже существует правильный ответ, часть удовольствия от исследования исчезает. Становится меньше экспериментов, неожиданных сочетаний и ощущения, что ты сам открыл что-то новое.
Тогда я подумал:
А что, если навыки в RPG не создавались бы разработчиком вручную, а генерировались?
Эта мысль зацепила меня полностью. С этого момента почти всё свободное время стало уходить на проект.
И очень быстро выяснилось, насколько он сложный.
Сначала была тысяча страниц документации
Я начал с документации: технической и геймдизайнерской. Описывал механики, устройство мира, видение проекта, взаимосвязи систем, примерную стоимость разработки - и в деньгах, и в усилиях.
Один только файл с технической документацией со временем превысил тысячу страниц. Причём значительные его части я несколько раз переписывал почти с нуля.
Сейчас я понимаю, что уже тогда масштаб проекта рос быстрее, чем сама игра. Тысяча страниц выглядит внушительно, но одновременно это был первый тревожный сигнал: я пытался заранее спроектировать огромную систему, которую следовало проверять небольшими прототипами.
Также довольно быстро стало понятно, что 3D игра масштаба Baldur’s Gate 3 невозможна для одного человека. В обычной игре можно вручную подготовить модель, анимацию и эффект для конкретной ситуации. В системной игре с огромным количеством генерируемых сочетаний каждое новое взаимодействие многократно увеличивает объём производства.
Поэтому от идеи большой качественной 3D RPG я отказался почти сразу.
Примерно через полгода работы над документами проект начал приобретать очертания. Это должна была быть игра об авантюристах.
В то время я очень увлёкся D&D. Больше всего меня впечатляли не заранее написанные сюжеты, а истории, которые рождались прямо за столом: странные решения, неожиданные провалы, удачные импровизации и ситуации, которых не планировал никто.
Ближе всего к подобному ощущению в видеоиграх для меня подошла Dwarf Fortress. Это во многом уникальная игра, способная создавать невероятные цепочки событий. Но её истории тяжело читать. Текст честно сообщает, что произошло, однако редко превращает происходящее в красивый и связный рассказ, похожий на хорошую настольную историю.
Тогда направление разработки снова изменилось.
Я захотел соединить правдивую симуляцию мира, в которой события действительно происходят по определённым правилам, с выразительным рассказом, превращающим эти события в историю.
Именно в этот момент проект начал становиться игрой, где приключения никто не пишет заранее.
Два года до начала разработки самой игры
Проработка документации, архитектуры, механик и способов соединить всё это заняла около двух лет. Только после этого я начал писать код непосредственно для проекта.
Были периоды, когда даже во время обеда я читал статьи о детерминированных системах случайности и пытался понять, как применить их к генерации мира, событий и текста.
Первый большой слой разработки отвечал за то, что я называл «правдой мира»: что именно произошло, почему это произошло и что персонажи действительно могли знать в момент принятия решения.
У персонажей появились память, характер и система выбора действий. Их поведение нельзя было свести к заранее написанному сценарию: персонажи, навыки и обстоятельства генерировались, разные системы должны были взаимодействовать друг с другом, а игровой ИИ - принимать логичные решения на основании характера, знаний и текущей ситуации.
На выходе система создавала точный лог событий, чем-то похожий на логи Dwarf Fortress: кто что сделал, почему выбрал это действие и к чему оно привело.
Я хотел получить историю приключений.
Как могло выглядеть одно приключение
Примерно полтора месяца назад, уже под конец третьего года разработки, я работал над системой приключений.
Например, глава деревни мог попросить группу выяснить, почему в амбаре портится зерно. Никто заранее не прописывал, как именно пройдёт это задание.
Группа могла заблудиться по дороге, потому что состояла из одних «уга-буга-воинов», которые прекрасно махали мечами, но совершенно не умели ориентироваться на местности. Авантюристы могли проголодаться и добраться до деревни слишком поздно.
Ночью они отправлялись осматривать амбар. Маг мог хотеть помочь и создать источник света, но единственным подходящим заклинанием у него оказывался огненный шар. Он мог не справиться с заклинанием и вместо освещения поджечь амбар.
После этого группа вполне логично пыталась бы исправить собственный косяк. Шаман мог призвать водного элементаля, а тот - критически удачным потоком воды - окончательно завершить начатое магом: снести амбар и раскидать авантюристов по земле, словно тряпочки.
В другой версии событий группа могла неправильно истолковать улики, пойти по ложному следу, обвинить и даже начать пытать совершенно невиновных людей.
Такие цепочки уже действительно возникали внутри прототипа. Это не были заранее подготовленные развилки с несколькими написанными автором исходами. События появлялись из взаимодействия персонажей, навыков, проверок, окружения и игровых правил.
Графики у игры ещё не было, но на основании произошедшего система формировала художественное описание и LOG:
Это примеры одного кадра действия.
"Сергей плотно перехватывает древко тяжёлого оружия обеими руками, упираясь пяткой в землю и собирая в напряжённых мышцах пружинящую силу. Резкий перенос массы тела вперёд мгновенно выравнивает длинное древко в идеальную горизонталь. Стальной наконечник разрезает пространство, набирая сокрушительную скорость в неудержимом движении. Гоблину в основание шеи стремительно входит стальной наконечник, перебивая жизненно важные артерии. Хриплый звук обрывается на полуслове, а погасший взгляд знаменует окончательную гибель врага."
Или
"Тонкая режущая линия воды скользнула вперёд. Раскрытая ладонь мага едва шевельнулась, направляя поток прямо к лицу гуманоида. Вода нашла дыхательные пути мгновенно, хлынула вглубь без остановки. Тело качнулось, рука дёрнулась к горлу и опустилась. Лёгкие были полны прежде, чем колени коснулись земли. Тонкая струя ещё секунду держала форму, потом стекла вниз длинной молчаливой нитью."
За этим текстом находилась точная последовательность игровых событий. Система могла добавить безопасные художественные детали - запах дыма, свист воздуха, брызги воды, но факт произошедшего оставался не изменным.
Ради этого я долго разрабатывал собственный алгоритм, использовал идеи цепей Маркова и, по сути, заново пришёл к системе токенов, из которых можно собирать и рендерить текст.
ИИ при этом не использовался вообще (речь про GPT и остальные, а не игровой ИИ). Это важно уточнить: игровой ИИ выбирал действия персонажей, но художественный текст собирался детерминированной RNG системой, а не языковой моделью.
Почему я решил остановиться
Проект всё больше походил на мечту - и всё меньше на игру, которую один человек способен закончить.
Почти каждый его элемент требовал отдельного исследования. Я просматривал статьи, доклады и чужие проекты, но редко находил готовые решения именно для того сочетания систем, которое пытался построить.
Дополнительно всё усложнялось тем, что поддержку модификаций я закладывал ещё до того, как была закончена сама игра.
Я разрабатывал проект в свободное от основной работы время. Приходил домой примерно в семь вечера и почти каждый день до двух часов ночи писал код, документацию или читал материалы.
В какой-то момент пришлось честно признать:
Эту версию игры я не закончу.
Один только движок приключений превратился в отдельный огромный проект. По моей самой осторожной оценке, мне потребовалось бы ещё от трёх до пяти лет, чтобы доказать его работоспособность хотя бы в черновом виде, а затем ещё примерно год, чтобы довести саму систему до бета, всё ещё почти без полноценного игрового контента.
Я решил остановить проект в его прежнем виде.
Это было тяжёлое решение. Реалистичного способа закончить его я не видел. Можно было продолжать годами работать по ночам и тратить деньги на отдельные элементы графики, но всё это оставалось бы работой без гарантии, что движок приключений удастся довести до конца, а получившаяся игра вообще окажется хорошей.
Такой режим тоже не мог продолжаться вечно.
Что осталось после трёх лет
К моменту остановки проекта у меня накопилось около 150 файлов с технической документацией и проработкой идей - в сумме примерно 200 тысяч строк.
Ради любопытства я даже сравнил это с найденной текстовой версией «Войны и мира»: в ней было около 90 тысяч строк. Сравнение, конечно, совершенно условное.
Выбрасывать результат трёх лет было обидно. Тем более что многие механики и системы действительно работали.
Поэтому я решил не спасать весь огромный проект, а собрать из его частей другую игру - гораздо более компактную и реалистичную.
По сравнению с первоначальной задумкой она совсем небольшая. По текущей оценке, примерно за полгода её можно довести не до финального релиза, но до цельного играбельного билда, по которому уже станет понятно, работает ли основной игровой цикл.
В следующей раз я планирую рассказать уже именно о ней.