0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Настройка скорости Half-Life при игре по модему

Настройка скорости Half-Life при игре по модему

Понимать физику стрейфов мы будем, используя находящийся в открытом доступе код Half-Life 1. А конкретно, нам понадобятся файлы input.cpp, pm_shared.c и pm_math.c

Скорость (velocity) – векторная величина. Мы можем задать её тремя компонентами (проекциями на оси системы координат). Либо можно представить её как пару – модуль скорости (speed) и её направление (единичный вектор).
При 100 fps движок CS 100 раз в секунду обрабатывает движения мыши и нажатия кнопок, после чего, исходя из этих данных, вычисляет, как должна вести себя моделька игрока. Если быть точнее, то движок знает не про нажатия кнопок, а просто получает команды «идти вправо», «присесть», «прыгнуть» и т. д., но для простоты будем говорить о кнопках.

Получение вектора скорости игрока на каждом таком такте происходит в несколько этапов:
Получить состояние кнопок движения (WASD)

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

Зная направление, в котором смотрит игрок в данный момент, найти связь (а точнее матрицу перехода) между системой координат модельки и системой координат внешнего мира

В случае наличия трения (к примеру, когда игрок идёт по земле) уменьшить модуль текущей скорости

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

Прежде всего, взглянем на эту функцию из input.cpp:

Как видите, она возвращает значение val, характеризующее состояние некой клавиши. Например, если кнопка была зажата в каком-то предыдущем фрейме, и всё ещё зажата в текущем фрейме, то val будет равен 1. А если, к примеру, кнопка не была нажата и не нажимается в текущем фрейме, то val равен 0.

Теперь в том же input.cpp рассмотрим следующий участок кода, исходя из нажатых клавиш (а точнее отправленных команд) формирующий вектор желаемой скорости (forwardmove, sidemove, upmove), то есть то направление, в котором мы хотим двигаться в данный фрейм. К концу статьи станет понятно, куда мы будем двигаться в итоге после всех расчётов.

При вычислении компонент использовались значения cl_upspeed (320 по умолчанию), cl_forwardspeed (400), cl_backspeed (400) и cl_sidespeed (400). При зажатой клавише Shift скорость в Half-Life умножается на 0.3, в CS 1.6 на 0.52. Если вектор после этого оказался по длине больше, чем maxspeed (250 с ножом/пистолетом по умолчанию), то масштабируем его так, что он становится равным 250.

Теперь посмотрим на интересующую нас часть функции PM_PlayerMove из файла pm_shared.c

Что это за AngleVectors там стоит? Всё довольно просто. Введём обозначения:
АСК – абсолютная система координат, связанная с внешним миром (картой)
ССК – связанная с моделькой игрока система координат

Тот вектор желаемой скорости, который мы получали в input.cpp, записан в ССК, причём эта система левосторонняя (ось X смотрит прямо вперёд, ось Y вправо, ось Z вверх — именно в этих направлениях мы получаем положительные значения forwardmove, rightmove и upmove соответственно). Мы же хотим использовать этот вектор для вычисления итоговой скорости, а та записана в правосторонней АСК. Функция AngleVectors даст нам матрицу перехода от АСК к ССК.

На вход поступают три угла, которые задают направление, в котором мы смотрим, то есть положение ССК относительно АСК. Эти углы называются углами Крылова и повсеместно используются в навигации:
рыск (yaw) — поворот направо-налево (ось Z)

тангаж (pitch) — наклон вверх-вниз (ось Y)

крен (roll) — наклон вправо-влево (ось X).

Для краткости обозначим их следующим образом:

Для нахождения матрицы перехода от АСК к ССК нужно перемножить матрицы поворота, соответствующие углам Крылова. Плюс ещё одна матрица задаст отражение оси Y, дабы из правосторонней получить левостороннюю систему координат:

После перемножения получатся как раз те формулы, которые вы видели в коде функции AngleVectors. Итоговая матрица перехода от АСК к ССК имеет вид:

Здесь forward, right и up – единичные вектора, задающие оси ССК в проекциях на оси АСК.

Вернёмся в PM_PlayerMove. Там у нас далее вызывается функция PM_Friction (в том случае, если мы находимся на земле). Интересующая нас часть этой функции выглядит так:

При sv_friction 4 и при 100 fps (откуда длительность фрейма будет 0.01 секунды) получаем drop = control * 0.04. Если наша скорость больше значения sv_stopspeed (по умолчанию 100), то control равен нашей скорости, а drop составляет 4 процента от неё. Именно на эти 4 процента и замедлится наша скорость на выходе из PM_Friction.

После PM_Friction вызывается либо PM_WalkMove (если мы на земле), либо PM_AirMove (если мы не на земле). Рассмотрим эти случаи отдельно.

Вот что представляет из себя PM_WalkMove :

Здесь мы получаем forwardmove и sidemove из input.cpp, затем используем forward и right из полученной нами выше матрицы для того, чтобы перевести вектор желаемой скорости в АСК, как мы и планировали.

