Actions

Difference between revisions of "SPG:Ring Loss"

From Sonic Retro

(Ring Distribution: Improved example code)
m (Ring Distribution)
(One intermediate revision by the same user not shown)
Line 1: Line 1:
 +
{{SPGPages}}
 +
'''Notes:'''
 +
*''The research applies to all four of the [[Sega Mega Drive]] games and [[Sonic CD]].''
 +
 
==Ring Limit==
 
==Ring Limit==
  
Line 16: Line 20:
 
  while ring_counter < number of rings (max 32)
 
  while ring_counter < number of rings (max 32)
 
  {
 
  {
 +
    // create the ring
 
     create a bouncing ring object at the Player's X and Y Position
 
     create a bouncing ring object at the Player's X and Y Position
     ring's X Speed = cosine(ring_angle)*speed
+
     ring's X Speed = cosine(ring_angle) * speed
     ring's Y Speed = -sine(ring_angle)*speed
+
     ring's Y Speed = -sine(ring_angle) * speed
 
      
 
      
     // ever other ring will be at the same angle as the previous, but the other side of the ring
+
     // ever ring created will moving be at the same angle as the other in the current pair, but flipped the other side of the circle
 
     if flip == true
 
     if flip == true
 
     {
 
     {
Line 28: Line 33:
 
      
 
      
 
     // toggle flip
 
     // toggle flip
     flip = !flip  // if n is false, n becomes true and vice versa
+
     flip = !flip  // if flip is false, flip becomes true and vice versa
 
      
 
      
 
     // increment counter
 
     // increment counter

Revision as of 15:14, 31 July 2021

Sonic Physics Guide
Collision
Physics
Gameplay
Presentation
Special

Notes:

Ring Limit

When Sonic gets hit, the number of rings he is carrying scatter away, unless he is carrying more than 32, in which case any rings over 32 are ignored. Sonic is therefore no safer carrying 100 rings than 32.

Ring Distribution

The rings that scatter away from Sonic are distributed in a specific pattern of 2 concentric circles, each containing a maximum of 16 rings. The rings in the first circle move outward faster than the rings in the second. Here is a formula for creating the rings, which can be converted into the programming language of your choice:


let ring_counter = 0
let ring_angle = 101.25° (184) ($B8)  // assuming 0=right, 90=up, 180=left, 270=down
let flip = false
let speed = 4
 
// perform loop while the ring counter is less than number of lost rings
while ring_counter < number of rings (max 32)
{
    // create the ring
    create a bouncing ring object at the Player's X and Y Position
    ring's X Speed = cosine(ring_angle) * speed
    ring's Y Speed = -sine(ring_angle) * speed
    
    // ever ring created will moving be at the same angle as the other in the current pair, but flipped the other side of the circle
    if flip == true
    {
        ring's X Speed = ring's X Speed * -1  // reverse ring's x speed
        ring_angle += 22.5° (240) ($F0)  // we increment angle on every other ring which makes 2 even rings either side
    }
    
    // toggle flip
    flip = !flip  // if flip is false, flip becomes true and vice versa
    
    // increment counter
    ring_counter += 1
    
    // if we are halfway, start second "circle" of rings with lower speed
    if ring_counter == 16
    {
        speed = 2
        ring_angle = 101.25° (184) ($B8)  // reset the angle
    }
}

So, the first 16 rings move at a velocity of 4 pixels per step, and the second 16 move at half that rate, or 2 pixels per step.

Regathering Rings

64 steps must have passed since Sonic was hit before he can regather any rings, scattered or otherwise.

Invulnerability

Sonic remains invulnerable for a short time after being hit. This invulnerability lasts while Sonic is flying back from the blow, and then 120 steps more after he recovers movement. During those 120 steps, he flashes on and off, spending 4 steps on and 4 steps off.

While in this state, Sonic can not collect level rings until less than 90 invulnerability steps remain.

Ring Depth

All rings, scattered or fixed, have a higher depth than Sonic, i.e. behind him. But they have a lower depth, i.e. in front of him, when they turn into sparkles.