Сделал ХОРРОР за 3 дня

Сделал ХОРРОР за 3 дня

Ссылка на скачивание игры.
В перерывах между рассказом о моем основном проекте D. F.D почему бы не рассказать о уже завершенных проектах. Я регулярно участвую в геймджемах, ведь на них можно быстро испытать свои теории, отточить игровые механики, не боятся сделать что-то банальное. В этой статье я расскажу о моем участии в одном из геймджемов КОД20, где я создал небольшую хоррор-игру за 3 дня и занял первое место. Поделюсь своим опытом, расскажу о сложностях, даже покажу неудачные дубли озвучки. Однако для получения полного игрового опыта и чтобы не заспойлерить себе ничего рекомендую сперва поиграть, а потом вернуться к прочтению. Благо игра короткая.

Начало

Я давно уже хотел сделать микрохоррор. Еще до оглашения темы конкурса у меня было несколько идей, но так как тему я еще не знал, остановиться на чем-то одном было сложно. Я думал в основном об очень камерных хоррорах, по типу Sentient или той же P. T., где у игрока в распоряжении ограниченное пространство в диапазоне от телефонной будки до микро однушки-студии.

Однако тема была довольно неожиданной и сломала все мои планы о «неспешных" и "камерных" ужастиках, потому что темой конкурса оказалась фраза: »Движение — Жизнь!".

Сперва хотел сделать что-то типа фрагмента из начала The Evil Within, когда ты хромаешь по длинному коридору пытаясь не накрутится на догоняющие циркулярные пилы. По сути игра представляла бы собой такой «калечный раннер», где ошибки бы карались увечьями и уменьшением скорости протагониста. Эту идею быстро отбросил, потому что не хотел делать игру от третьего лица, а от первого такое бы не очень работало, к тому же генерируя идеи на основе темы в ChatGPT, ИИ выдал мне это:

«Название: «Темные Пульсации» (Dark Pulsations) Описание: Главный герой очнулся в заброшенном мрачном особняке, полном тайн и темных сил. Он обнаруживает, что его сердце связано с загадочным механизмом, который реагирует на его пульсацию. Чем выше скорость пульса героя, тем больше света и безопасности он видит вокруг себя, но с каждой пульсацией растет угроза со стороны зловещих сущностей. Геймплей: Игроку предстоит исследовать особняк, раскрывая его тайны и пытаясь выжить. Поддерживая высокую скорость пульса героя, игрок сможет видеть скрытые пути, подсказки и предупреждения о приближающейся опасности. Однако, высокая пульсация также привлекает внимание монстров, увеличивая риск быть обнаруженным."

Мой взгляд зацепился за фразу «Чем выше скорость пульса героя, тем больше света», БИНГО! Остальное можно было уже не читать, так как воображение завелось и в миг нарисовало мне концепт игры.

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

  • Погрузиться полностью в опасную тьму и не иметь возможностей к навигации, либо вырабатывать свет для фонарика с помощью движений и тем самым шуметь навлекая на себя опасность в виде «друга».
  • В то же время если медленно ходить (например практически не шумя на карачках) либо вовсе стоять, то активируется ошейник со взрывчаткой, который через некоторое время превратит голову протагониста в фаршик. Это правило вытекало из темы конкурса: «Движение — жизнь».

Разработка

Времени на расписывание ГДД не было (и благо я работал один, а проект не настолько большой, чтобы терять в голове нюансы) , поэтому я сразу сел за производство.

За некоторое время ДО, у меня была идея хоррора с вайбом нашумевшей Unrecord,

Даже собирал вот такую демку. Sound on!

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

Та самая крипта
Та самая крипта

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

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

Сделал ХОРРОР за 3 дня

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

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

Сделал ХОРРОР за 3 дня

Но вернемся немного назад по таймлайну. После первой версии First Person контроллера я накидал быстренько еще пару скриптов по типу сбора ключей, открывания финальных дверей (изначально открывались не таймлайном, а через код) . Можно сказать, что игра стала проходимой, и тут я понял, что без генерации как-то скучно. Поняв где что лежит у игрока будет еще меньше напряжения от встречи с «другом», он просто пробежит но запомненным координатам, и пройдет легко игру через 1−2 попытки. Мне этого не хотелось, к тому же мне как разрабу самому тоже хочется играть в свою игру, а для этого нужно, чтобы я сам не знал, как однозначно ее проходить. Сперва придумал какую-то сложную идею, где абстрактный невидимый NavMesh agent со скоростью флеша носится по рандомным точкам уровня и дропает ключи и «издающие звук объекты», но потом решил, что это и звучит бредово, да и слишком много хаоса, может оно вообще перед выходом из начальной комнаты все «засрет» объектами и «что тогда?». Плюс я хотел генерировать стены, чтобы менять геометрию самого уровня, поэтому мне потребовался более универсальный и контролируемый подход. В итоге у меня есть ряд объектов на уровне, которые я выставляю заранее, то есть пул, и есть пул точек, куда объекты из пула объектов будут расставляться.

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

Сделал ХОРРОР за 3 дня
Оригинальный концепт от Xenna Demonorph
Оригинальный концепт от Xenna Demonorph

