Написать пост

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

Аватарка пользователя Булат Яббаров

Как оказалось, для этого в движке игры используется всего две функции, отвечающие за вычисление скорости в воздухе и на земле.

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

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

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

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

			# 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 также стала известна распрыжками.

Превью видео v3zT3Z5apaM

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

Следите за новыми постами
Следите за новыми постами по любимым темам
4К открытий4К показов