Драмы, с которыми я столкнулся за год соло-разработки, чтобы довести игру до релиза

Бодания с Valve, страдания на ровном месте, непредвиденные переделывания, дурной воркэраунд и лучшие анекдоты в мире..

Приветствую снова, путник! Надеюсь, ты соскучился по моим историям после того раза..

Что? Ты ничего о том разе не знаешь или не помнишь? Не беда. Я кратко всё разъясню: за год разработки этой видеоигры, которую я сам сделал и недавно выпустил, случилось столько небольших, но занятных историй, которыми я захотел с тобой поделиться. И их оказалось так много, что сборник пришлось разбить аж на две статьи! По ссылке выше первая половина. Тут вторая. Все истории друг с другом слабосвязаны, так что содержание той половины знать необязательно. Как собственно и быть знакомым с самой игрой – весь нужный контекст я предоставлю.

Приятного времяпрепровождения, путник. Поехали!

У геймпадов есть геймпадопреимущества

Потому что игра затачивалась под клавомышь. Нужен был баланс.

Двигаться плавно всегда приятно.

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

Управлять гироскопом, кстати, очень удобно. Местами удобнее, чем мышью.

Если играть с геймпадом – зона захвата монитора будет больше. Порой вплоть до того, что даже поворачиваться и целиться не приходится. Так и проще попасть, и чаще за дорогой следишь. Удобно, когда надо много поворачиваться.

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

Туда-сюда.

Чтобы на геймпаде механика не стала неприменимой, я дал ему возможность выбрать любое направление стиком, куда бы взгляд ни был направлен (но он также учитывается). Это привело к новой проблеме.

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

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

Однако это не помешало немного поиграться с уникальными фичами геймпадов.

Например, в контроллере Xbox One помимо основных вибромоторов, есть ещё дополнительные моторчики в триггерах. Попробовал их задействовать. Если в настройках управление мониторами назначено на триггеры (по умолчанию) – они начинают вибрировать всегда, когда какой-то монитор под прицелом. Мне лично было неудобно, но дал попробовать некоторым людям – им вроде понравилось, то я и оставил. Правда отключить это нельзя, но вроде пока ещё никто не пожаловался.

А световая панель контроллера PS4 может гореть любым цветом. Я её настроил так, чтобы она HP показывала.

Я был удивлён, что нашёлся человек, который мне написал, что заметил и оценил это.

Рельсы рельсы

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

Пример начала. Чтоб не расслаблялись.

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

С тех пор как был готов первый вариант рельс, упрощения проходили постоянно вплоть до самого релиза. Люди, которым я давал поиграть, постоянно рассказывали о том, что им не нравится. То неудобно, это неприятно. Обнаружил одну переусложнённую точку – подкорректировал. Через месяц узнал о другой. Ещё через месяц новые разбирательства. Вот тебе уже кажется, что всё – этап шикарен, больше ничего править не придётся. Так потом снова что-то да пойдёт не так. И так было раз за разом, пока игра не вышла. Даже за неделю до релиза были мелкие правки.

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

Хоть я и легко проходил этот участок – многие его презирали и считали нечестным. Позднее я решил убрать половину препятствий.

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

Этап не получился таким, чтобы он полюбился всем. Но за долгое время тестов он стал куда более дружелюбным.

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

Сцены в офисах были добавлены в игру ради анекдотов

Ладно, это неправда. Но изначально подразумевалось, что игра будет состоять только из основного геймплея – трассы. Поехал – помер – поехал – помер, повторить сто раз.

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

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

Зная то, как работает местная система сохранений HP, преодоление очередного этапа может и вовсе не оказаться праздником.

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

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

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

Решение как будто нейросеть придумала. Глупо. Но ТЗ же выполнено.
Решение как будто нейросеть придумала. Глупо. Но ТЗ же выполнено.

Разумеется, это не было серьёзной идеей. Это была мысль «Нуу… чисто технически задача будет решена. Это неожиданно. Ты не знаешь, что будет дальше. Быть может заставит играть ещё. И это вполне может поднять настроение».

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