Чтобы исключить влияние клавиш движения на вертикальную скорость игрока (в системе ССК), мы не используем upmove и обнуляем вертикальные компоненты forward и right (что вынуждает нас нормировать эти вектора, дабы они не повлияли на величину желаемой скорости). Далее скорость обрезается до значения maxspeed, и вызывается функция PM_Accelerate, в которую передаются значение и направление (единичный вектор) желаемой скорости, а также значение sv_accelerate (по умолчанию 5).

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

Далее вычисляется addspeed как разница желаемой скорости и currentspeed, а также accelspeed (accel * pmove->frametime * pmove->friction можно оценить как 5 * 0.01 * 1 = 0.05, тогда accelspeed составит 5 процентов от желаемой скорости).

В зависимости от соотношения между addspeed и accelspeed одна из этих величин становится длиной той самой прибавки в скорости, которую мы так желали получить. К вектору исходной скорости прибавляется вектор, направленный вдоль wishdir и равный по величине accelspeed (мы можем их складывать, так как заведомо перевели их в одну систему координат):

Попробуем теперь прочувствовать, что же всё это значит.

Эксперимент 1. Мы зажали W и просто бежим вперёд с ножом или пистолетом. Функция PM_Friction в данный рассматриваемый фрейм обрежет скорость на 4 процента, теперь вместо 250 мы имеем 240 юнитов/сек. Так как зажата только W, то в input.cpp её состояние равно 1, состояние остальных клавиш движения 0. Мы сначала получаем cmd->forwardmove = 400, cmd->sidemove = 0, а затем после масштабирования (так как мы превысили максимальную скорость 250) cmd->forwardmove = 250, cmd->sidemove = 0. В функции PM_WalkMove вектор (fmove, smove) задаст направление, в котором мы смотрим. Направление wishdir совпадает с направлением нашей текущей скорости, величина желаемой скорости wishspeed равна 250, и мы заходим в PM_Accelerate. Здесь
currentspeed = 240 * cos(0) = 240
addspeed = 250 — 240 = 10
accelspeed = 250 * 0.05 = 12.5 > 10

поэтому accelspeed становится равным 10. Далее мы прибавляем к нашей скорости 240 юнитов/сек ещё 10 юнитов/сек в том же направлении, и скорость вновь становится равной 250. Вот так мы просто бежим вперёд по земле.

Эксперимент 2. Мы, как и раньше, бежим вперёд и вдруг нажимаем A. Скорость после PM_Friction так же 240 юнитов/сек. W была зажата и всё ещё зажата, поэтому её состояние 1, клавиша A зажата только что, её состояние 0.5. Поэтому сначала cmd->forwardmove = 400, cmd->sidemove = 200, а затем после масштабирования cmd->forwardmove = 223.6, cmd->sidemove = 111.8. Внутри PM_WalkMove после получения желаемой скорости мы передаём в PM_Accelerate wishspeed = 250 и единичный вектор желаемого направления wishdir, составляющий с нашей текущей скоростью угол arctg(200/400) = 26.565 градуса. В PM_Accelerate находим:
currentspeed = 240 * cos(26.565) = 214.66
addspeed = 250 — 214.66 = 35.34
accelspeed = 250 * 0.05 = 12.5 0
accelspeed = 10 * 250 * 0.01 * 1 = 25 92.866
Скорость меняет направление и уменьшается по величине. Именно эти потери скорости показывает lj статистика в столбике Loss.

Чувствуете, в какой узкий зазор мы должны попасть, чтобы получить прирост скорости?

А теперь самое интересное — вспомним, что всё это было получено в предположении, что скорость во время полёта сохраняла значение 250 юнитов/сек. Но она же растёт! И вместе с её ростом полученный нами зазор для u неумолимо уменьшается. А если ещё вспомнить, что при lj мы заранее набираем скорость около 275? Ух, непростое это оказывается дело — lj прыгать. Отсюда мы можем сделать следующий вывод — если хотите минимизировать потери скорости и максимизировать её прирост, то либо вы делаете одинаковые по угловой скорости стрейфы, сужающиеся по ходу полёта; либо вы сохраняете амплитуду стрейфов, но по ходу полёта делаете их более плавными. Вот такие пироги.

Понижаем пинг в Half-Life

Все задавались таким вопросом как пинг. От чего он зависит и как на него повлиять только настройками в конфигурации Half-Life не меняя провайдера будет рассказано ниже.

Итак, что же такое пинг в игре Half-Life. Пинг измеряется в милисекундах (мсек), иначе говоря это время за которое сигнал от вашего компьютера доходит до сервера и возвращается обратно.

Пинг в основном зависит от качества интернет-соединения, мощности компьютера и загруженности процессора компьютера.

Чтобы узнать пинг в игре, достаточно нажать TAB и посмотреть в таблице значение своего пинга, чем он ниже тем конечно лучше.

Читать еще:  Dragon Quest Builders 2 — любовь с первого блока

Как понизить пинг в игре?

Для начала открываем консоль

Можно также создать файл userconfig.cfg в папке valve с игрой и с помощью блокнота добавлять нужные значения

Команды для снижения пинга в игре

