Упустим из виду, конечно, момент, что один хрен все герои были дисбалансными. Чего только стоил Пиро с его критующим Флогистонатором и багнутой неуязвимостью, которую Валвам впадлу было пофиксить. Ну а чего париться? Проект неиграбелен, та и фиг с ним! Игроки сами как-нибудь справятся. А команда разработки пока зачиллится.
В общем, путь разработки у команды был непростой, оттого и столь долгий. Что касается нас… То девяти лет в запасе у моей студии не было. Да у меня и года-то не было, с учетом скорых потрясений. Поэтому я рассчитывал управиться с легендой примерно за два полных месяца. Желательно и быстрее. Но проект сложный, поэтому губу лучше сильно не раскатывать.
— Ладно, начнем с архитектуры проекта. — Буркнул я себе под нос. Создал новый раздел задач в Шотгане.
Начать я решил с общих систем игры. Передвижение, стрельба, системы хитскан и проджектайл-оружия, столкновения, общая основа способностей и состояний, правила матча, подтверждение действий игроков и прочие системы меня не особо беспокоили. Отчасти мы уже применяли их в ранних проектах, а то, что было новинкой, я примерно понимал, как реализовать на си-шарпе. Поэтому пул из нескольких десятков задач с базовыми системами и пояснениями к ним был создан быстро. Чуть больше времени ушло на описание системы сетевого предсказания, на которой ребята могли зависнуть надолго. Так что я решил расписать ее максимально подробно, дабы программисты не изобретали велосипед заново. Что вообще есть это сетевое предсказание?
Ну ей-богу, мы что, в каменном веке? Но ладно. Грубо говоря, это возможность замаскировать плохой пинг.
Допустим, у игрока он равняется соточке, и этот игрок делает шаг вперед. Пятьдесят миллисекунд тратится на отправку информации о перемещении на сервер, тот ее обрабатывает, перемещает игрока и отправляет информацию об успешном перемещении обратно — еще за пятьдесят миллисекунд. И только спустя одну десятую секунды игрок видит отклик от своего действия. Для какого-нибудь Майнкрафта или РТС-ки такие задержки вполне приемлемы, но вот для игр с высоким темпом — нет. Игра становится заторможенной, отчего игрок будет получать перманентный стресс. Система предикта же позволяет ПК игрока начать действовать заранее.
Вот захотел он сделать рокет джамп — в этот момент комп отправляет запрос на сервер и тут же сам начинает отображать полет из точки «А» в точку «Б». Пока движение идет, инфа успевает дойти до сервака, и если компьютер верно предсказал движение (ничто не помешало приземлиться в точке «Б» и игрок остался жив), то сервер просто подтверждает действие. Если же что-то пошло не так, то игрока просто откидывает назад, ну или убивает. Обидно, конечно. Но такие ситуации случаются обычно очень редко, и игроки их практически не замечают. Зато основной геймплей становится намного плавнее и приятнее.
Эту же систему можно применить и к регистрации попаданий. Только тут нужно будет внедрить еще и компенсацию лагов.
Боже мой, только разобрались с предсказаниями, так тут еще что-то новое подъехало? А как иначе? Сетевые шутеры, да еще и с киберспортивными замашками — дело серьезное, тут нужны костыли, и много.
Конкретно в нашем случае костыль с компенсацией лагов работал как гарант попадания. Грубо говоря, поймал ты в прицел вражину, зажал гашетку. В этот момент твой компуктер отправляет запрос на попадание по вражеской тушке и сам показывает тебе разлетающуюся тыкву врага. Но вот незадача: сигнал о фраге будет идти до сервера целых пятьдесят миллисекунд, и за этот период враг может сместиться с линии огня. То есть по факту ты должен будешь промахнуться, хоть на своем мониторе ты попал. Нечестно и обидно.
Поэтому, чтобы не травмировать тонкую геймерскую душевную структуру, сервер в момент получения сигнала о попадании отматывает время назад (на количество миллисекунд задержки) и смотрит, было ли реально попадание. Если было, то фраг засчитан. Если нет, то увы.
Удобно? Да, но такое решение тянет за собой два очевидных бага. Первый — убийство через стену, когда сильно пингующий враг убивает тебя на том месте, где ты был секунду назад. И второй — когда, наоборот, ты не можешь убить врага из-за пинга. Вроде бы и брызги крови есть, а попадание не регает. И это надо также решать дополнительными костылями. Подкручивать тик-рейты серверов, отвязывать брызги крови и прочие эффекты от системы предсказания и городить еще сотню других подпорок.
— Мда-а-а… — Протянул Коул, дочитав техническое задание. Снисходительно взглянул на меня. — Нейт, я, конечно понимаю, что ты как лучше хотел. Но в следующий раз не распыляйся на пояснения, просто скажи, что надо решить проблему, и мы с ребятами ее решим. Ей-богу, у тебя в отделе два сеньера и я…
Я даже растерялся. Привычка контролировать все и вся плотно сидела на подкорке. Да еще и пси-сила лишь подкрепляла это желание. А ведь можно было и догадаться, что при наличии того же Варика, который тут Леджендарик, или Батлы эта система широко распространена в кругах любителей кода. Надо бы больше доверять своей команде.