Actions

Difference between revisions of "SPG:Rolling"

From Sonic Retro

(Top Speed)
m (Top Speed: Minor fix)
Line 45: Line 45:
 
       gsp = 16
 
       gsp = 16
 
   }
 
   }
   if gsp < 16 {
+
   if gsp < -16 {
 
       gsp = -16
 
       gsp = -16
 
   }
 
   }

Revision as of 09:17, 4 September 2020

Notes:

Research applies to all four of the Sega Mega Drive games, and Sonic CD.

Variables

The following variables/constants will be referenced frequently in this section.

//Variables
xsp: the speed in which sonic is moving horizontally
ysp: the speed in which sonic is moving vertically
gsp: the speed in which sonic is moving on the ground	
//Constants
acc: 0.046875
dec: 0.5
frc: 0.046875 (same as acc)
rollfrc: 0.0234375 (half of frc)
rolldec: 0.125

Ground Speed Conversion

gsp is used to calculate xsp and ysp when on the ground. This is further described in The Three Speed Variables.

xsp = gsp*cos(angle);
ysp = gsp*-sin(angle);

Friction

When Sonic rolls into a ball by pressing Down on the directional pad, he can no longer accelerate. No matter how hard or how long you press in the direction of his motion, he'll behave as if you weren't doing a thing. The only thing that happens in this case is friction, which is rollfrc, half Sonic's regular friction (in Sonic 3K, Super Sonic's roll friction is hard-coded to always be half of the regular friction).

Deceleration

However, Sonic can decelerate while rolling. If you hold in the opposite direction of his motion, gsp will be slowed by rolldec each frame. Additionally, unlike normal walking, friction is still in effect while decelerating. So in effect, while decelerating, gsp slows by 0.125+0.0234375 (or 0.1484375) every step.

Similar to the anomaly explained in Running, if absolute gsp is less than 0.1484375, when this value is subtracted, instead of just setting gsp to zero, gsp is set to 0.5 in the opposite direction. Thus, bizarrely, Sonic can turn around while rolling, even though he can't accelerate!

Top Speed

Now, just because Sonic cannot roll faster on his own, doesn't mean that a nice hill wouldn't give him some momentum every now and then. Gaining speed on slopes is covered in Moving At Angles. These hills and slopes can be used to roll at a very high speed. Just as with running though, Sonic has a top speed cap when rolling as well, though this one is much higher than the former, reaching a top speed of 16 pixels per step. Unlike running however, Sonic cannot surpass this speed cap by any means. If his gsp is higher than 16 and tries to go higher, it will automatically be set to 16 again. Interesting enough, it applies only if Sonic is rolling downwards or sideways but not upwards. It can be implemented by using the following formula:

{
  if sign of gsp is equal to sign of sin(angle) exit
  if gsp > 16 {
      gsp = 16
  }
  if gsp < -16 {
      gsp = -16
  }
}

Criteria

In Sonic 1, 2, and 3 Sonic can't roll up unless his absolute X speed is greater than or equal to 0.5.

In Sonic and Knuckles (and Sonic 3 and Knuckles), this value is increased to 1. This is because in said game, Sonic is allowed to duck while his speed is below 1, so he can perform moves such as the Spindash without needing to come to a full stop (very helpful since Sonic could get stuck weirdly sliding on slopes starting with Sonic 3).

Also in Sonic and Knuckles, probably as a way to combat the anomaly associated with turning around while rolling in the previous games, Sonic unrolls if absolute gsp falls below 0.5.

Typically it will not be, but if Sonic's gsp happens to be 0 (can happen in an S Tunnel) when he curls up to roll, his gsp will be set to 2.

Rolling Jump

In Sonic 1, 2, 3, and Knuckles, you can't control Sonic's trajectory through the air with the LeftRight buttons if you jump while rolling. This makes it kind of hard to Spindash to gain speed, and then make a precise jump. Though, in Sonic 3 and in Sonic & Knuckles, you can regain control of the directional keys if you perform a Insta-Shield, or any other jump ability.

However, in Sonic CD and Mania, you can control a jump made while rolling, as if it were a totally normal jump. This is probably more fair to the player.