Впрочем, в ближайшее время после этих слов ко мне начали понемногу приходить уже осмысленные идеи. Первые пару дней я не думал реально вводить в игру «хаб», потому что это весьма и весьма объёмный пласт работы. Но чем дольше я прорабатывал этот концепт, и чем больше идей мне приходило – тем сильнее мне это нравилось.

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

Мне не нужен был хаб ради хаба. Он должен был быть интегрирован в уже существующий лор, дополнять игру, а не быть довеском. Его существование должно было быть оправдано. Потому я потратил ещё приличный объём времени, чтобы его идейно проработать. И ещё больший кусок времени, чтобы сделать. Код, текстуры, модели, диалоги, эмбиент – всё сам. Релиз, соответственно, сдвинулся на пару месяцев. Но это того стоило.

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

Но самое главное в этой истории то, что моя идея с анекдотами не пропала зря!

Теперь они отображаются в углу одного из офисных мониторов. И они действительно подбираются случайным образом у каждого игрока. Хэппи енд!

Всего 20 возможных вариантов. Чтобы их отобрать, пришлось изучить 10+ часов прожарок, трешовых скетчей и прочего спецконтента, и пропустить через себя 1000+ вариантов, отсеяв массы откровенного мусора. (но оставив неоткровенный)

Пояснение, что лиц. соглашение – просто шутка

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

Дело в том, что игра начинается со следующего кадра:

Для абсолютно точного отсутствия недопонимания: это шутка.
Для абсолютно точного отсутствия недопонимания: это шутка.

В Valve посчитали, что это настоящее серьёзное соглашение с конечным пользователем, подкреплённое юридической силой. Они ответили, что игра пройдёт модерацию только если я размещу на странице Steam информацию о наличии EULA вместе с копией текста. Того самого текста про «я не буду проклинать разработчика».

Такого поворота я не ждал. Чтобы разъяснить ситуацию, я написал им весьма большое сообщение, где описал, что имелось в виду в игре. Возможно, немного переборщил с разъяснениями вроде «так как в реальном мире у людей нет возможности накладывать на других людей проклятие в виду отсутствия в реальном мире магии – подобное соглашение не накладывает ограничений на конечного пользователя».

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

У меня нет материалов для этого блока. Вот вам котяра.

Они быстро вышли на контакт, и вскоре стало понятно, из-за чего весь сыр бор-то.

Я не знал, что английское «I will not curse the developer» воспринимается как «я не буду критиковать разработчика». И в этом контексте текст действительно звучит неоднозначно. На столько неоднозначно, что мне даже стало неловко.

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

В итоге меня попросили изменить текст на более однозначный. Я поменял фразу на «I will not cast curse or incantation the developer» и игра прошла модерацию.

Увеличение FOV привело к перестройке

В моих играх довольно долго не было настройки FOV, на что люди не раз жаловались. За время разработки я таки это сделал, внедрил и в прошлые игры тоже. Но вместе с увеличением угла обзора пришлось заняться корректировкой порогов, когда объекты исчезают из игрового мира, а также дополнить некоторые модели новыми треугольниками (и в старых играх тоже..). Всё потому, что из-за более широкого обзора игрок теперь мог увидеть косяки, что скрывались за кадром.

Для тех, кому понадобиться уточнить, что такое «угол обзора». Проще сравнивать, если видео ставить на паузу.

А вот и пример объекта, который пришлось дорисовывать после того, как зрительные возможности были расширенны.

Аэроцикл – до и после.
Аэроцикл – до и после.

Из-за особенностей движка соотношение сторон также оказывает влияние на угол обзора. Чем соотношение больше, тем больше видно пространства вокруг.

Решил, что раз уж я занимаюсь всем этим делом – буду брать по максимуму.

Но что есть максимум? Я могу искусственно открыть окно в разрешении 2000x10, соотношение будет 200:1. Угол обзора будет чрезвычайно широким. Стоит ли под него игру подстраивать?

С одной стороны всё хорошо. Но если далеко отъехать, видно, как земля пропадает почти из-под ног.

Я не имею полного представления о разнообразии мониторов в контексте соотношения сторон, но максимум, о котором я узнал, был 32:9. В итоге настроил пороги и достроил модели, чтобы при таком формате косяков не возникало. Возможность подключения нескольких мониторов в расчёт не брал.

