На 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
Источник: