Serious Sam 3: BFE

Serious Sam 3: BFE

53 ratings
Антилаг-руководство (RU) / Antilag-guide (EN)
By th
(RU) Данное руководство поможет вам существенно улучшить производительность сетевой подсистемы игры при совместной игре по сети, как по интернету, так и по локальной сети. После применения предложенных настроек (при условии, что у вас хороший интернет-провайдер) качество игры по сети вплотную приблизиться к качеству игры в одиночном режиме. Иными словами, пропадут все лаги, микрофризы, невидимые снаряды и так далее.

(EN) This guide aims to help you significantly improve net subsystem's performance of the game during cooperative gameplay over the Internet or LAN. If you use this settings (also if you have a good net provider) - your net gameplay's quality will be almost as good as your single play quality. In other words, all the lags, micro freezes, invisible projectiles and so on will be eliminated.
   
Award
Favorite
Favorited
Unfavorite
Теория / Theoretical things
(RU) В процессе игры по сети игровой клиент обменивается информацией с сервером. Проще говоря, ваша игра передаёт на сервер информацию о всех нажатых вами клавишах и всех движениях вашей мыши. Сервер принимает эту информацию от всех игроков одновременно и обрабатывает её, а также сервер управляет движениями всех монстров и снарядов. После обработки всей поступающей информации сервер передаёт обратно клиенту результат этой обработки и вы видите на экране движения всех монстров и других игроков. И так происходит с частотой много раз в секунду. Естественно, чем чаще и быстрее будет поступать обновлённая информация с сервера, тем более полную и подробную картину происходящего вы будете видеть.

По неизвестным причинам стандартные сетевые настройки игры и сервера (причём выделенных серверов тоже) установлены в сильно ограниченные значения, что приводит к потере львиной доли всех данных. Видимо, разработчики игры боялись проблемы завышенного пинга гораздо сильнее, чем проблемы низкой скорости передачи данных. Иными словами, если ваш интернет-канал обладает низкой скоростью (меньше мегабита), то, используя предлагаемые мной настройки, вы можете столкнуться с повышением пинга. Тогда отмените их или понизьте предлагаемые мной значения.

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

(EN) During the net gameplay game client transmits data to the server and receives data back. Simply put, your game transmits to the server the information of all the keys that you press and all the movements of your mouse. Game server accepts such information from all the players simultaneously and calculates it. Additionally the server manages the movements of all the monsters and projectiles. After the calculations our server transmits to the client the results of those calculations and you can see the movements of all the monsters and other players on your screen. The cycle repeats many times per second. Naturally, more often and quicker our client receives updated information the more detailed and thorough image we get.

For reasons unknown default net settings of the game and of the server (including dedicated servers) set with very limited values which makes us to lose the huge part of the data. I suppose, game developers were afraid of the latency problem but not of the low net speed. And yes, if you net channel is not wide enough (less than one megabit per second) than you might encounter some latency problems. I advise you to cancel all my settings than or at least try to use less aggressive values.

I have to say that most dedicated server’s admins are not very bright with competent configuration of their servers. That means, I am afraid, that most dedicated servers (which I checked) have default (or close to it) settings, which totally breaks the full potential of the net gameplay.
hud_iShowBandwidth
(RU) Прежде всего мы хотим видеть что, собственно, мы делаем. Откройте консоль вашей игры (нажав тильду ~) и напишите (а лучше скопируйте) следующий текст (размер букв важен):

hud_iShowBandwidth=1

Стандартное значение этой переменной равно нулю и вы в любой момент можете вернуть его обратно, написав в консоли:

hud_iShowBandwidth=0

Не забудьте нажать энтер.

Данная переменная включает отображение скорости с которой клиент получает информацию от сервера в верхнем правом углу экрана белыми цифрами (над FPS, если их отображение у вас включёно). Скриншот:
Белое число 104792 и есть текущая скорость получения данных. Эта скорость показана в байтах в секунду (не битах) или сокращённо в терминах игры - BPS. Число обновляется очень быстро - с каждым новым пакетом данных, переданным по сети.

Обращаю ваше внимание, что важна именно скорость передачи данных от сервера к клиенту. Именно в эту строну идёт большая часть данных. Клиент передаёт серверу относительно мало данных.