Шрифты. Адекватные люди не издеваются над ними как я

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

Простыми словами: доступ к шрифтам возможен с сильными ограничениями.

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

Мне в качестве хоть какого-то работоспособного компромисса пришлось к чёрту поломать всю шрифтовую логику, которую умные люди прорабатывали десятилетиями.

Это реальное содержимое одного из шрифтовых файлов, который игра использует.
Это реальное содержимое одного из шрифтовых файлов, который игра использует.

Основные символы на месте – кириллица, латиница, цифры, некоторые знаки.

Но часть символов стоят на чужих позициях. «Ñ» вместо «£». «Ü» вместо «¡». «є» вместо «°». И так далее..

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

Чтение файла обычным блокнотом выдаёт системозябрю в точечных местах. А в игре нормальный текст.
Чтение файла обычным блокнотом выдаёт системозябрю в точечных местах. А в игре нормальный текст.

С одной стороны проблема решена. Но с другой.. стоит попытаться добавить в игру новый язык – так там обязательно найдётся несколько символов, которых нет нигде и которые придётся где-то в шрифте разместить. А свободного места там почти нет. Пустые поля – это системный резерв, и для новой буквы придётся вырезать какой-нибудь «±», зарекшись его когда-либо использовать.

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

Пол – это ад (а в аду есть лава?)

Речь про рендеринг стеклянного пола. Процесс как таковой проблемным не является. Но порой могут возникнуть сложности, когда из-за (опять!) особенностей движка 3D-объекты не поддаются корректной сортировке в стеке во время рендеринга.

Вот смотришь.. Разве могут быть какие-то проблемы?

Часть объектов под полом не отрисовывалась из-за неправильно отсортированных моделей. После шейдерных корректировок часть отрисовывалась правильно, а часть поверх пола. После манипуляций над порядком создания моделей – под одним углом камеры всё хорошо, под другим углом камеры нет. После настроек игровой камеры всё начало отрисовываться правильно.. Но спустя месяц запускаешь игру на другом компьютере, и оказывается, что там опять всякие артефакты. И всё по новой.

Классно, когда внизу есть монитор, а ты его не видишь.

В итоге, чтобы всё работало однозначно корректно – пожертвовал оптимизацией.

Пока в поле зрения игрока есть стеклянный пол – сперва рендерятся только объекты под полом. Затем сам пол. А потом всё остальное.

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

Хотелось больше разнообразия в окружении

В идеале я планировал, чтобы на протяжении всей 50-минутной трассы частенько вокруг мелькало что-то индивидуальное. И для разнообразия, и для дополнительной идентификации сегмента трассы.

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

Но со временем я начал уставать от клепания моделек, хоть они и не шибко времязатратные.

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

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

Вот эти серые плоскости я добавил от балды. Мне они до сих пор не нравится, но решил, это может быть лучше, чем одна постоянная чернота.

С другой стороны, когда в кадре нет лишнего мусора – игроку проще сконцентрировать внимание на важном. Успокаиваю себя этим.

Реюз. Но отмасштабированный в 5 раз (хотя смотря по какой оси).

Steam Input – чудо

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

Благо к релизу игры все проблемы с контроллерами были решены, так как мне удалось подружить движок со Steam Input. Там сформирована чуть ли ни целая экосистема, которая помогает разработчикам удобно взаимодействовать с геймпадами.

Чтобы в движке всё окончательно заработало, понадобилось около 3 недель плотных экспериментов. Даже написал отдельную библиотеку, что связывает между собой движок и Steam API, позволяя адекватно и удобно им пользоваться.

Вон она, красавица.
Вон она, красавица.

Однажды нашёл баг в одной из функций Steam Input. Выглядит как баг. Ведёт себя как баг. Написал о нём в техподдержку, спросил баг ли это. Там подтвердили, что поведение функции действительно должно быть другим. Сидел и радовался, вот я какой молодец, помогаю Габену функционал дорабатывать.. А потом через 3 месяца (уже после релиза) мне написали снова и сообщили, что поведение на самом деле было корректно. Просто технические особенности системы накладывают ограничения на использование этой функции, потому ей придётся пользоваться только в отдельных условиях. ..Ну и ладно.

