Разработчик объяснил, как работает распрыжка в 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

Хинт для программистов: если зарегистрируетесь на соревнования Huawei Cup, то бесплатно получите доступ к онлайн-школе для участников. Можно прокачаться по разным навыкам и выиграть призы в самом соревновании.

Перейти к регистрации