Итак, прошло лето, и закрыв примерно сотню тасков на Trello (и открыв еще сотни четыре новых там же), мы медленно, но верно приближаемся к первым тестовым каткам. В качестве хостинга выделенных серверов под игровые сессии выбран Amazon Game Lift - но тут уже надо смотреть, как пойдет тестирование.
За лето было сделано много неинтересных задач типа рефакторинга интерфейсов (классов, а не UI), переписывания баллистики, вычистки проекта, переработки репликации анимации и прочего, что надо было сделать, но при этом в процессе работы прогресса почти не чувствовалось. Это откровенно напрягало, да еще и лето выдалось жарким, но вот сентябрь уронил температуру до +5 и мы внезапно закончили этот блок работ и получили возможность добавлять вдумчивый игровой контент в промышленных количествах.
При этом мы все так же страдаем от отсутствия хорошего, годного пиарщика в нашей команде, и уйдя в разработку как то позабыли постить вообще.
А сегодня я хотел написать про реалистичные механики в играх - на уровне рассуждения и нахождения компромиссов. Еще в начале разработки я заявил, что мы будем стремиться к реализму в нашей игре, чтобы SHTF отличался от этих ваших RUST-ов суровостью механик и правдоподобностью игрового процесса. Но одно дело заявить, а другое - как это все будет выражаться в конкретных геймдизайнерских решениях.
Итак, для примера возьмем автомат, на нем - планка Пикатинни, что наводит игрока на мысль: "Я могу поставить туда оптический прицел или коллиматор".
Но не тут-то было. Кто устанавливал оптику хотя бы на страйкбольное оружие - тот знает, что прикрутив прицел к планке сразу пользовать оружие смысла нет - надо сначала сделать пристрелку. В игре можно было сделать нечто подобное - нацепи прицел, но пули будут лететь не туда, куда ты целишься. Вот только игрока это скорее всего разозлит и погружению в игровой процесс не поспособствует. Геймплейным решением может стать создание, например, приобритаемого навыка "Пристрелка", обладая которым игрок получает возможность устанавливать/заменять оружейную оптику, а всем остальным игрокам остается довольствоваться уже предустановленными аксессуарами.
Далее игрок начинает целиться, и через оптический прицел видит мишень в 400 метрах от себя. Выстрелив мишени в голову, игрок хорошо если попадет по ногам - пуля 7,62х39 через 400 метров ляжет метра на полтора ниже цели. Гравитация - она та еще сука.
Чтобы попасть в мишень, игры (к примеру PUBG) практикуют выставление "нуля" прицела на разные дистанции, например на 100-200-300-400-500 метров, но это тоже не совсем честно, потому что падение пули с расстоянием зависит не от прицела, а от патрона и длины ствола. Прокликивание прицельного устройства повышает прицельную метку на 2,5 см для мишени на расстоянии 100 м от стрелка, и стреляя на 400м для разных патронов прицел придется прокрутить на 8 кликов для патрона 5.56 NATO или на 15 кликов для 7,62х39. Причем чтобы знать это - игроку надо знать баллистические таблицы этих пуль.
Само собой я не настолько сволочной, чтобы заствлять игрока учить эти таблицы, но я ведь обещаю реализм. Давать честный оптический прицел и хай сами разбираются? Делать "умный" прицел, который будет подстраиваться под винтовку и переводить измерения в метры?
Сама по себе баллистика как механика не сложна для реализации. Главное убедиться, что твой снаряд не пролетит сквозь мишень (все физические расчеты проводятся раз 10 в секунду, и пуля за это время пройдет до 80 метров), не сожрет много вычислительного времени, и что на всех клиентах игры все пули летят одинаково с точностью до сантиметров. Дальше уже можно добавлять "по вкусу". Например, чтобы пуля летела в соответствии с баллистическими таблицами, надо учесть сопротивление воздуха, и понижать скорость пули каждый тик, а также учесть аэродинамическую устойчивость той или иной пули - по сути снижая ускорение свободного падения на некоторый коэффициент для разных пуль.
Но есть же еще и боковой ветер. На дистанциях до 100 метров он не важен, а вот при снайперской стрельбе может изрядно огорчить. Игра SCUM к примеру предлагает оценивать скорость ветра по колыханию деревьев или углу падения дождевых капель (я серьезно - https://youtu.be/VeCXV2Klt1g?t=503 ), и это похоже на издевательство над игроком, но в то же время и круто. И тут разработчик должен задать себе вопрос - хочу ли я чтобы игроки страдали, и если хочу - то насколько. В конце концов игры, которые дарят игроку хорошие, качественные и дозированные страдания - порой достаточно востребованы.
Далее звук. Точнее три звука. Один от выстрела, второй от пролета пули мимо наблюдателя, третий от попадания. На наш взгляд звуки очень важны, и на них ни в коем случае нельзя забивать. Озвучка хороша, если никто из игроков не обратит на нее внимания и все воспримут как нечто естественное. А значит мало просто проигрывать звук. Во-первых надо учесть скорость распространения звука. Во-вторых падение громкости с растоянием - оно нелинейное. В третьих - искажение звука с расстоянием - высокие частоты искажаются больше, чем низкие, и звук с растоянием меняет тембр. Звонкий выстрел "хыдыщь" с расстоянием превратится в гулкое "птух". В четвертых искажение звука акустикой окружения. В помещении все звучит иначе. В пятых наличие преград между источником звука и слушателем рассеивает источник. И само собой звучание должно быть бинауральным, чтобы сходу определить, откуда был звук.
К счастью Unreal Engine позволяет это сделать достаточно удобными инструментами, но и тут придется искать компромисс, если вы конечно не разрабатываете Hellblade и не пытаетесь выжать звук на максимум возможностей.
Короче говоря, постоянно приходится искать компромисс между тем что хочешь (и обещался) сделать, что можешь, и что надо. Заранее предвкушаю, что в любом случае найдется кто-то, кто будет предъявлять по итогу - то сделал не так, это не реалистично, вот так вот в жизни не бывает и тп. А я что? Я хочу сделать реально, но на практике это немного нереально...