Корректировка рандома

Бесчестный рандом – то, что не любит никто. Я не хочу, чтобы игра рандомилась так, чтобы возникали непреодолимые или нечестные ситуации.

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

Даже на этой чёртовой трубе. Там по рисунку на «спине» препятствия можно увидеть, куда надо поворачивать.
Даже на этой чёртовой трубе. Там по рисунку на «спине» препятствия можно увидеть, куда надо поворачивать.

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

Ещё пример: алгоритм размещает эти штуки случайным образом, затем рассчитывает максимально возможное свободное пространство между ними и, если его недостаточно, дополнительно раздвигает в стороны.

Есть ещё сегмент трассы, где я вмешался в рандом. Можете его увидеть на видео ниже. Хоть препятствия там и расставляются абсолютно случайным образом – там никогда не будет расстановки, где все препятствия будут соседями друг другу (квадратиком не выстроятся). Это дополнительная алгоритмическая надстройка над рандомом была введена, потому что 4 препятствия-соседа могут создать ситуацию, когда для избегания столкновения реагировать надо моментально.

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

На трассе есть такое место, где я планировал расставлять предметы случайным образом. Но в 90% случаев расстановка была неинтуитивной и проехать без повреждений было трудно.

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

Речь шла про расстановку вот этих платформ. Тут нет рандома.

А на бумаге хорошо смотрелось

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

Сильно что-то вырезать из игры не пришлось, но многие элементы потребовали правок после того, как попробовал их добавить.

«Сильно что-то вырезать не пришлось» – всего-то двигающиеся препятствия, по поведению которых надо заранее рассчитывать, куда следует попасть.

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

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

Трасса в офисе – отдельная копия

В игре есть вполне конкретный алгоритм, отвечающий за сценарий игровой трассы. Он оперативно генерирует «правильные» предметы и запускает нужные события, в зависимости от того, где персонаж находится. Код алгоритма состоит из 97 тысяч символов. Трасса немаленькая.

А ещё в игре есть офисы, где на одном из мониторов можно просмотреть эту трассу.

Доступны лишь те части, до которых игрок добрался + 0.75%.

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

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

А если впоследствии в оригинале возникали изменения – приходилось и офисную трассу корректировать (хотя на часть изменений я забил, всё равно никто всматриваться не будет).

Написание алгоритма заняло ~10 дней без выходных. Итог содержит 68 тысяч символов. Но зато в нём есть практически всё, что в оригинале: трасса, препятствия, мониторы всех типов, декоративное окружение.

Даже простенький визор сделал, чтобы всё это чудо можно было отличить друг от друга.

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

Например, наличие в игре тренировки предполагалось изначально –> генерация трассы сразу делалась с расчётом на будущее существование тренировки –> реализация тренировки прошла проще, чем могла бы.

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

Однако у такого подхода оказались и плюсы. Алгоритмическая независимость позволила как угодно адаптировать сцену. Как следствие тебя меньше сковывают при попытке всё это действо организовать и визуализировать.

А ещё сюда можно напихать всего чего и как захочешь. А ещё все потенциальные баги на оригинал не повлияют.

У каждой точки своя высота.

Благодаря этому прокрутку удалось оптимизировать ну просто шикарно! Игра почти не обращается к HDD/SSD, а алгоритм практически моментально определяет, какое должно быть содержимое на экране, независимо от выбранной области.

При этом в памяти хранится лишь видимая часть трассы. Во время прокрутки новые сегменты генерируются на ходу, а старые удаляются.

И всё работает без провисаний, хоть постоянно туда-сюда крути. Вся трасса на ладони.

Блиц! такие же истории, но одним абзацем

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

75% объёма сборки - аудио. Сборка с игрой весит 247 Мб. Если бы в игре не было никаких звуков и музыки – она весила бы всего 57 Мб, вот на столько аудио там не сжато, а весь остальной контент компактен.