cl_cmdbackup — количество пакетов, посылаемых на сервер в секунду. Чем ниже значение — тем ниже пинг, но качество игры может снизится. Оптимальное cl_cmdbackup 2

cl_cmdrate — скорость посылки команд на сервер. Наиболее оптимальное значение для игры по модему — 20-30. Меньше значение меньше пинг

cl_download_ingame — скачивание моделей и лого в игре. Значение 0 — меньше пинг. Если не надо скачивать логотипы то ставим 0, на наших серверах они вообще отключены.

cl_lw — где обрабатывать действия с оружием ( звуки, анимация . ). Рекомендуемое значение 1, будет меньше пинг и не будет задержки со звуками, когда игрок вначале стреляет а потом слышит звук.

cl_resend — Если предыдущий пакет не дошел, то ствим время через которое он будет послан повторно. Оптимальное значение cl_resend 4

cl_updaterate — Скорость обновления сведений об игре. Оптимальное значение cl_updaterate 20

mp_decals — Количество одновременно видимых эффектов. Чтобы меньше лагало лучше ставить 0. Стандартное значение 50

cl_download_ingame — Скачивание файлов прямо в игре. Лучше оставить 1

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

Программы для понижения пинга не только в Half-Life, но и в других играх

Leatrix Latency Fix — программа для комплексного понижения пинга
AFNInternetBooster — ускоритель интернета
FIXPINGER — из названия можно понять. Изначально создавалась для понижения пинга в игре Counter Strike
modemBooster — еще один ускоритель

Настройка скорости Half-Life при игре по модему

Предназначен для достижения желающими поиграться по интернету приемлемых характеристиг пинга.

Когда вы играете в Half-Life, скорость вашего соединения к серверу называют пингом, и этот параметр отражает время, за которое пакет информации успевает достигнуть сервера и вернуться обратно. К примеру когда ваш пакет идет до сервера 200ms а обратно 250, пинг будет 450ms. Чем меньше пинг, тем быстрее связь, и тем лучше ваше время реакции, и соответственно тем легче играть.

Такие игры как Half-Life имеют пинг около 200 на модемах 56k. Если пинг между 200 — 400 , то играть все еще довольно неплохо и даже можно «рулить» на серваке. После 400, как правило играть становится невозможно, потому как все остальные вас постоянно убивают.

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

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

Как понять, на что похож ваш лаг?

Соединитесь с сервером и наберите в консоли bind m «r_netgraph 0», после этого bind n «r_netgraph 1» и нажав N в игре получите график (M его отключит). Это измерение вашей скорости. Когда индикатор красный — потери пакетов огромны, и придется сделать что-то из того, что описано в основных советах. Если индикатор красно-желтый, то скорее всего надо менять провайдера или модем. Если индикатор зеленый, то у вас все в порядке.

Есть приличное количество комманд, которые могут помочь улучшить связь. Прежде всего надо включить консоль, если у вас последняя версия Half-Life, то для этого надо просто запустить ссылку на консоль в Start Menu.

28.8 — 2500
33.6 — 3300
56.6 — 4000
ISDN — 6000
ADSL — 9000
LAN, T1 и т.д. — 10000

Настройка скорости Half-Life при игре по модему

Вступление
Начиная с версии патча 1.0.0.1, Half-Life содержит заново переписанный сетевой код и множество изменений в движке игры, принесших с собой кучу возможнстей по дополнительной настройке.

Настройка игры с командной строки
При запуске Half-Life с командной строки можно указать несколько полезных ключиков. Проще всего это можно сделать, воспользовавшись свойствами ярлыка: кликнув на нем правой кнопкой мыши и выбрав в контекстном (выпадающем) меню пункт «свойства», вы вызовете такое окошко:

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

-32bpp
Этот ключик разрешает использовать в игре 32-х битный цвет. Если у вас четкая видеокарта (и при этом вы используете для игры высокие разрешения), то это должно зарузить ее по самые помидоры. Помните, что 32-х битный цвет активно хавает мощности вашего компьютера, намного больше чем 16-ти битный, поэтому если вы не хотите в конечном счете получить на экране тормозню, то лучше не прописывайте его. Мораль такая — в разрешениях выше 1024х768 играйте только в 16 битах. К владельцам Geforce3 это не относится.

-numericping
Этот ключик позволит вам увидеть реальный пинг (в цифрах) к каждому серверу из списка, вместо этих идиотских точечек в соответсвующем меню «Internet games» или «Lan games».

-nojoy
Отрубает джойстик, ясен пень. Не все только знают, что поддержка джойстика тоже жрет оперативную памать, так что если с джойстик в игре вам не нужен, а памяти не очень много — смело прописывайте этот ключ.
-noipx
Отрубает поддержку протокола IPX и, тем самым, освобождает еще немного памяти.

-heapsize XXXXX
Вместо XXXXX нужно указать колличество памяти (в килобайтах), которое вы отведете для Half-Life. В то время как многие рекомендуют указывать эти размеры примерно от 75 до 100% от всего объема оперативки, я заметил, что Half-Life лучше рапоряжается памятью по собственному усмотрению. Короче, поэкспериментируйте, но если не врубаетесь — не трогайте.

