Модель повреждений
Содержание
Вооружение
Мы очень любим разнообразную военную технику различных стран мира и всегда стараемся настроить ее поведение в игре максимально близко к реальному. Поэтому не можем обойти вниманием и настройки вооружения — ведь только так возможно показать и выделить все разнообразие военных машин, а также раскрыть их огневую мощь. Каждое орудие по своему уникально, и для реализации этой уникальности мы изучаем множество документации и скрупулезно настраиваем не только орудия, но и отдельные снаряды для каждого из них. Подобный подход позволяет наиболее точно передать дух каждой боевой машины в нашей игре.
Сначала мы расскажем, как у нас настраиваются пулеметы и пушки. Самолетные и танковые орудия работают по схожему принципу, поэтому для простоты примера мы возьмем только одно — пусть это будет Д-25Т (122-мм), которое устанавливалось на такие танки как ИС-2, ИС-3 и ИС-4М.
В параметры самого орудия входят такие величины, как разброс, а также предельная техническая скорострельность орудия. Для настройки всех параметров в игре мы пользуемся различными документами, такими как полевые испытания и технические документации по технике. Поиск правильной документации — это самый долгий и трудоемкий процесс, так как различные ресурсы указывают различную и зачастую противоречащую друг-другу информацию. Определить достоверность источника не всегда получается сразу и без долгого изучения различных материалов. Ниже используются данные из «Таблицы стрельбы 122-мм танковой пушки обр. 1943 г. Д-25Т» Воен.издат. МО СССР Москва 1969г, а также «Боеприпасы к 122-мм орудиям наземной, танковой и самоходной артиллерии. Руководство» Военное министерство Союза ССР 1952 г., «Учебник сержанта артиллерии» книга первая, воен.издат НКО 1944 г.
На данный момент в нашей игре скорострельность является усредненной величиной, так как в реальной жизни скорость перезарядки зависит от множества изменяемых условий: таких как расположение боеукладки (когда при расходовании снарядов заряжающему приходится доставать снаряды из менее удобной укладки), а также вес и форма снарядов (к примеру, тяжелые и неудобные снаряды сложнее перезаряжать в течение продолжительного времени). У нас есть планы реализовать перезарядку с учётом подобной механики, чтобы скорость перезарядки зависела от положения боеукладки, усталости заряжающего, а также от положения самой башни, которое и будет определять, какая боеукладка будет ближе или дальше. К примеру, в Паттоне лишь небольшая часть снарядов находится прямо рядом с наводчиком, а остальные в укладках, расположенных в напольном отделении, которые доставать намного тяжелее. В случае с вводом подобной системы, это будет означать, что первые снаряды будут перезаряжаться намного быстрее, чем текущее время перезарядки, а последующие — дольше. Но подобная система у нас пока только в разработке.
Скорострельность выставляется в выстрелах в секунду и у нашего орудия мы проставили максимальную скорострельность в 0,048 выстрелов в секунду или 1 выстрел за 20,8 секунд — это минимальное время перезарядки, или максимальная скорострельность, которую может развить танк с максимально прокачанным экипажем.
Разброс рассчитывается следующим образом — мы берем из таблицы стрельбы снарядов значения среднего отклонения (Вб и Вв) на дистанции 1000 м, которые в случае с нашим орудием одинаковы и равны 0,3 м и уже через эти значения находим угловой параметр разброса. Так как полная полуось эллипса рассеяния равна 4Вб или 4Вв, а следовательно 1,2 м, что соответствует углу в 0,069 градуса как по вертикали, так и по горизонтали. Следовательно, на 1000 м максимальный разброс у этого орудия будет составлять примерно 2,4 метра, а это значит, что даже при полном разбросе вы все-равно будете попадать в силуэт танка даже на такой дистанции. Конечно, большинство орудий имеют различные значения среднего отклонения по вертикали и горизонтали, и разброс в таком случае будет принимать форму эллипса. При этом снаряд в половине случаев, будет попадать ближе к центру (2Вб и 2Вв), нежели на максимальный угол отклонения. Таким образом, мы симулируем точность орудия близкую к той, что была на реальных военных машинах.
Снаряды
Теперь, когда основные характеристики орудия заданы, и орудие готово к бою, мы приступаем к настройке боеприпасов. Видов боеприпасов использовалось очень много и перечислять их все, а также принцип их работы — это отдельная долгая тема. Для примера настроек, мы возьмем один из снарядов для нашего орудия — бронебойный остроголовый каморный снаряд.
Изначально выставляются такие стандартные параметры, как масса снаряда (25 кг), его калибр (0,122 м), а так же начальная скорость (795 м/с) и тип снаряда (бронебойный остроголовый каморный снаряд — APHE). От этих значений зависят параметры рикошета и нормализации снаряда, базовые параметры кинетического урона, а также определяются дополнительные свойства снаряда — такие как наличие взрывчатого вещества. Далее у нас имеются настройки баллистики (потеря энергии снаряда), а также шанс, с которым снаряд может вызвать пожар при попадании в пожароопасный модуль техники — это настройка является отдельной от настроек взрыва, и с помощью неё мы симулируем шанс возгорания от трассеров (при наличии их в снаряде) или возгорание от искры, производимой при попадании снаряда в препятствие.
Кроме этого, есть такие настройки, как осколочное действие, а также параметры взрывателя и мощность самого взрыва. Взрывная волна и осколки упрощенно учитывают как форму ландшафта, так и любые препятствия на их пути (в реальном мире взрывная волна распространяется не только по прямой линии и не из одной точки), таким образом, танк может скрываться от ударной волны и осколков за различными препятствиями, а отдельные модули танка будут защищать остальные модули от дополнительных повреждений. К примеру, снаряд, пробивший заднюю броню танка и взорвавшийся за двигателем, может не повредить экипаж, так как двигатель остановит осколки и ударную волну.
У каждого отдельного снаряда в нашей физической модели — свои настройки, такие как мощность взрыва, то есть какую толщину он может пробить своей ударной волной в упор, радиусы, где мощность удара будет максимальная или же уходящая в ноль. Помимо самого взрыва, у снаряда также есть и осколочное действие, которое мы задаем количеством осколков, бронепробитием осколков и радиусом их воздействия. Также стоит отметить, что к осколкам снаряда добавляются и вторичные осколки, которые возникают после пробития самой цели.
Как вы видите, все эти настройки довольно многочисленны, и мы считаем очень важным, чтобы игроки могли опознать необходимый эффект без необходимости изучения длинного списка характеристик. Именно поэтому иконки снарядов визуально различаются в зависимости от их параметров. Так, если у снаряда высокое бронепробитие, то на иконке снаряда будет отображаться пробитие толстого листа брони. Если же в наличии есть взрывное вещество и/или осколочное действие от самого снаряда — то в отображение иконки будут добавлены соответствующие эффекты. Будьте аккуратны с выбором снаряда, ведь разнообразные снаряды не только имеют разные характеристики пробития и наличие осколочных действий или взрывчатого вещества — различные снаряды еще и по-разному теряют свою энергию при полете. Обратите внимание на то, как изменяется числовое значение бронепробиваемости в зависимости от дистанции выстрела в подсказке к снаряду.
Рассматривая модель повреждений очень важно хотя бы вкратце упомянуть и то, что в нашей игре мы моделируем и характеристики разнообразных типов материалов — стекло, бронированное стекло, дерево, различный тип металлов как авиационных, так и танковых. Каждый материал имеет свою эквивалентную стойкость, выраженную в толщине броневой стали. Например, для 40-мм катанной брони мы считаем, что ее толщина броневой стали равна 40 мм, у литой брони — 37.6 мм, у бронестекла она равна 8 мм, а у дерева — 4 мм.
Определение точки попадания
Одним из важнейших вопросов, особенно в онлайновых играх, — определение точки попадания в противника, когда у двух игроков может кардинально отличаться качество интернет соединения. Особенно сильно это может сказываться на игре, где противники могут перемещаться с большой скоростью, в нашем случае — это авиационный режим.
В нашей игре мы создали систему определения расположения в пространстве для каждого игрока вне зависимости от задержки, с которой они играют. В мельчайшие подробности мы углубляться не будем, но вкратце это работает следующим образом: сервер от игроков получает только их собственные команды управления (например, положение ручки джойстика, гашетки, положение закрылок и прочее) и их единичные действия (такие как активация огнетушителей и запрос на возрождение) и по этим данным он рассчитывает движения и действия каждого игрока. При этом он рассчитывает каждый выпущенный снаряд по отдельности, баллистику, учитывая и взаимную скорость техники (снаряды, выпущенные при лобовой атаке будут наносить больше повреждений в зависимости от скоростей двух самолетов, нежели снаряд, выпущенный вдогонку), и все эффекты, которые эти снаряды имеют — всё это вне зависимости от скорострельности техники. К примеру, у Hurricane скорострельность пулемётов составляет 1000 выстрелов в минуту. Это означает, что при удерживании гашетки на втором Hurricane, у которого стоит 12 таких стволов — один только этот самолет выпускает в воздух 200 пуль в секунду, полет и попадания которых будут тщательно просчитываться сервером!
Напомним, как происходит просчет повреждений в нашей игре после попадания (как в авиационном, так и в танковом режимах):
- Проверка на пролом брони — если калибр снаряда в семь раз превосходит толщину листа по нормали, он пробивается без дополнительных проверок.
- Если пролома нет, идет проверка на рикошет
- Если рикошета нет, проверка на пробитие брони, учитывается текущая пробиваемость снаряда, конструктивный угол наклона брони и угол наклона самой техники. Рассчитывается приведенная толщина брони с учетом общего угла встречи и проверяется, может снаряд пробить ее или нет. Если нет, и в снаряде есть заряд ВВ — он срабатывает на броне и при этом может быть поражено навесное оборудование.
- Если произошло пробитие, снаряд наносит повреждения броне. Снаряд теряет пробиваемость и кинетический урон, пропорционально пробитой броне, и летит дальше. При этом любой кинетический снаряд при пробитии генерирует у точки пробития конус осколков, который может поразить оборудование и экипаж, находящиеся в этом секторе. При трассировке осколков из конуса, проверяется закрытие одних модулей другими.
- Сам снаряд продолжает лететь дальше, и при встрече с любым внутренним модулем производятся все вышеописанные проверки (за исключением того, что осколочный конус генерируется только при взаимодействии с броней толщины от 3-4 мм и больше). Проверки производятся до тех пор, пока пробиваемости снаряда не окажется достаточно для пробития очередного модуля, либо по срабатыванию взрывателя снаряда (если в снаряде есть ВВ , а толщины брони хватило для его взвода), дистанция, на которой взводятся снаряды, составляет 0.5 — 1.5 метра от точки пробития, в зависимости от калибра и типа.
- При срабатывании взрывателя внутри техники, происходит взрыв снаряда, который генерирует осколочную и фугасную сферы поражения, модули и члены экипажа, находящиеся внутри этих сфер, могут быть поражены осколками или ударной волной.
Затем сервер отсылает результаты расчетов всем игрокам в сессии для синхронизации данных, которые также рассчитываются и на системах самих игроков. Благодаря лагокомпенсации, состоящей из физической экстраполяции, интерполяции визуального отображения моделей и «отмотки» времени с повторной симуляцией (time rewind with extra physical simulation), вы всегда видите окружающих игроков в положениях в пространстве, максимально приближенных к их реальному, что позволяет вести огонь на упреждение и выцеливать критичные зоны на технике противника вне зависимости от пинга любого из участников боя (до известной степени, конечно). Любые физические объекты в мире, особенно тяжелая техника, обладают инерцией и физическими свойствами, значительно сужающими их «конус неопределенности» — возможных состояний в пространстве через время задержки, что позволяет добиться значительно лучших результатов лагокомпенсации, чем это обычно получается в сетевых шутерах. Это также позволяет сделать отклик в игре совершенно не зависящим от возвратного ответа сервера, что означает, что все ваши действия, такие как стрельба или маневры, применяются у вас сразу же и без задержки. Мы стараемся, насколько это вообще возможно, чтобы задержка до сервера не мешала игрокам получать удовольствие от игры и, благодаря этой системе, у игроков, играющих с различным пингом на разных серверах, разница в игровом процессе будет практически незаметна и только при экстремально высоких значениях задержки игроки могут видеть резкие маневры противника немного позже и резче, чем тогда когда они реально произошли.
Несомненно, никакой алгоритм не сможет исправить нестабильное соединение, когда сетевые пакеты не доходят до клиента или игрового сервера. В таких случаях игрок действительно может видеть маневры противников с задержкой и искажениями и даже испытывать другие проблемы в игре — всё зависит от того, насколько часто пропадают пакеты. Однако и тут мы создали определенные механизмы, чтобы подобные неприятности как можно меньше затрагивали игроков. Так, например, основные рычаги управления и стрельба у нас переживают потери пакетов в более чем 50 %. Это позволяет нам еще сильнее уменьшить последствия плохого соединения. Однако, любая многопользовательская игра становится лучше, если у вас имеется хороший интернет!