Subtick的移动判定办法以及如何变成CSGO的手感
本专栏的参考是两个在10月4日与10月5日的reddit的帖子:1) r/GlobalOffensive/comments/17042c8/why_movement_in_cs2_might_feel
本专栏的参考是两个在10月4日与10月5日的reddit的帖子:
1) r/GlobalOffensive/comments/17042c8/why_movement_in_cs2_might_feel_different_for_you/
2) r/GlobalOffensive/comments/170nzzj/analysis_of_movement_in_cs2_subtick_and_more/
在这里关联两个视频,一个是Fiveso很早前就做了的(我也翻译了的),另一个是帖1对应的视频。贴1人是Faceit 10级+kz玩家。本专栏以概括帖子2为主,并把帖子1的玩家提出来的解决方案放在文章最后。帖子2是基于帖子1的想法给出的实验证明贴。
两个关联的视频:
Fiveso的熟肉:
https://www.bilibili.com/video/BV1HX4y1i7iG/
10级玩家的视频:
https://www.youtube.com/watch?v=-El_3dibyu0
相关内容概括:
subtick目前的机制是1/64秒完成一次传输。所以是64tick。但是CS2会记录你按下操作的准确时间点,然后相应地计算到达下一个tick时的初速度。在两个tick之间你不会动。大概一个被subtick记录的移动指令像下面这个样子。你可以看到它被视为"subtick_moves"。
subtick_moves
{
button: 8
pressed: true
when: 0.0173373781
}
subtick里你按下后的初速度是变动的,根据你具体按下时间而定的;而CSGO 64tick在下一个tick到来时,结算的初速度值永远是21.484375u/s(作为参考,人物模型高度为72u)。计算的该速度值的办法如下:
Calculating 5.5 * (1 / 64) * 250 * 1 gives a value of 21.484375.
帖1给出了去除subtick影响的移动办法(de-subtick)。那就是使用alias指令。V社之前想过要抹除alias并且不允许多个动作被绑定到同一个键位上(多重动作效果与alias相同),但是在玩家们都反对的结果下又允许搞alias和多重动作了。使用alias会使下一个tick结算时速度为21.484375u/s。请注意,由于subtick本质上还是使用的64tick,你的旋转加速(strafing)是与64tick一致的,这跟128tick会有区别。
移除subtick影响的初速度问题办法如下。这也只是其中一种办法。bhop玩家里也有人提出过+jump的初速不同的解决办法,那就是把跳跃绑定为两个连续的操作"+jump;-jump"。
帖子2通过改变服务器timescale来进行验证。如果你使用alias来改变wasd的移动的话,首个移动tick的速度顶峰永远会是前面说的21.x的速度值。
其中这里面的数字对应的是
sv_accelerate = 5.5
tickrate = 64
maxspeed (持刀最高移速) = 250
friction (阻力值)= 1
alias "_checkw" "-forward; alias checkw"
alias "+w" "+forward; alias checkw _checkw"
alias "-w" "checkw"
bind "w" "+w"
alias "_checks" "-back; alias checks"
alias "+s" "+back; alias checks _checks"
alias "-s" "checks"
bind "s" "+s"
alias "_checka" "-left; alias checka"
alias "+a" "+left; alias checka _checka"
alias "-a" "checka"
bind "a" "+a"
alias "_checkd" "-right; alias checkd"
alias "+d" "+right; alias checkd _checkd"
alias "-d" "checkd"
bind "d" "+d"
alias "_checkcrouch" "-duck; alias checkcrouch"
alias "+crouch" "+duck; alias checkcrouch _checkcrouch"
alias "-crouch" "checkcrouch"
bind "ctrl" "+crouch"
alias "_checkwalk" "-sprint; alias checkwalk"
alias "+walk" "+sprint; alias checkwalk _checkwalk"
alias "-walk" "checkwalk"
bind "shift" "+walk"
host_writeconfig