Оригинальную физику первой Grand Theft Auto запустили в браузере спустя тридцать лет

В конце августа 1996 года Пат Керр сидел перед домашним компьютером Atari ST и набивал строки на GFA BASIC. Он пытался заставить плоский двухмерный прямоугольник на экране срываться в занос так, чтобы движение ощущалось тяжелым и аналоговым. Получившийся тогда прототип позже переписали на чистом Си и зашили в фундамент первой части Grand Theft Auto. К круглой дате — тридцатилетию той самой первоначальной идеи — автор пересобрал математику своей юности на JavaScript. Проект назвали Motion Lab, обернули в аккуратный графический ремастер и выкатили прямо в веб.
В этой веб-песочнице нет логотипов Rockstar Games или Take-Two Interactive: проект существует совершенно независимо и не претендует на официальную связь с современной франшизой. Это чистая лабораторная работа инженера, решившего показать изнанку культовой механики в открытом доступе. Любой желающий может открыть вкладку и лично разобрать поведение классического транспорта на составляющие векторы.
Архитектура под капотом
Технически симулятор разбит на три изолированных слоя. Браузерные события считывают пользовательский ввод, математическое ядро рассчитывает кадры с фиксированным временным шагом, а графический слой сбрасывает результат на стандартный HTML5 Canvas. Никаких тяжелых сторонних фреймворков здесь нет.
Главная ценность оригинальной разработки Керра заключалась в отказе от банальной точечной механики. Большинство аркад середины девяностых обсчитывали движение объектов как материальных точек по базовой формуле второго закона Ньютона, игнорируя габариты. Керр же реализовал полноценную динамику твердого тела в плоскости. Его модель непрерывно оперирует набором физических параметров:
- Координаты положения в пространстве и линейная скорость;
- Угол ориентации корпуса и угловая скорость вращения;
- Вращающий крутящий момент и центробежные силы, действующие на массу при маневрах.
Благодаря такой схеме кузов корректно реагирует на вращение вокруг собственного центра масс. Автомобиль перестал быть послушной стрелкой на экране и превратился в инертный брусок металла.
Формула скольжения и режимы симулятора
Самая узнаваемая часть физики GTA — фирменное поведение колес при поворотах. В Motion Lab Керр сохранил приближенную формулу контакта с полотном. Вектор скорости в точке опоры каждой из четырех шин раскладывается на две составляющие: продольную по направлению вращения колеса и поперечную. Система задает минимальное сопротивление качению вперед, но создает мощное сопротивление любому боковому смещению. Передние колеса поворачиваются и задают вектор тяги. Когда игрок зажимает ручной тормоз, сопротивление качению на задней оси мгновенно подскакивает, а боковой зацеп резко падает. Корпус тут же срывается в контролируемый занос.
В интерактивном интерфейсе заложено три режима поведения, которые можно переключать кнопками на панели или цифрами на клавиатуре:
- Car (клавиша 1): стандартная машина с четырьмя контактными точками шин, рулением передней оси и симуляцией ручника;
- Ship (клавиша 2): упрощенная система реактивной тяги, напрямую вдохновленная классической космической аркадой Thrust 1986 года;
- Brick (клавиша 3): элементарное твердое тело без колес и двигателей, которое можно свободно хватать и швырять курсором.
Камера, столкновения и окружение
Управлять симуляцией можно с клавиатуры десктопа или через сенсорные касания на экранах смартфонов. Пространство холста настраивается на лету. Нажатие клавиши B активирует или убирает физические барьеры по краям экрана. Механика обработки ударов здесь тоже честная: если объект на полной скорости врезается в стену, симулятор возвращает его обратно в допустимые границы и прикладывает мгновенный контактный импульс. При этом учитывается плечо рычага — точка удара относительно центра тяжести определяет, с какой силой и в какую сторону закрутит корпус после столкновения.
Клавиша G включает постоянную вертикальную гравитацию. В режиме автомобиля она малополезна, зато мгновенно меняет правила игры для ракеты Ship и кирпича Brick, заставляя бороться с постоянным падением вниз. Работу виртуального оператора тоже воссоздали по канонам 1996 года. Кнопка Z включает мертвую зону камеры, добавляя легкую задержку слежения при маневрах. Кнопка X активирует динамическое масштабирование: стоило набрать скорость на длинном прямом отрезке, как виртуальная камера отдалялась от земли, открывая вид на дорогу впереди.
Для тех, кто сегодня строит процедурную анимацию, пишет физику для моушн-роликов или настраивает микровзаимодействия в вебе, этот проект работает как отрезвляющее напоминание. Чтобы заставить двухмерную плашку двигаться сочно и кинематографично, не обязательно подключать массивные пакеты симуляции на сотни мегабайт. Порой достаточно аккуратно разложить вектор колеса на две оси и правильно рассчитать силу трения.


