Pull to refresh

Comments 9

Неадекватный сетевой код зачастую губит отличные онлайн-проекты.
Вспомнить тотже Warface — Отличный шутер от Crytek… Но в какойто момент Mail.ru решили изменить сетевой код (Чтобы их сервера могли вместить больше игроков) и играть стало невозможно: При пинге до сервера 30-35 «лаг» в игре плавал от 100 до 5000 (!!!)
Но при этом европейский сервер, где не внесли этих изменений, при пинге в 60-80 игрался отлично! Лаг почти не ощущался!
Результат: Хорошие игроки свалили на европпу, а когда та стала блокировать российские адреса — и вовсе забили на игру и в ней остались лиш новички, да читеры (С которыми никто не боролся)

И подобных результатов можно вспомнить довольно много. Правда, в основном это всякие Инди-проекты. Более-менее крупные разработчики всёж уделяют сетевому коду особое внимание (Battlefield, Counter-Strike, Fortnite и т.п.)
А причина проста: код отрисовки графики уже давно никто не пишет — все покупают готовые движки. Тогда как приличных «сетевых движков» попросту не существует, и потому каждому разработчику приходится что-то колхозить в меру своего умения.
Это на самом деле весьма неприятная ситуация, учитывая, что игры с каждым годом становятся всё более и более онлайновыми, а сетевой код сам по себе чрезвычайно сложен и насыщен граблями, которые каждому разработчику приходится собирать самостоятельно.
Спрос на «сетевые движки» должен быть чудовищным, а вот предложения нет.

Интересно можно ли реализовать хороший сетевой движок используя Rust и его новые фичи для асинхронной работы? Если продумать его интеграцию с кодом движка написанного на С++ может быть перспективной идеей..

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

А заполнить этот рынок готовыми продуктами мешает то, что сервер, который можно распостранять как продукт, должен быть вылизан в 5-10 раз сильнее чем сервер «для себя» и попросту некому вложить столько усилий. Для понимания необходимых трудозатрат, без особых вывертов написанный сервер для ММОРПГ на 1000 клиентов в одном мире весит 3-10 человеко-лет и если из него уйдут одновременно несколько ключевых разработчиков, держащих в голове его тонкости и сложности проект склеит ласты. Помножьте эту цифру на 3-5 для доведения кода до состояния готового продукта и это даст вам ответ почему мир не наполнен готовыми сетевыми движками.

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

Вся проблема в том, что одного сетевого кода недостаточно. Нужна глубокая интеграция со всеми внутренностями системы. Нужно буквально все с нуля переписать, чтобы поддерживать rollback'и в любой момент. Когда это доходит до разработчиков (а реализация механики онлайна откладывается обычно на конец), то они просто раздвигают руки, ведь дедлайн уже близко.

UFO just landed and posted this here
Допустим, оппонент спамит меня мидом на 15 кадров стартапа, я хочу отреагировать пэрри. Задержка 100 мс, когда до меня доходит ввод оппонента на самом деле он сделал ввод 6 кадров тому назад, т.е. анимацию оппонента продвигают вперёд на 6 кадров и у меня остаётся 9 кадров вместо 15 на то чтобы увидеть движение оппонента и прожать свои кнопки. Что-то мне не нравится как это работает…
rolllback смещает правоту в пользуатакующего, inputdelay в ползу защищающегося. Совмещая оба подхода в опредлённых пропорциях можно нащупать баланс.
А ещё когда вы играете с Rollback Вы делаете атаки более длинными по сравнению с защитами, чтобы сдвинуть баланс с учётом пинга, а при singleplayer ту же анимацию проигрываете более коротко. Потому что не так важна абсолютная скорость удара сколько запас времени чтобы на него среагировать. При этом длину анимации вы на сингле укорачиваете, а интервалы между ударами в комбах не меняете, так что комбы играются с той же привычной скоростью.

А когда ваш код все вот это поддерживает в виде констант в конфигах вы садите опытных плейтестеров и подбираете константы.

О неткоде (на примере как раз файтингов) есть перевод отличной статьи здесь на dtf

Sign up to leave a comment.

Articles