Закончив более менее рабочую версию «друга» стоило определиться как он будет выглядеть. Сперва я хотел уже садиться за его моделинг, но поняв, что мне еще локацию с нуля делать, я решил, что точно не вывезу, тогда я вспомнил, что у меня есть в запасах модели монстров. За два года до Time To Play мы с друзьями делали «Метаинститут" на геймджем "Гаминатор 21», я какое-то время еще хотел допиливать этот проект, но там все заглохло, тем не менее остались концепт-арты от одной клевой художницы, по одному из которых я уже сделал модель. Эта модель в целом и определила графический стиль, и полную необходимость в отказе от фотоскана крипты, который я использовал в данный момент. Так же эта модель определила нужду в специальных анимациях, потому что у монстра нетипичная анатомия и много дополнительных костей, а собранный аниматор работал с humanoid анимациями. Еще интересный момент, это извивающиеся тентакли, референсом к которым стало аниме «паразит» и RE4. Но вот не задача, я откровенно не знаю как их анимировать вручную. Поэтому я решил поступить проще и написать специальный скрипт, который анимирует эти штуки процедурно. Эффект не идеальный, но вроде все равно сносный и добавляет мерзости антагонисту. Если есть идеи как сделать лучше, напишите мне, пожалуйста).

В воскресенье я был готов трайхардить до 3 ночи (по моему местному времени) , чтобы все успеть в том или ином виде, но благо двухдневный конкурс продлили на день, поэтому я закончил «демку», собрал недо-меню и спокойно пошел отдыхать.

Понедельник выдался тяжелым. Я просидел за игрой с 8 утра, до часу ночи с перерывами на покушать, погулять собаку. Для создания окружения я решил использовать пайплайн на тримшитах, который хорошо зарекомендовал себя ранее в других проектах, но тут я делал текстуры не с нуля, а набрал готовых на ambientcg.com.

Сделал ХОРРОР за 3 дня

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

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

Сделал ХОРРОР за 3 дня

Благодаря этому пайплайну и малому количеству динамического освещения мне даже не пришлось запариваться над оптимизацией, и даже на ноуте друга с встроенной видеокартой проект игрался нормально без сильных просадок FPS. Хотя я использовал HD render pipeline, потому что нуждался в качественном освещении и тенях.

Дополнительные ассеты я сделал по методике Ian Hubbert’а, накачал на халявные 15 баллов на textures.com фоточек индустриальных объектов, собрал из них атлас, пожал, и с помощью инструментов knife и extrude наделал кучу клёвых ассетов. В итоге они и выглядят классно, и потратил я на них от силы час времени.

Сделал ХОРРОР за 3 дня
Сделал ХОРРОР за 3 дня

Теперь нужно было проанимировать монстра. Делать это нужно было очень быстро, не особо качественно и максимально халявно, сперва начал с Idle анимации, поставил его в позу, накрутил на торс модификатор noise, чтобы он рандомно дергался и настройками сделал так, чтобы анимация циклилась. После нужно было проанимировать руки и куски головы, тут я использовал экспериментальную технику: я просто в режиме auto key запустил timeline и в режиме реального времени вращал/двигал ту или иную кость. Кайф!

Теперь нужно было проверить все ли ок, я вывел эту анимацию, засунул в движок и все сломалось. Почему? Потому что у монстра нет левой руки, и костей тоже нет. Тогда я переделал скелет так, чтобы геометрии руки не было, но кости было. Однако Unity в таком варианте у меня тупит и отказывается выставлять T-pose персонажу. Пришлось добавить вытянутый кубик, привязать его к этим костям, а внутри Unity куб отключать. Теперь все работает как нужно! Важно так же в каждой анимации указывать все доп. кости, которые задействованы в анимации и не используются Humanoid в Unity. После я проанимировал еще ряд анимаций: walk, run, grab, kill, hearsomething. Последняя к слову в игру так и не попала, даже в версии 1.1. Анимации конечно получились откровенно хреновыми, но за столь малый срок сделать лучше было почти нереально.

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

Итог

Конечно, успел далеко не все, на следующий день после сдачи проекта пришлось садится и выкатывать постконкурсную пропатченную версию (где все улучшил и починил), но в целом проектом доволен. Доволен реакцией игроков и стриммеров. За что я люблю хорроры, так это наблюдать потом за тем как в него играют, когда игрок пугается или начинает паниковать, я злобно смеюсь, потираю ручки и шепчу «шалость удалась». Ну и разумеется доволен победой по очкам на КОД20, хотя удалось вырваться вперед не во всех номинациях. После конкурса в голову пришла уйма идей как этот проект можно доделать, и в отличии от D. F.D даже не придется переписывать с нуля. Возможно займусь этим после релиза моего основного проекта.

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

Сделал ХОРРОР за 3 дня
1919
11 комментариев

Как вычислить фаната Куплинова по лого игры

Ответить

Не правильно вычисляешь)

2
Ответить

Чоппер из darkwood? Это мы одобряем

Ответить

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

Ответить

Почему не на итче выложил?

Ответить

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

Ответить

Как же DTF неистово ждем картинки, пока их не прокликаешь, что весь ретро эффект на скриншотах с пиксельными текстурами теряется :C

Ответить