Разработчик объяснил, как работает распрыжка в Quake на уровне исходного кода

На YouTube-канале Matt’s Ramblings появилось свежее видео с разбором исходного кода оригинальной Quake. В нём автор ролика рассказал о том, как работают самые известные «баги» игры, в том числе и легендарная распрыжка, на уровне исходного кода.

Сама игра написана языке Си. Но для удобства большинства своих зрителей, в видео используется объяснение на примере псевдопитона.

В момент, когда игрок находится на земле, скорость его перемещения вычисляется при помощи функции:

# Taken from SV_Accelerate() in sv_user.c
def update_vel_ground(wishdir: Vec3, vel: Vec3, frame_time: float) -> Vec3:
vel = friction(vel, frame_time)

current_speed = dot(vel, wishdir)
add_speed = clip(MAX_SPEED — current_speed, 0, MAX_ACCEL * frame_time)

return vel + add_speed * wishdir

Что же касательно вычисления скорости в момент нахождения в воздухе, то за это отвечает другая функция:

# Taken from SV_AirAccelerate() in sv_user.c
def update_vel_air(wishdir: Vec3, vel: Vec3, frame_time: float) -> Vec3:
current_speed = dot(vel, wishdir)
add_speed = clip(MAX_AIR_SPEED — current_speed, 0, MAX_ACCEL * frame_time)

return vel + add_speed * wishdir

На основе этой базы строятся такие «фишки» серии Quake как распрыжка, wall running и зигзагинг. При этом, стоит отметить, что в дальнейшем все эти движения стали частью и других серий. Так, благодаря использованию одной из версий id Tech в качестве основы для движка Half-Life, чуть позже Counter-Strike также стала известна распрыжками.

Источник: Matt’s Ramblings

Источник: tproger.ru

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
murbus
Добавить комментарий