Теперь мы видим нашу цифру и далее я объясню в чём тут подвох.

(EN) First of all we want to see what we do. Open the game console (press ~) and type or just copypaste that (the case is important):

hud_iShowBandwidth=1

The default value of this cvar is zero and you can revert it back any moment:

hud_iShowBandwidth=0

Don’t forget to press enter.

This cvar toggles on display mode for bandwidth usage. It will be shown in the right upper corner of the screen with white digits just over FPS counter if you have it on. Screenshot:
White number 104792 is our current bandwidth usage. This value uses bytes per second (not bits) or (using game terminology) BPS. The value refreshes very quickly – it does with receiving every new net data packet.

It is important to understand that the largest portion of the data is transmitted from the server to the client, not vice versa. The client transmits to the server relatively small amount of data.

Now we can see the thing and I am going to explain the feature.
cli_iMaxBPS / ser_iMaxClientBPS
(RU) Эти две переменных задают ограничение на скорость передачи данных от сервера к клиенту.

Это работает так:

При подключении к серверу клиент запрашивает желаемую скорость, равную cli_iMaxBPS. Сервер сравнивает запрос клиента со своей переменной ser_iMaxClientBPS и предоставляет клиенту скорость МЕНЬШУЮ из этих двух цифр. То есть сервер не даст клиенту скорость большую, чем сам считает нужным, но даст клиенту скорость меньшую, если клиент запросил меньше.

И теперь самое главное.

Стандартное значение клиентской переменной - 12000 BPS. Серверной - 20000 BPS. Это значит, что большинство игроков (которые не трогали стандартные настройки игры) играют на скорости 12000 BPS.

Как вы видели на предыдущем скриншоте - моя цифра превышает 100000 BPS, а по наблюдениям в активных игровых сценах она может превышать 120000 BPS.

ЭТО ЗНАЧИТ, ЧТО ДО 90% ВСЕЙ ИНФОРМАЦИИ ОБ ИГРОВЫХ СОБЫТИЯХ ТЕРЯЕТСЯ ПРИ ИГРЕ НА СТАНДАРТНЫХ НАСТРОЙКАХ.

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

Итак, вот финальный рецепт. Пользуясь игровой консолью (как мы делали ранее), задайте этим двум переменным большие значения. Я рекомендую от 200000 и более, но бессмысленно задавать слишком большие величины. В любом случае вы получите фактически неограниченную скорость передачи данных и на 200000 BPS, и на 1000000.

Далее о плохом.

Как вы уже поняли, большинство серверов настроены по умолчанию, поэтому настройка вашего клиента почти ни на что не повлияет. Вы получите 20000 BPS вместо 12000, что, конечно, лучше, но это всё равно в 6-7 раз меньше желаемого. Поэтому вы можете опытным путём поискать сервера с высоким значением BPS. Заходите на сервер, запускаете последний уровень (Страж Времени), играете до первой же активной баталии (там очень много врагов прямо сразу) и следите за цифрой в уголке. Если она будет значительно превышать 20000 (40000-100000 и больше), значит сервер это позволяет.

Ну и конечно, вы можете сами создать игру и пригласить ваших друзей. Именно для этого вам и нужно поменять значение серверной переменной - при создании собственной игры ваш компьютер и будет сервером. Только не забудьте дать вашим друзьям ссылку на это руководство, иначе они не почувствуют никакой разницы.

(EN) These two cvars limit network bandwidth.

It works like that:

During connection process the client asks the server to grant the amount of network bandwidth equal to cli_iMaxBPS. The server compares it with its own value ser_iMaxClientBPS and grants to the client the SMALLER value. In other words, the server doesn’t grant to the client more bandwidth than the server considers enough, but the server grants to the client the smaller amount of bandwidth if the client asks so.

Here’s the most important part.

The default value for cli_iMaxBPS is 12000, for ser_iMaxClientBPS is 20000. It means that most of the players (who never touch default settings) play with 12000 BPS.

As you can see on the screenshot – I have more than 100000 BPS. And I witnessed more than 120000 during some active game scenes.

IT MEANS THAT ALMOST 90% OF THE INFORMATION OF THE GAMEPLAY PROCESS EVENTS USUALLY LOSES USING DEFAULT SETTINGS.

Of course there will be lags, micro freezes and invisible projectiles. And low FPS, not graphical FPS but network, those which represent network frames.

So here is the main idea. Use game console (as we do before) to adjust this two cvars to higher values. I recommend 200000 or more. It’s useless to set too high values – anyway you will get virtually limitless bandwidth with 200000 BPS or with 1000000.

I am afraid we need to speak of bad things.

As you undoubtedly aware most dedicated servers have their setting at default so you client’s setting is not so important. You will get 20000 BPS instead of 12000 BPS, which is already better, but still 6-7 times worse than we ideally want to have. But you have an opportunity to try to find some servers with high BPS. Connect to the server, set map to the last level (The Guardian of Time), play till some active battle (there is a tons of monsters right from the start) and watch your value in the right upper corner of the screen. If you get significantly more than 20000 (40000-100000 and more) the server is good.

Of course you can create your own game and invite your friends. That’s why you need to adjust the server cvar too. If you create own game – your computer will be the server. Don’t forget to give a link to this guide to your friends otherwise it will be useless for them.
Настройка через меню / Menu options
(RU) Вы можете изменить клиентскую переменную через меню игры.

Настройки->Настройки мультиплеера->Скорость соединения

1) ISDN - устанавливает 6000 BPS.
2) DSL - устанавливает 12000 BPS. Это дефолтная настройка.
3) LAN (локальная сеть) - устанавливает 50000 BPS.

Скриншот:
Как видите у меня написано "По выбору" - потому что я задал значение отличающееся от трёх доступных в меню. Поэтому без использования консоли вам не обойтись.

(EN) You can set client's cvar using game menu.

Settings->Multiplayer settings->Network speed (or Bandwidth speed)
Sorry, I don’t have English screenshot.

1) ISDN sets 6000 BPS.
2) DSL sets 12000 BPS. It’s default.
3) LAN sets 50000 BPS.

Screenshot:
I've set the different value from this three. So you have to use game console to set it.
Благодарность / Acknowledgement
(RU) На эту информацию я натолкнулся благодаря руководству другого человека. Здесь привожу ссылку. В комментариях к его руководству мы с ним обсуждали эти вопросы. Спасибо ему за идею.

http://gtm.you1.cn/sharedfiles/filedetails/?id=891133436

(EN) I didn't do all the work myself. The other person did too. Here is the link. I thank this author for idea. You can read our discussion in the comments section of his guide.

http://gtm.you1.cn/sharedfiles/filedetails/?id=891133436
Информация к размышлению / Some fun observations
(RU) Будучи хостером выделенного сервера, я несколько дней отслеживал лог моего сервера на предмет поиска игроков с высокими значениями BPS. За это время на моём сервере (неоднократно) побывали сразу несколько человек из топ-10 официального кооперативного рейтинга во всех трёх режимах (кроме выживания). Удивительно, но у всех этих игроков 12000 BPS. Как мало мы знаем об игре, в которую играем.

(EN) I host cooperative dedicated server. And for some days I was monitoring my server's log to find players with high BPS setting. During that time I've witnessed some top-10 cooperative rating (except surviving mode) players. All of them have their BPS at 12000. I just don't get it.
4 Comments
м ∀ Я N Є 3 и ʞ 5 Jul @ 4:03pm 
Thank you for this anti-lag solution! We had a wonderful gameplay recently with these settings.

I as a host have observed going up to 400000+ BPS at some gameplay moments.

If only I knew about this when we tried to play Serious Sam 2 with 10+ player group... (Yes, the fix is the same, however it needs to be applied on server join because it resets after a game restart)
th  [author] 31 Oct, 2021 @ 8:56pm 
Я не тестировал это с другими частями Сэма, так что не знаю.
Содрагон 12 Sep, 2021 @ 12:51am 
Работает. Ставьте лайки, работяги, хватит играть с лагами!
Автор, скажи, верно ли, что подобная структура и в остальных частях Сэма, и решение проблем с лагами там аналогичное?
2W (5830d) 3 Jan, 2021 @ 7:40am 
Сделал бы два руководства, одно на русском а другое на англ, а не как тут