-game XXXXX
Этот ключик служит для запуска вместо обычного Half-Life какого-либо его мода. XXXXX — это имя дериктории, где лежит мод. Например, для запуска Counter-Strike вместо XXXXX напишите cstrike.

+XXXXX
Этот ключик позволяет запускать консольные команды сразу после загрузки игры. Четкая тема, сами представьте сколько можно туда запихать полезностей. Например, прописав +connect 212.122.1.7, игра начнет сразу долбиться на приморский сервак. Подобным образом можно накатать несколько ярлыков, указав в них разные ip-адреса ваших любимых серверов. Еще удобно прописывать использование вашего внешнего индивидуального конфига: +exec myconfig.cfg. Весьма полезный ключик, как видите…

Особенности нового сетевого кода
Одним из самых важных и приятных изменений в новом сетевом коде является независимоть скорости игры (читай FPS’ов, отрендеренных кадров в секунду) от скорости связи. Раньше машина-клиент должна была подтверждать каждый новый прорисованный кадр у сервера. Получалось, что игра по модему тормозила даже на сильных компьютерах. Даже людям сидящим на толстых каналах приходилось туго, ибо не получалось зачастую достичь хорошего качества связи вкупе с хорошими 72 FPS’ами. Видать, пограммерам из Valve здорово пропердолили на работе и те быстренько (хм…) сваяли новый патч. Отныне кол-во FPS’ов и скорость связи полностью не зависят друг от друга! Фанфары. Теперь даже если вы «модемщик», то 100 FPS’ов вам запросто доступно, тянул бы комп.
Хе-хе, это еще не все! В Valve так же поработали и над «компенсацией лагов» при стрельбе, сделав игру по модему почти такой же гладкой, как игру на LAN’е. Эффект очень похож на то, как если бы все действия игроков обсчитывались на стороне клиента с подачи сервера, однако их обсчет полностью берет на себя сервер, что означает полную безопасность! (Сделаю некоторые пояснения от себя: обсчет стрельбы и прочего на стороне клиента дает большой простор для читеров, т.к. взломать сетевой код становится очень просто. Помните несколько лет назад ситуацию с Diablo — сколько было читов? Никто честно не играл на batttle.net, потому что все герои и их передвижения обсчитывались на компах игроков. С выходом старкрафта и Diablo2 ситуация поменялась. — прим. перев.)
Плюс ко всему Valve значительно снизила траффик при сетевой игре, сделав код значительно эффективней. Словом, модемщики теперь могут расчехлить свои кольты с калашами и играть в замесах с меньшим чем раньше лагами. А самое главное — теперь к сетевому коду доступно огромное множество настроек.
Основные принципы работы
Предвижу вопросы — как это тамошним программерам удалось компенсировать лаги, почти уравняв ЛАНщиков и модемщиков? Решение, как все гениальное, просто и элегантно: представьте себе палящего в противника «модемщика» с пингом 200. Сервер отслеживает выстрел и засекает пинг стреляющего игрока (допустим, 200 миллисекунд), затем сервер проверяет где был его противник 200 миллисекунд назад и если он в то время действительно подпал под пулю, то выстрел засчитывается как попадание, иначе — мимо.
Есть, однако, и свои недостатки. Первый и наиболее заметный — это эффект облетающих углы пуль. Понятно, что существует некоторая задержка пока сервер обработает сответсвующие пакеты и поймет что на самом деле вас уже подстрелили, прежде чем вы скрылись за углом. Так что правосудие вас все равно настигнет Иногда это раздражает, но это лучше, чем было раньше. Другой недостаток заключается в том, что когда вы стреляте по кому либо, то реальные попадания проявляются немного позже чем если бы вы играли по локальной сетке. Если враг убил вас прежде чем сервер успел обсчитать ваши выстрелы, то вы проигрываете в любом случае, независимо от того попали вы по врагу или нет (т.е. фактически независимо от того, убили бы вы его до того, как он успел убить вас). В этом смысле люди имеющие меньший пинг все еще обладают некоторыми преимуществами. Стоят ли эти недостатки указанных выше достоинств — решать вам.

Читать еще:  ZOTAC выпустила мини-ПК MAGNUS EN980 с СЖО и поддержкой VR

Сетевые настройки на сервере

sv_unlag X
Эта переменная отвечает за включение/выключение технологии компенсации лагов. Оставьте ее включенной, это поможет нормально играть большинству людей. (см. ниже про клиентские настройки). 1 — включить компенсацию лага (по умолчанию), 0 — выключить.

sv_maxunlag X.XX
Эта переменная отвечает за максимальное время, в течение которого игра пытается скомпенсировать чей-либо пинг. Если поставить значение 1, то это равнозначно 1000 миллисекундам или одной полной секунде. Если поставть 0.4, то это будет соответствовать 400 миллисекундам. Не стоит выставлять значение больше чем 0.55, потому что когда какое-нибудь чудо с большим пингом станет попадать по кому-нибудь, то проявляться это будет настолько позже, что динамика игры спадет на нет. Однако, я не рекомендую задавать значения меньше чем 0.35. По умочанию ставится 0.5, т.е. 500 миллисекунд.

