- Статус
- Оффлайн
- Регистрация
- 13 Фев 2026
- Сообщения
- 538
- Реакции
- 14
Здарова, кодеры и те, кто еще пытается переиграть Vanguard на Python. Столкнулся с классической проблемой при написании своего колорбота: когда пытаюсь накрутить скорость наводки, аим начинает вести себя как бешеная собака — постоянные перелеты, дерганья туда-сюда (тот самый Rubberband Aim).
Суть в том, что при низком смуче и высокой скорости захвата лок становится слишком агрессивным. Если таргет смещается хоть немного, аим пролетает мимо, пытается вернуться и получается бесконечный цикл осцилляции.
Сам кусок логики, на котором это все крутится:
Какие есть мысли по фиксу:
Кто уже собаку съел на внутренних колорботах под Валик, подскажите — как вы боретесь с перелетами на высоких скоростях? Использовал кто-нибудь PID-регуляторы или в этом сегменте это оверкилл и хватит обычного lerp?
Жду дельных советов от тех, кто реально сидел в реверсе и дебаге подобных вещей.
Суть в том, что при низком смуче и высокой скорости захвата лок становится слишком агрессивным. Если таргет смещается хоть немного, аим пролетает мимо, пытается вернуться и получается бесконечный цикл осцилляции.
Сам кусок логики, на котором это все крутится:
Код:
def smooth_movement(target_dx, target_dy):
"""
Экспоненциальное сглаживание с джиттером для беспалевности.
MAX_DELTA ограничивает движение за один кадр.
"""
global smoothed_dx, smoothed_dy
jitter_x = random.uniform(-0.1, 0.1)
jitter_y = random.uniform(-0.1, 0.1)
if SMOOTHING_ALPHA == 0:
final_dx = target_dx + jitter_x
final_dy = target_dy + jitter_y
delta = math.hypot(final_dx, final_dy)
if delta > MAX_DELTA:
scale = MAX_DELTA / delta
return int(final_dx * scale), int(final_dy * scale)
return int(final_dx), int(final_dy)
current_alpha = SMOOTHING_ALPHA * random.uniform(0.9, 1.1)
smoothed_dx = current_alpha * (target_dx + jitter_x) + (1 - current_alpha) * smoothed_dx
smoothed_dy = current_alpha * (target_dy + jitter_y) + (1 - current_alpha) * smoothed_dy
if abs(smoothed_dx) < DEADZONE:
smoothed_dx = 0
if abs(smoothed_dy) < DEADZONE:
smoothed_dy = 0
delta = math.hypot(smoothed_dx, smoothed_dy)
if delta > MAX_DELTA:
dynamic_max = MAX_DELTA * random.uniform(0.95, 1.05)
scale = dynamic_max / delta
smoothed_dx *= scale
smoothed_dy *= scale
return int(smoothed_dx), int(smoothed_dy)
Какие есть мысли по фиксу:
- Поиграться с DEADZONE. Если она слишком маленькая, аим будет пытаться корректировать микро-отклонения, что и вызывает дрожь.
- Динамический ALPHA. Смысл в том, чтобы замедлять наводку по мере приближения к центру хитбокса (FOV-based smoothing).
- Ограничение ускорения. Vanguard палит неестественные рывки мыши, так что просто зарезать MAX_DELTA недостаточно, нужно более плавное нарастание.
- Проверить саму логику сглаживания. Сейчас это по сути простая паста экспоненциального фильтра, которая плохо дружит с резкими перемещениями цели.
Кто уже собаку съел на внутренних колорботах под Валик, подскажите — как вы боретесь с перелетами на высоких скоростях? Использовал кто-нибудь PID-регуляторы или в этом сегменте это оверкилл и хватит обычного lerp?
Жду дельных советов от тех, кто реально сидел в реверсе и дебаге подобных вещей.