
Продолжение цикла статей о физике в играх про Соника.
Примечание:
Обзор затрагивает все четыре части игры на Genesis/Mega Drive и Sonic CD.
Все написанное ниже относится к ситуации, когда Соник находится на плоской сухой поверхности, не имея специальных бонусов. Кривые, физика поведения в воде, бонусы Super Sonic и Speed Shoes будут рассмотрены в отдельных статьях. Под шагами в статье понимаются программные циклы, а не шаги персонажа.
Переменные
В этой части будут часто использоваться следующие переменные и константы:
//переменные
Xsp: скорость горизонтального перемещения Соника
Ysp: скорость вертикального перемещения Соника
//константы
acc: 0.046875
dec: 0.5
frc: 0.046875 (равна acc)
top: 6
Принципы перемещения
Гифка на тему (4,7МБ)

Ускорение
При нажатии и удерживании кнопки


Замедление
Если Соник уже движется, а не стоит при нажатии


Можно подумать, что при Xsp = 0.1 после нажатия




Сила трения
Если вы не нажимаете


Максимальная скорость
Соник может ускоряться только до определенного предела. В какой-то момент он достигает максимальной скорости и больше не может ускоряться собственными силами. После прибавления acc к Xsp компьютер проверяет, не превышает ли Xsp значение top. Если превышает, то ему присваивается значение top.
Это означает, что если Соник каким-то образом приобрел более высокую скорость, которую он не может достичь сам (например, он достиг ее, оттолкнувшись от пружины), то при нажатии кнопки в направлении его движения компьютер прибавляет acc, замечает, что Xsp превышает top, и приравнивает Xsp к top. Таким образом, можно снизить импульс, нажав кнопку направления движения. Это недоработка! Устранить ее при разработке движка можно, проверяя, меньше ли Xsp, чем top перед прибавлением acc. Только если Xsp меньше top компьютер должен прибавлять acc и проверять, не больше ли Xsp значения top. Проблема решена.
На самом деле, в Sonic CD используется похожий фикс, потому что Соник может выполнить быстрый рывок (Super Peel Out) (который называется Dash в японской версии игры), который толкает его вперед со скоростью 12 пикселей за шаг. В обычных условиях Соник не может так ускориться, но если он достигает этой скорости с помощью рывка, то может продолжить бежать с ней пока игрок нажимает кнопку в направлении его движения. При отпускании кнопки свою работу делает сила трения. При повторном нажатии сила трения перестает действовать, а Xsp останется постоянной, но она не сможет подняться до 12 без нового рывка.
Программисты Sonic CD не стали применять этот фикс для ситуации, когда Соник находится в воздухе, поэтому если он использует рывок, а затем падает с уступа при зажатой кнопке в направлении его движения, то при отрыве от земли Xsp может снизиться до 6, вне зависимости от того, насколько высокой была в это время скорость. Это тоже большая недоработка.
Вот псевдокод, точно эмулирующий движение и силу трения:
if (игрок нажимает кнопку "Влево") {
if (xsp > 0)
{
xsp -= dec;
}
else (if xsp > -top)
{
xsp = xsp-acc;
}
} else if (игрок нажимает кнопку "Вправо") {
if (xsp < 0)
{
xsp += dec;
}
else if (xsp < top)
{
xsp = xsp+acc;
}
} else xsp = xsp-minimum(absolute(xsp), frc)*sign(xsp);
Принципы анимации
Анимация бега
Если учитывать Sonic CD, то Соник имеет три разные анимации бега. Он изображается стоящим, только если Xsp равна нулю. Если он имеет любую другую Xsp, то переходит в анимацию ходьбы, в которой смена кадров зависит от скорости перемещения по земле.
Как только Xsp становится равной (или большей) 6, он переходит в анимацию бега с «крутящимися» ногами. Когда Xsp равна или превышает 10, он переходит в анимацию рывка с движением ног в виде «восьмерки». Анимация рывка есть только Sonic CD.

Ходьба

Бег

Рывок
Анимация торможения
Соник переходит в анимацию торможения при повороте, только если абсолютное значение Xsp равно или больше 4.5. В Sonic 1 и Sonic CD он остается в режиме анимации торможения, пока Xsp не достигнет нуля или не изменит знак. В остальных трех играх Соник возвращается в режим анимации ходьбы после завершения воспроизведения всех кадров анимации торможения.

Торможение
Различия в физике разных персонажей
Все персонажи — Соник, Тейлс и Наклз (Sonic, Tails и Knuckles) — имеют одинаковые значения ускорения, замедления, максимальной скорости, бега и торможения. Они обрабатываются одинаково, за исключением их специальных движений и спрайтов (и того раздражающего факта, что Наклз прыгает ниже, чем двое других).