Хотел уложиться в полчаса на всю трассу. Не вышло. Трасса от начала до конца проезжается за 50 минут. Этапы разрабатывались последовательно, и я старался делать их покороче, чтобы сумма не выходила за пределы 30 минут. Но хоть я и делал упор на разнообразие и большинство игровых ситуаций возникали лишь раз за игру – буквально на каждом этапе было много всего, что хотелось добавить. В последствии я сдался, и времени, необходимого для прохождения, стало больше.

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

Истинная концовка была моим ориентиром. Массовому игроку достаточно достигнуть обычной концовки, чтобы игра для него считалась поверженной. И хоть истинную выбить куда сложнее – игра выстраивалась под неё, в то время как обычная должна была стать доступной тренировкой. К тому же только так можно ощутить тот опыт, что переживает персонаж на трассе. Отсюда и постоянная смена условий во время игры, и возможность принять много ударов, и мало ваншотящих точек, и малая длительность трассы, и размеренная, а не постоянно растущая сложность, и сложная середина вместо конца, и система чекпоинтов в том виде, в каком она есть. Даже финишную черту нельзя пересечь на обычной концовке, что в теории должно намекать на акценты.

Геноцид. Разные попытки пройти игру = разные персонажи. Сколько раз вы проиграли – столько внутриигровых персонажей покалечили. В игре на это есть намёки, но не проговаривается напрямую.

Мысль, побудившая сделать игру – механика, где игрок управляет строением трассы. Не только своим транспортным средством, но и самостоятельно двигает, вращает, раскручивает всякие огромные предметы, что находятся вокруг и впереди него для того, чтобы выстраивать и корректировать себе дорогу. Эта и другие идеи, визуальные образы мне начали приходить задолго до начала разработки. Итог не ориентируется на эту механику, но в некоторой, хоть и небольшой, степени она была реализована.

Планировал пройти проверку на Steam Deck. Чтобы получить зелёную галочку. Если верить документации Valve, проверка может занять около 2 недель. Прежде, чем отправлять им игру, решил, что было бы неплохо, собственно, самому проверить. А для этого устройство сперва купить нужно. Всерьёз рассматривал вариант успеть всё это сделать до релиза, но возможности не безграничны. И, хоть некоторые игроки сказали, что играется хорошо, позже постараюсь найти доступные для покупки варианты и разобраться. Если кто знает, где в РБ можно удобно приобрести – дайте знать.

Часть мониторов появляются из пустоты. Вот их не было – бац, и вот они появились. В некоторые случаи приложил усилия и сделал так, чтобы мониторы плавно появлялись из некоего пространства. А на остальные забил, в надежде, что никто не заметит.

В финале нельзя проиграть. Почти. Финальная часть трассы проходит в помещении, где всё говорит о том, что игроку надо торопиться: разобраться, что происходит вокруг в неизвестной для него обстановке, и выполнить некоторую последовательность действий. Если не успеет – все его старания за последний час окажутся напрасны. .. На самом деле это было добавлено в игру ради ощущения напряжения, а не ради челленджа. Проиграть там можно только если очень-очень долго ждать. Даже если игрок будет какое-то время тупить – у него должно быть достаточно времени, чтобы во всём разобраться и успеть.

Медиафайлы не зашифрованы. Изображения, звуки, шрифты, шейдеры и текст. На данный момент любой может покопаться в сборке игры и спокойно открыть файлы удобным ему редактором и даже изменить, посмотреть, что из этого выйдет. Вот сейвы зашифрованы – тут уже ничего не поделаешь. Планирую и остальное зашифровать позже, но пока это не в приоритете. К тому же.. надо ли вообще. Вдруг кто-то минимоды захочет сделать. Вообще как вам практика доступности файлов для пользователей?

Не все истории попали в статьи. Некоторые предполагают более глубоких знаний об игре. Некоторые могут быть недостаточно интересными. Некоторые просто стыдно показывать.

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

Вот и закончилась вторая половина моих баек. Надеюсь, путник, ты не сильно заскучал.

Много всего за год случилось. Старался подбирать то, что тебе могло прийтись по душе, но если вдруг я с чем-то прогадал – не серчай уж. Просто напиши, что понравилось, что не понравилось, я это обязательно почитаю, может даже откликнусь, а там и разойдёмся навстречу новым приключениям.