sv_unlagsamples X
Эта пременная определяет, сколько из посланных клиентом пакетов будут обработаны, чтобы найти среднее значение пинга игрока, которое будет скомпенсировано. Значение по улочанию — единица, т.е. для определения пинга игрока обрабатывается только один, самый свежий пакет. При значении 2 пинг усредняется исходя из значений двух последних принятых сервером пакетов и т.д. Лучше всего ставить 1 или 2. По умочанию выставляется 1.

(раздел посвящен настройке вашего конфига config.cfg, хотя значения переменных могут быть изменены и в консоли)
Что ж, сейчас, когда вы уже знаете, как работает сервер компенсируя ваш пинг, можете для себя решить — включать или выключать эту фичу. Благо Valve дает зеленый свет любителям покопаться в настройках конфига.

cl_lc X — эта строчка говорит серверу, желаете вы или нет использовать компенсацию лага. Если компенсация откровенно достала вас своими глюками, можете вырубить ее, поставив вместо икса — ноль. Тогда играйте в соответствии с вашим реальным пингом. По умолчанию значение 1, т.е. включено.

cl_lw X — эта переменная отвечает за возможность проигрывания звуков и анимации со стороны клиента. Если она включена (cl_lw 1), то все звуки и анимация будут проигрываться непосредственно на вашей машине, например, в момент активной пальбы, не дожидаясь соответствующего подтверждения от сервера. В таком подходе есть свои плюсы и минусы.

Если опция выключена (cl_lw 0), то момент, когда вы увидете стреляющий ствол, зависит от вашего пинга, что так же означает что вы увидите палящее орудие одновременно с попаданиями вылетающими из него пуль (и никаких «обруливающих углы» снарядов). Проблема в том, что если включена компенсация лага, то вы не увидите характерных «фонтанчиков» от пуль, часто помогающих подкорректировать прицел. Это может обернуться против вас, особенно с автоматом, имеющем сильный разброс при стрельбе, например, AK-47.
В случае, когда cl_lw включена (cl_lw 1), ваша машина должна сама генерировать случайный разброс и неточность при стрельбе. В результате места попадания пуль, которые вы будете видеть, могут не совпадать с теми, что происходят на сервере, который случайным образом генерирует свою неточность для вашего оружия. Короче, ваша тачка и сервер будут генерировать траектории пуль немного по-разному. В результате вы увидите то, что насчитал ваш компьютер, а на самом деле бдет происходить то, что насчитал сервер. Когда идет сильный разброс пуль(например, долгая очередь из калаша), то вероятность таких несовпадений повышается.
Вобщем совет: если вы пользуетесь компенсацией лага, то включайте (cl_lw 1), а если не пользуетесь — выключайте (cl_lw 0). По умолчанию включено.

cl_lb X — опция, включающая упрежденный показ крови (если на сервере это не запрещено). Когда вы бегаете с оружием, имеющем маленький разброс при стрельбе, можете попробовать включить эту опцию (cl_lb 1). Однако я настоятельно рекомендую оставлять ее отключенной (cl_lb 0) всегда. Отключение позволяет вам точно увидеть попали ли вы в проивника по-настоящему. По умочанию выключено (cl_lb 0).

cl_updaterate XX — эта переменная контролирует число обновлений, запрашиваемых у сервера в течение секунды. Во многом она является аналогом «snaps» в Quake3, только отличается тем, что не обязательно должна быть кратной сорока для оптимальности. По умочанию значение 20.
Сидя на выделенке значение можно ставить 30-40, однако, когда сервер полный, лучше установить cl_updaterate 25 и меньше. Модемщикам показано значение 20, однако на скорости 33600 на полном серваке лучше снизить cl_updaterate до 15. При игре по локалке смело ставьте cl_updaterate 50.
Интересно вот что. «Рывки» при движении игрока трудно заметить, если его cl_updaterate выше 13. Единственная ситуация, когда низкие значения cl_updaterate становятся ощутимыми, когда все вокруг движется очень быстро. Например, ракета летящая вам в дыню…

Оптимизация игры по модему

КС 1.6 Non Steam читы

CS: Настройка: Игра по модему
Published by: root, On: Aug-10-2003

Одной из самых важных и приятных особенностей сетевого кода Half-Life является независимоть скорости игры (читай FPS’ов, отрендеренных кадров в секунду) от скорости связи. Раньше машина-клиент должна была подтверждать каждый новый прорисованный кадр у сервера. Получалось, что игра по модему тормозила даже на сильных компьютерах. Даже людям сидящим на толстых каналах приходилось туго, ибо не получалось зачастую достичь хорошего качества связи вкупе с хорошими 72 FPS’ами. Видать, пограммерам из Valve здорово пропердолили на работе и те быстренько сваяли новый патч. Отныне кол-во FPS’ов и скорость связи полностью не зависят друг от друга! Теперь даже если вы «модемщик», то 100 FPS’ов вам запросто доступно, тянул бы комп.

В Valve так же поработали и над «компенсацией лагов» при стрельбе, сделав игру по модему почти такой же гладкой, как игру на LAN’е. Обсчет результатов стрельбы полностью берет на себя сервер, что означает полную безопасность! (cделаю некоторые пояснения от себя: обсчет стрельбы и прочего на стороне клиента дает большой простор для читеров, т.к. взломать сетевой код становится очень просто. Помните несколько лет назад ситуацию с Diablo — сколько было читов? Никто честно не играл на www.battle.net/, потому что все герои и их передвижения обсчитывались на компах игроков. С выходом старкрафта и Diablo2 ситуация поменялась.) Плюс ко всему Valve значительно снизила траффик при сетевой игре, сделав код значительно эффективней. Словом, модемщики теперь могут расчехлить свои кольты с калашами и играть в замесах с меньшим чем раньше лагами. А самое главное — теперь к сетевому коду доступно огромное множество настроек.

Основные принципы работы

Предвижу вопросы — как это тамошним программерам удалось компенсировать лаги, почти уровняв ланщиков и модемщиков? Решение, как все гениальное, просто и элегантно: представьте себе палящего в противника «модемщика» с пингом 200. Сервер отслеживает выстрел и засекает пинг стреляющего игрока (допустим, 200 миллисекунд), затем сервер проверяет где был его противник 200 миллисекунд назад и если он в то время действительно подпал под пулю, то выстрел засчитывается как попадание, иначе — мимо.

Есть, однако, и свои недостатки. Первый и наиболее заметный — это эффект облетающих углы пуль, когда игрок LAN уже забежал за угол, а для игрока по модему — еще нет и второй убил первого. Понятно, что существует некоторая задержка пока сервер обработает сответсвующие пакеты и поймет что на самом деле вас уже подстрелили, прежде чем вы скрылись за углом. Так что правосудие вас все равно настигнет Иногда это раздражает, но это лучше, чем было раньше. Другой недостаток заключается в том, что когда вы стреляте по кому либо, то реальные попадания проявляются немного позже чем если бы вы играли по локальной сетке. Если враг убил вас прежде чем сервер успел обсчитать ваши выстрелы, то вы проигрываете в любом случае, независимо от того попали вы по врагу или нет (т.е. фактически независимо от того, убили бы вы его до того, как он успел убить вас). В этом смысле люди имеющие меньший пинг все еще обладают некоторыми преимуществами. Стоят ли эти недостатки указанных выше достоинств — решать вам.

Итак, Вы — обладатель обычного Dial-Up модема, желающий поиграть на сервере какого-либо Интернет провайдера. Приступим.

Совет 1. Операционная система.

Фактически, все, к чему Вы стремитесь — это уменьшить ping, чтобы быстро сносить бошки. Так вот, экспериментально выяснено, что скорость передачи и приема данных между игровым сервером и операционной системой у Windows 9x выше, чем у ее последователей, то есть Windows 2000 и XP. Так что если у Вас есть возможность, то для игры надо грузить Windows 95/98, а не красочную и медленную Windows 2000/XP.

Совет 2. Канал связи.

Как было сказано выше, для игры предпочтительнее выбирать Windows 95/98, так как в ней меньше наворотов и пакеты (данные) меньше задерживаются в недрах операционной системы, в следствие чего, быстрее попадают к адресату.

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

Нелишне будет также напомнить Вам, что кроме Half-Life и Cheating-Death, больше во время игры не должно быть запущено ничего. Большинство современных программ умеют работать с Интернетом и будут забивать Вам канал разным хламом. Я думаю, Вы не обрадуетесь, если в самый разгар битвы ICQ отключит Вас от игры и сообщит Вам, что пришло новое сообщение.

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

Читать еще:  Xiaomi подтвердила применение системы жидкостного охлаждения в грядущем Poco F2 Pro

Совет 3. Движок Half-Life.

Предположим, что Вы воспользовались советами 1 и 2, но играть Вы все равно не можете. Перейдем к настройке той части Half-Life, которая отвечает за передачу информации между Вами и игровым сервером. Сразу скажем, что скорее всего с первого раза настроить движок так, чтобы можно было играться Вам не удастся. Для каждой линии здесь нужны свои настройки.

Уменьшение загруженности канала:

Как уже говорилось, во время игры, кроме Cheating Death и самого CS не должно быть запущено больше ничего. Многие программы умеют работать с интернетом и будут вам лишний раз во время игры забивать канал. Сам Counter-Strike тоже умеет работать с интернетом не хуже других. Вот, чем CS умеет испортить до невозможности вам игру:

