QW physics user commands ru

Физика QW. Команды пользователя.

При помощи команд +forward +back +moveleft +moveright +moveup +movedown +speed игрок задаёт значения forwardmove, sidemove, upmove.

Они определяются переменными cl_sidespeed, cl_forwardspeed, cl_backspeed, cl_upspeed

Также команда +speed увеличивает их обычно в 2 раза. (определяется значением cl_movespeedkey).

Если активны 2 противоположные команды (например, +forward и +back), то они вычитаются друг из друга

Значения forwardmove, sidemove, upmove передаются на сервер, а также используется в клиенте для предсказания движения.

Код обработки движений игроков на сервере и на клиенте должен быть одинаковым.

У меня cl_forwardspeed 400 (ezquake default), а также при старте клиента выполняется строка +mlook;wait;+speed;wait;

Поэтому при нажатии +forward forwardmove = 2 * 400 = 800.

Для передачи данных значения forwardmove, sidemove, upmove специальным образом кодируются в функции MakeChar и поэтому forwardmove = 800 превращается в 508 в PM_PlayerMove.

Не повезло hwguy и scout из TF c его автоматически выставляемой cl_forwardspeed = 230 и cl_forwardspeed = 450 соответственно. Она превращается в реальные 228 и 448. Поэтому можно порекомендовать добавить в hwguy.cfg и scout.cfg строки

cl_forwardspeed 500 cl_backspeed 500 cl_sidespeed 500

Тогда они будут бегать со своей законной скоростью 230 и 450 соответственно (будет срабатывать ограничение сервера).

Кстати cl_movespeedkey в TF зачем то выставляется принудительно в 1 после смерти.

Движение рассчитывается в функции PM_PlayerMove.

Движение в воздухе рассмотрено здесь: