Pull to refresh

Comments 57

Сегодня день К.О.?

ЗЫ ой ща заминусуют))
Материал хоть и очевидный но действительно интересный та что зря ты так.
P.S. Напомнило фразу Андрэ Ла Мота: «Если вы хотите доставить другим радость, то можете не сомневаться, что видеоигры- это то, что надо! Видеоигры- это способ выражения самых фантастических идей и замыслов»
P.S.S.Почему хром подсвечивает слово «видеоигры»?
Кармак, конечно же, молодец. Он внес свой неоценимый вклад в наше игровое будущее.
не моё это дело, но всё же
93 год рождения, а такой интересный материал уже прост и очевиден…
это только факты, я удержусь от комментариев
Спасибо, очень интересно и понятно расписано. Жду продолжения.
У меня по этому поводу уже давненько валяется какой-то переводец.
Подчищу — и на хабр?
Конечно, чего же ему без дела-то валяться.
Если «переводец» такой же правильный и интересный – конечно, почему бы и нет?
UFO just landed and posted this here
Counter-Strike (а точнее Half-Life) есть сильно переделанный Quake 1. Ключевое слово _сильно_, я не уверен, что там сохранился сетьевой код первого Quake.
UFO just landed and posted this here
>сетьевой код

Совсем в каждой?
Практически любая программа это _сильно_ переделанный «Hello, World!» :) Ключевое слово сильно :)
А по-моему правильно «Tim Sweeney» (Тим Свини) а не Тим Суинли (Tim Sweenly).
> Вторым этапом явилась система компенсирования задержек, разработанная Яном Барньером (Yahn Barnier) из Valve для CounterStrike.
а его имя пишеться как Yahn Bernier, см. www.valvesoftware.com/people.html
Yahn Bernier

Яном Барньером

Яном Бернье, если на то пошло

пишеться

тыц
Исправил, спасибо
Спасибо, updated
Спасибо, хороший перевод и статья замечательная.
Хоть какая-то тематика, отличная от веба и гаджетов на хабре :)
Переводите и пишите еще!
МатрицаМир вообще одна большая иллюзия.
Прекрасная статья, не знал про систему прогнозирования на стороне клиента…
меня она раздражает. глюканет инет, навесишь 5 хэдшотов, а потом просыпаешься и все это оказалось сном и тебя зарезали ножом пока ты стоял неподвижно(вспоминаю CoD:MW).
Было бы интересно прочитать про реализацию сетевой игры в Дюк Нюкене 3Д…
Сколько же часов было убито, в своё время, в нём… ;)
И не говорите! Зато там ведь летать можно было! С ракетницей, причём.
Интересное:

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

Если вы не верите, обратите внимание: вы можете ворваться на верховом животном в помещение (где езда запрещена), и только по прошествии лага*2 вас насильно снимут с вашего тигра, но расстояние, которое вы успеете пробежать, останется за вами и отменено не будет.

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

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

А ведь есть ещё способности типа «отражение заклинания» и Ice Block магов, позволяющих им на время застыть неуязвимыми. Они требуют отличного тайминга, и все равно ими вполне реально пользоваться.

Чёрт возьми, как это работает??
По принципу «нам пофиг что показывает клиент, главное то, что на серве» с погрешностями и прогнозирующими вычислениями на стороне сервера… Наверное как нить так
нет, клиент в WoW действительно главный, когда речь заходит о положении игрока. а то, как близы защищают свой клиент от взлома — это тема отдельной статьи.
Хреново это работает :-) Фактически, двигаешься на опережение.
если коротко: вы платите — оно работает.
Вот этого продолжения истории мы и ждём от gcc. )))
дело в том, что в ВоВе лаги намного меньше влияют на геймплей из-за отсутствия (почти) необходимости прицеливаться. В квейке одной из основных проблем был полет снарядов и все, что связано с выстрелами, в итоге Кармак так и не решил поставленную себе задачу — нормальная игра через модем (можно было бежать впереди своей ракеты и т.п.)…
А в ВоВе все просто, есть цель, есть текущий удар/спелл, задача клиента — нарисовать траекторию от игрока до цели. Лаги дают интересные эффекты типа файрболлов летающих по дуге за угол вслед за целью :-)
В случае АоЕ клиентам тупо с сервера приходит информация о повреждениях, и не важно, как далеко ты успел убежать от эпицентра с локальной точки зрения.
Что до Ice Block и т.п., то с большим лагом ими все равно не воспользуешься эффективно, а лаги в пределах 500-600 мс не так существенны для спеллов с временем действия под 10 секунд.
Более того, из-за достаточно низких требований к лагам, сервера ВоВа общаются с клиентами по TCP, а не через UDP как в случаях с шутерами.
Я разрабатываю интернет-игру (какую — секрет, предполагаемая нагрузка ~20 человек на сессию). Поскольку в моих целях задержка в полсекунды должна быть приемлема, я тоже решил использовать именно TCP.
Вы уверены, что шутеры работают на UDP? Мне что-то кажется, что контроль и порядок доставки сообщений для них крайне важен.
Сервер Quake 3 по сети шлёт не состояния объектов, а изменения в них. Причём на сервере хранится история изменений и клиенту отсылаются все изменения, которые он ещё не подтвердил. (так и хочется провести аналогию с SVN :)
Таким образом и порядок доставки не важен, и состояние игры на клиенте не портится.

trac.bookofhook.com/bookofhook/trac.cgi/wiki/Quake3Networking
Cпасибо за разъяснения.
Шутеры и другие игры с подобной динамикой работают по UDP, т.к. TCP не обеспечивает необходимую скорость работы. Обычно поверх UPD вешают свои примочки, частично эмулирующие TCP.
А это действительно очень зависит от пингов, и с этим в WoW ничего не поделать. Есть, например, классическая комбинация в дуэли мага и воина: маг начинает кастать 2-секундный sheep, воин видит это, использует отбивалку заклинания, маг в свою очередь видит это и отменяет заклинание, в результате заставив воина потратить отбивалку и сэкономив при этом sheep. Так вот при очень хороших (~20ms) пингах воин может просто включить reflect в самый-рассамый последний момент, когда маг уже не успеет ничего отменить. И тем же русским игрокам такое на западных серверах очень сложно провернуть — пинги не позволят.
Лаг при касте — дело привычное и легкопредсказуемое, и знание о нем помогает значительно увеличить собственную скорость пиу-пиу.

Но как салочки тряпочек и милишников умудряются корректно выглядеть на обоих клиентах?

Представим, я стою, и тут в меня влетает воен. Оправившись от стана, попытаюсь отбежать — через 200мс сервер узнает об этом, ещё через 200мс об этом узнает воин и начинает преследовать меня, опять же это должно дойти туда-сюда. По идее, начав убегать, я должен почти сразу выйти из мили-зоны, но на практике этого не происходит, воин будет бежать за мной и лупить. (Вот почему вместо попытки отбежать я просто влеплю ему дескоил, а дальше дело за малым...) Как это работает — я не пойму. То ли мне только кажется, что это происходит так, то ли в определенных ситуациях действительно используется какая-то хитроумная система предугадывания итп.
Опять же, на этот вопрос очень просто ответить, зная, что близы 100% доверяют информации, приходящей с клиента. С точки зрения клиента милишника, в момент, когда он совершает атаку его цель еще никуда не убежала, а значит атаку совершить можно. На сервер уходит команда в стиле «я зафигачиваю вон тому чуваку и да, он у меня в пределах досягаемости.» или как-то так. Более простой вариант — нумеровать команды. Если сервер видит, что команда на атаку была совершена раньше, чем обработана его команда на перемещение противника, то может восстановить состояние на тот момент и убедиться, что атака еще проходит.
Да, статья хорошая, из последней части почерпнул для себя полезные вещи.
+ к списку от dMetrius хотелось бы подробнее раскрыть тему об организации(в частности как раз синхронизации положения игрока) сетевой игры в MMOG играх, там нагрузка всегда большая :)
Сколько видел «спидхаков» и «воллхаков», и вполне знал как они работают, и какие бывают «лаги», когда много игроков собираются в одном месте(например ЧВ в RFOnline), теперь хотелось бы все-таки увидеть в подробностях как же проектируют их сетевую часть, ибо мои знания в этой области поверхностны =)
UFO just landed and posted this here
Статья шикарная. В свое время читал про приоритеты просчетов клиента и сервера, но в целом картины не видел.
Огромное спасибо, что собрали все мысли в одной статье!
UFO just landed and posted this here
Да, мне тоже понравилось, спасибо :-)
система прогнозирования на клиенте была реализована задолго до quake world.
к примеру в WoW.
черт. надо обновлять вкладку перед тем как писать.
Я если честно мало понимаю в сетях, но меня бесит только одно. Хоть я так же уже почти не играю в игры, но раньше в какомнибуть НФС 3 я просто создавал игру, а друг вводил IP и мы вдвоем гонялись.

Сейчас какой-то бред, играть только через оф. сервера и еще прочая ахинея. А простых вещей типа я создал и играю только с теми с кем договорился, этого я давно не видел.
ЦА сейчас другая, интернеты стали шире. Это раньше можно было делать игры на подобии Fallout и TES(новый TES уже не торт) в который люди играли играли. Были интересные сюжетные линии и прочее(да даже в NFS:Porche сюжета больше чем в Undercover). Сейчас эра пиратства и школоты. Проще раз в пол года выпускать шлак типа ME который средне-статический школьник проходит через 5 часов.
^^^^^^
это я о том, что оф сервера спасают от пиратства
.
Ну и это раньше 2 человека который хотят поиграть всегда находились в одной сети или городе(вспоминаю как в старкрафт по мопеду играл). Да и внешние ip не у всех, а у кого есть те не умеют пробрасывать порты, а UPnP отключал из-за того, что всякая зараза его использует. А так же никто не мешает вам создавать частные «сервера» с паролем для друзей.
>до с трудом играбельной (например, при соединении 28.8Kbps по протоколу SLIP со сжатием)
Не припомню уже что такое SLIP, но на 28800 v32/v34/v42 с отключённым сжатием вдвоём было просто отлично бегать в DOOM2
Хотя, наверное, уже позабыл. Скорее всего не на 28800, а на 31200 или 33600…
Отличная популярная статья о деталях эволюции всеми используемых технологий.
Мне всегда было интересно, как это делается, но у меня были только предположения.
Теперь у меня есть представление, основанное на цитатах первоисточников.
Спасибо за качественный материал.
Творческих успехов!
хорошо, толково и понятно описано. жду ещё.
Автор оригинальной статьи обещался выложить вторую часть буквально через неделю после публикации первой части, но к сожалению куда-то пропал, и блог его давно не обновлялся. Тем не менее материал ещё есть, и не только оттуда, так что тема игростроения не пропадёт.
Вот нашел любопытное видео в тему Valve'вской технологии «лагокомпенсации», показывающие разницу в попадании при компенсировании лагов и без
www.wegame.com/watch/TF2_Hitboxes/
Sign up to leave a comment.

Articles