cl_allowupload 0-1 // Эта команда запрещает (0) или разрешает (1) закачку с Вашей стороны на сервер всякого мусора, типа логов игроков. Если cl_allowupload = 0, то Вы избавите других игроков от сомнительного удовольствия созерцать вашу мазню, а себе не будете забивать канал.
cl_allowdownload 0-1 // Позволяет или запрещает скачивание с сервера логосов (мазни других игроков) и новых карт (если карты, крутящейся на серваке, у вас нет и cl_allowdownload = 0, то вас просто выкинет с него). Модемщикам я бы посоветовал отрубить, т.е. проставить cl_allowdownload в 0. Скачивание логосов затягивает загрузку, а новую карту быстрее слить через web в заархивированном виде и потом самому распаковать.
cl_download_ingame 0-1 // Значение 0 запрещает скачивание вами новых логосов игроков, которые подсоединились на сервер в момент игры. Для модемщиков настоятельно рекомендую запретить (cl_download_ingame 0), иначе попрут лаги. Причем, во включенном состоянии эта хрень продолжит скачивание всякого мусора даже в промежтках между загрузками серваком карт. По умолчанию cl_download_ingame включено.

Настройка ролей клиента и сервера в игре:

Все перечисленные здесь переменные можно прописать в конфиге cstrike/config.cfg, хотя их значения могут быть изменены и в консоли.

cl_lc 0-1 // Эта переменная говорит серверу, желаете ли Вы или нет использовать компенсацию лага. Если компенсация откровенно достала вас своими глюками, можете вырубить ее, поставив ноль. Тогда играйте в соответствии с вашим реальным пингом, но учтите, что если пинга вам не хватит, то вы получите пошаговую стратегию, а не игру в реальном времени. По умолчанию cl_lc = 1, т.е. компенсация лагов — включена.
cl_lw 0-1 // Эта переменная отвечает за возможность проигрывания звуков и анимации со стороны клиента. Если она включена (cl_lw 1), то все звуки и анимация будут проигрываться непосредственно на вашей машине, например, в момент активной пальбы, не дожидаясь соответствующего подтверждения от сервера. В таком подходе есть свои плюсы и минусы.

Если опция выключена (cl_lw 0), то момент, когда вы увидете стреляющий ствол, зависит от вашего пинга, что так же означает что вы увидите палящее орудие одновременно с попаданиями вылетающими из него пуль (и никаких «обруливающих углы» снарядов). Проблема в том, что если включена компенсация лага, то вы не увидите характерных «фонтанчиков» от пуль, часто помогающих подкорректировать прицел. Это может обернуться против вас, особенно с автоматом, имеющем сильный разброс при стрельбе, например, AK-47.
В случае, когда cl_lw включена (cl_lw 1), ваша машина должна сама генерировать случайный разброс и неточность при стрельбе. В результате места попадания пуль, которые вы будете видеть, могут не совпадать с теми, что происходят на сервере, который случайным образом генерирует свою неточность для вашего оружия. Короче, ваша тачка и сервер будут генерировать траектории пуль немного по-разному. В результате вы увидите то, что насчитал ваш компьютер, а на самом деле бдет происходить то, что насчитал сервер. Когда идет сильный разброс пуль(например, долгая очередь из калаша), то вероятность таких несовпадений повышается.

В общем совет: если вы пользуетесь компенсацией лага, то включайте (cl_lw 1), а если не пользуетесь — выключайте (cl_lw 0). По умолчанию включено.
cl_lb 0-1 Включает упрежденный (обсчитанный вами, а не сервером) показ крови (если на сервере это не запрещено). Отключение позволяет вам точно увидеть попали ли вы в противника по-настоящему. По умочанию выключено (cl_lb 0).

Настройка канала и количества передаваемой информации:

cl_updaterate [x] // Эта переменная контролирует число обновлений, запрашиваемых у сервера (позиции игроков, местоположение трупов и дырок от пуль) в течение секунды. По умочанию значение 20. Сидя на выделенке значение можно ставить 30-40, однако, когда сервер полный, лучше установить cl_updaterate 25 и меньше. Модемщикам показано значение 20, однако на скорости 33600 на полном серваке лучше снизить cl_updaterate до 15. При игре по локалке смело ставьте cl_updaterate 50. «Рывки» при движении игрока трудно заметить, если его cl_updaterate выше 13. Единственная ситуация, когда низкие значения cl_updaterate становятся ощутимыми, когда все вокруг движется очень быстро. Например, ракета летящая вам в дыню…
cl_cmdrate [x] // Эта штучка подобна предыдущей cl_updaterate, за тем лишь исключением, что она контролирует число обновлений отсылаемых на сервер в течение секунды. Таким образом разделение потоков позволяет вам контролировать их независимо друг от дурга, в зависимости от того, какой у вас канал связи в каждую сторону. (Исходящий и входящий траффик может проходить с разной скоростью, например, на модемах с протоколом V.90 входящий трафик прокачивается бытсрее, со скоростями до 56 кбит/сек, а исходящий ограничен скоростью соединения 33.6 кбит/сек. Это не единственный пример, подобная ассиметричность распространена весьма широко. — прим. перев.). По умолчанию имеет значение 30.
В связи с тем, что объем исходящего от вас траффика сильно не меняется, в отличие от объема входящего (особенно на полных серверах), то модемщики могут оставить cl_cmdrate равным 18-30. Пользователи с более «толстым» каналом, могут установить ее значение в 40-50. Для игры по локалке подойдет 50.
rate [x] // Указывает, какой объем информации вы сможете прокачать через ваше соединение с сервером в секунду за любое наперед заданое время. Начиная с версии HL 1.1.0.0. эта штука практически не работает, поэтому объем входящих данных рекомендуется ограничивать переменными.
cl_rate [x] // Указывает вашей машине, какой объем данных, ей разрешено передать на сервер в секунду.

Тип модема rate cl_rate cl_updaterate cl_cmdrate
Модем 14.4 Купи-ка, дружок, новый модем.
Модем 28.8 1800-2500 1000-1300 10-15 12-18
Модем 33.6 2500-2900 1200-1800 12-18 18-25
Модем 56k, Одноканальный ISDN 2900-3600 1500-1800 25 30
Двухканальный ISDN 3500-7200 3500 30 40
Кабельный модем, xDSL 3500-7500 30 40
LAN (10/100 Mbps) 7500 и выше 50-100

К сожалению, редко какое соединение стабильно настолько, что имеет одинаковый объем прокачки за одинаковое время. А это означает то, что для нирваны вам придется регулировать значения rate прямо в игре С помощью этой настройки вы получите хорошее представление о характере ваших соединений. Не бойтесь поэкспериментировать, если качетсво вашей связи не вписывается в границы, приведенные в таблице.

Чтобы отыскать нужные вам значения, пользуйте в игре NetGraph (см. ниже). Если значения rate у вас слишком задрано, то возникнут характерные скачки пинга и ошибки потери пакетов. Если слишком низкое, то пакеты тоже могут потеряться — просто не дойдут все из-за rate-ограничений. Но вообще-то лучше ошибиться, слегка занизив rate, чем слишком его задрав. Так что будьте внимательны.

Получение статистики о загруженности канала:

net_graph 1-3 // Выведение графика состояния соединения и качества приема/передачи пакетов.
net_graphwidth 220 // Размер графика состояния соединения.
net_graphpos 0-2 // Позиция графика состояния соединения на экране. 0 — левый нижний угол, 1 — правый нижний угол, 2 — по центру внизу.

Настройка скорости Half-Life при игре по модему

FAQ по техническим вопросам (ЧИТАТЬ перед заданием вопроса ОБЯЗАТЕЛЬНО!)

Q: При каждой загрузке карты, уровня, сохраненки возникает надпись Node Graph Out
of Date.
Q: При загрузке ранее сохраненной игры, появляется надпись A.I. Disabled и все персонажи
стоят столбом.
А: Решений несколько:
1. создаем файл autoexec.cfg в (..hl2cfg)
в нем прописываем ai_norebuildgraph 1
ставим параметр Read Only, сохраняем.

если не работает:

2. Идем в hl2cfg, создаем текстовый файл:

ai_norebuildgraph «1»
ai_disable «0»

Переименовываем его в ai_fix.cfg, сохраняем, ставим параметр Read Only.
Открываем в блокноте valve.rc, приводим его в следующий вид:
// load the base configuration
//exec default.cfg
// Setup custom controller
exec joystick.cfg
// run a user script file if present
exec autoexec.cfg
exec ai_fix.cfg
//
// stuff command line statements
//
stuffcmds
// display the startup level
startupmenu

сохраняем файл.
второе решение автоматизировано в фиксе HalfLife2v1.0AIRebuiledFixEng.zip (несложно
поискать в Google)

3. Если и это не работает:

Лезем в папку mapgraph.
Меняем системную дату на к примеру 01.01.2010.
Открываем по очереди все файлы в этой папке и, не изменяя, сохраняем их.
Меняем системную дату обратно.

Q: Перед входом в лабораторию Илая, девушка встает около открытого лифта и ничего
с этим поделать нельзя.
A: Опять же решений несколько

1. Ставим английскую озвучку (глюк проявляется только в версиях с русской озвучкой)
2. В момент, когда девушка «залипла», делаем быстрое сохранение (F6), затем сразу
быструю загрузку (F9)
3. В момент, когда девушка начинает вещать о «завихрениях», надо прижаться к решетке,
рядом с желтым агрегатом, и не дергаться. Должно помочь.

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

A: Лечится патчем HL2.HUD.FIX-edministrator.rar (в Гугль). Добавляем/перезаписываем
файлы из этого архива в папку bin.

Q: Нет мимики персонажей, кроме G-Man’a в самом начале.
A: Патч lipsync_patch.exe решает проблему.
Руководство по инсталляции:
1. Запустить и распаковать в папку с Half-Life 2. Должна появиться подпапка lipsync_patch

2. Запустить:
— lipsync_patchpatch_en.bat — для исправления английской озвучки
— lipsync_patchpatch_ru.bat — для исправления русской озвучки

Q: Как включить русские субтитры в английской версии?
A: Два способа:
1. В реестре в ветке HKEY_CURRENT_USERSoftwareValveSteam нужно поменять свойства
в ключе «Language» на «russian»
или
2. Введите в консоли команду cc_lang russian.

Ссылка на основную публикацию
Статьи c упоминанием слов:
Adblock
detector