Аэроцикл уезжает навсегда. Отныне его миссия завершена, а я могу двигаться дальше. Успей с ним попрощаться.

Успехов тебе, путник! Не позволяй злым троллям бить тебя дубиной по голове, а сварливым гиенам загонять в угол. Кто знает, быть может ещё свидимся однажды и мне вновь будет что ещё тебе поведать. Быть может даже о нечто новом, чего на данный момент ещё не существует. А может и о том, что уже давно ждёт часа вырваться наружу. Но это пока не определено.

246246
45 комментариев

А вы знали, что некоторые видео со звуком?

9

Ага. Даже те, которые без звука :)
Я такие помечаю 🎵 или 🎶, чтобы читатель знал, что тут звуки или музыка 🙂

4

Не играл, но возникла пара мыслей.
Можно было добавить в игру участок с "кладбищем", через который ты проезжаешь и видишь надгробия или капсулы в количестве разбившихся пилотов, которых ты не довел до финиша. Либо реализовать это визуально на стартовом или финальном экране.
После неудачной попытки показывать карточку пилота - на ней показывать его лицо или просто пилота в шлеме, возраст, и какую-нибудь подробность о нем, типа "любил окрошку на квасе" или мотивацию, почему он участвовал в заезде. Например, проспорил друзьям, или он заключенный и этот заезд способ избежать заключения. Это бы придавало большего сожаления при потере пилота и добавляло в них души.

3

Сколько нюансов, особенностей, проблем и их решений в, казалось бы, с виду простенькой игре!
Спасибо за второй подобный и подробный лонг)Очень занятное и интересное чтиво о внутренней кухне разработки.

8

И тебе спасибо за приятные слова. =)

3

Было бы очень интересно почитать статью про оптимизацию игр.
Поясню.
Для меня, как для человека который в игры только играет, а не разрабатывает, очень странно встречать в статье про игру которая визуально выглядит довольно просто, хоть какое-то упоминание оптимизации, и что самое главное необходимости в оптимизации т.к. есть просадки.
В голове не укладывается, как могут в одном мире существовать современные AAA игры которые выглядят лучше чем жизнь и проблемы просадки фпс в играх как в статье.
Хотелось бы почитать, откуда берутся проблемы и больше конкретики по железу, т.к. если просадки появляются на железе уровня калькулятора то как бы и ладно, а если нет - см. прошлый абзац)

6

Мысль понятна.
Вряд ли буду писать отдельную статью об этом, но пару моментов в общих чертах тут отмечу.
- Да, я действительно ориентировался на более слабые машины, чем обычно ориентируются трипл-А. И если бы я многие оптимизационные действа не делал - комп, что стабильно тянет трипл-А - мою бы игру точно потянул бы. Но мне желательно, чтобы на простеньких конфигурациях тоже игралось комфортно, ради чего оптимизации и есть.
- "игра выглядит просто, но проблемы просадки как в ААА". Скажем, по хорошему, практически любая маломальская игра независимо от графония и кол. процессов в миллисекунду требует определённые решения, чтобы она работала более оптимизированно. Чисто в силу её уникальных особенностей надо подбирать алгоритмы подходящим образом, чтобы конкретно твоя игра выполняла задачу наиболее быстрым способом. Другое дело, что часть разработчиков могут себе позволить не заниматься некоторыми такими штуками, если посчитают, что потенциально затраченные ресурсы будут выше требуемого результата. Например, пусть такой-то алгоритм работает медленнее, чем мог бы, но зато сэкономим месяц работы, всё равно современные машины и так справляются. Я мог бы поступить также и просто чутка поднять системные требования. Решил делать иначе.
- Конкретно у меня ещё актуальна проблема с тем, что игра может подхватить встроенную видеокарту вместо дискретной. Это весьма серьезная проблема, которую у меня не выходит решить. Потому я дополнительно замотивирован стараться как можно сильнее оптимизировать игру для той части игроков, у кого игра подцепит встроенную, чтобы уменьшить вероятность риска просадок.
...
Всё это в целом.

5