Actions

Difference between revisions of "SPG:Main Game Loop"

From Sonic Retro

(Created game loop page detailing the main order of key events, split from solid tiles for greater focus and easy locating.)
 
(Formatting & readability)
Line 10: Line 10:
  
 
Their main events depend on their current state.
 
Their main events depend on their current state.
 +
 +
Note: ''While the main lists below are in order, the sub lists, though also numbered, are merely descriptive.''
 +
<div class="large-12 columns">
 +
<div class="large-4 columns">
 
===While Normal===
 
===While Normal===
  
 
"Normal" means when Sonic is not airborne or rolling.
 
"Normal" means when Sonic is not airborne or rolling.
  
* '''Check for special animations that prevent control (such as balancing).'''
+
# Check for special animations that prevent control (such as balancing).
* '''Check for starting a spindash.'''
+
# Check for starting a spindash.
* '''Adjust gsp based on current ang. (slope factor)'''
+
# Adjust ''gsp'' based on current ''ang'' ([[SPG:Slope_Physics#Slope_Factor|Slope Factor]]).
* '''Check for starting a jump.'''
+
# Check for starting a jump.
* '''Update gsp based on directional input and apply friction/deceleration.'''
+
# Update ''gsp'' based on directional input and apply friction/deceleration.
* '''Check for starting ducking, balancing on ledges, etc.'''
+
# Check for starting ducking, balancing on ledges, etc.
* '''Wall sensor collision occurs, the contents of which depend on the sensor activation.'''
+
# [[SPG:Solid_Tiles#Wall_Sensors_.28E_and_F.29|Wall sensor collision]] occurs.
** Notice it begins before Sonic physically moves, meaning it will check if the distance to a wall is closer than Sonic's ''xsp'' in a given direction using the wall sensor's extension. If the returned distance by the sensor is less than Sonic's speed, he will collide.
+
## Which sensors are used varies based on the the [[SPG:Solid_Tiles#While_Grounded|sensor activation]].
* '''Check for starting a roll.'''
+
## Note: ''This occurs before Sonic's position physically moves, meaning he might not actually be touching the wall yet. So it will check if the distance to a wall is closer than Sonic's ''xsp'' in a given direction using the wall sensor's extension. If the distance returned by the sensor is less than Sonic's ''xsp'', he will collide.''
* '''Handle camera boundaries (keep Sonic inside the view and kill Sonic if he touches the kill plane).'''
+
# Check for starting a roll.
* '''Move Sonic. (actually updates xpos and ypos based on xsp and ysp)'''
+
# Handle camera boundaries (keep Sonic inside the view and kill Sonic if he touches the kill plane).
* '''Floor sensor collision occurs.'''
+
# Move Sonic
** Update Sonic's angle & position.
+
## Update ''xpos'' and ''ypos'' based on ''xsp'' and ''ysp''.
** Adhere to level of terrain or become airborne if none found/too low.
+
# [[SPG:Solid_Tiles#Floor_Sensors_.28A_and_B.29|Floor sensor collision]] occurs.
* '''Check for falling when gsp is too low on walls/ceilings.'''
+
## Update Sonic's angle & position.
 
+
## Adhere to level of terrain or become airborne if none found/too low.
 +
# Check for falling when ''gsp'' is too low on walls/ceilings.
 +
</div>
 +
<div class="large-4 columns">
 
===While Rolling===
 
===While Rolling===
  
* '''Adjust gsp based on current ang. (rolling slope factors)'''
+
# Adjust ''gsp'' based on current ''ang'' ([[SPG:Slope_Physics#Slope_Factor|Rolling Slope Factors]]).
* '''Check for starting a jump.'''
+
# Check for starting a jump.
* '''Update gsp based on directional input and apply friction.'''
+
# Update ''gsp'' based on directional input and apply [[SPG:Running#Friction|friction]].
* '''Wall sensor collision occurs.'''
+
# [[SPG:Solid_Tiles#Wall_Sensors_.28E_and_F.29|Wall sensor collision]] occurs.
* '''Handle camera boundaries (keep Sonic inside the view and kill Sonic if he touches the kill plane).'''
+
## Which sensors are used varies based on the the [[SPG:Solid_Tiles#While_Grounded|sensor activation]].
* '''Move Sonic. (actually updates xpos and ypos based on xsp and ysp)'''
+
## Note: ''This occurs before Sonic's position physically moves, meaning he might not actually be touching the wall yet. So it will check if the distance to a wall is closer than Sonic's ''xsp'' in a given direction using the wall sensor's extension. If the distance returned  by the sensor is less than Sonic's ''xsp'', he will collide.''
* '''Floor sensor collision occurs.'''
+
# Handle camera boundaries (keep Sonic inside the view and kill Sonic if he touches the kill plane).
** Update Sonic's angle & position.
+
# Move Sonic
** Adhere to level of terrain or become airborne if none found/too low.
+
## Update ''xpos'' and ''ypos'' based on ''xsp'' and ''ysp''.
* '''Check for falling when gsp is too low on walls/ceilings.'''
+
# [[SPG:Solid_Tiles#Floor_Sensors_.28A_and_B.29|Floor sensor collision]] occurs.
 
+
## Update Sonic's angle & position.
 +
## Adhere to level of terrain or become airborne if none found/too low.
 +
# Check for falling when ''gsp'' is too low on walls/ceilings.
 +
</div>
 +
<div class="large-4 columns">
 
===While Airborne===
 
===While Airborne===
  
 
"Airborne" means when Sonic is falling or jumping or otherwise not grounded.
 
"Airborne" means when Sonic is falling or jumping or otherwise not grounded.
  
* '''Check for jump button release i.e. jump resist.'''
+
# Check for jump button release ([[SPG:Jumping#Jump_Velocity|variable jump velocity]]).
* '''Check for turning Super.'''
+
# Check for turning Super.
* '''Update xsp based on directional input and apply air drag.'''
+
# Update ''xsp'' based on directional input.
* '''Move Sonic. (actually updates xpos and ypos based on xsp and ysp)'''
+
# Apply [[SPG:Jumping#Air_Drag|air drag]].
* '''Update ysp by adding gravity to it.'''
+
# Move Sonic
** Notice it happens after Sonic's position was updated.
+
## Update ''xpos'' and ''ypos'' based on ''xsp'' and ''ysp''.
* '''Check underwater for reduced gravity.'''
+
# Apply [[SPG:Jumping#Gravity|gravity]].
* '''Rotate angle back to 0.'''
+
## Update ''ysp'' by adding ''grv'' to it.
* '''Collision checks occurs here the contents of which depend on the sensor activation'''
+
## Note: ''this happens after Sonic's position was updated. This is an important detail for ensuring Sonic's jump height is correct.''
** Wall collision occurs first.
+
# Check underwater for reduced gravity.
 +
# Rotate angle [[SPG:Slope_Physics#Air_Rotation|back to 0]].
 +
# All collision checks occurs here.
 +
## The sensors used depend on the [[SPG:Solid_Tiles#While_Airborne|sensor activation]].
 +
## Wall collision occurs first.
 +
</div>
 +
</div>
  
 
After this, the special objects are executed.
 
After this, the special objects are executed.
Line 66: Line 83:
  
 
==General Objects==
 
==General Objects==
After characters, all other game objects run their code.
 
  
As stated in [[SPG:Game_Objects|Game Objects]], solid objects push sonic out rather than sonic himself detecting them, so that occurs here.
+
Object movement and collision occurs here.
 +
Player collision with objects happens here too. As stated in [[SPG:Game_Objects|Game Objects]], solid objects push Sonic out rather than Sonic himself detecting them.
 +
Every object is different and execute their code in various orders.
  
  
 
[[Category:Sonic Physics Guide]]
 
[[Category:Sonic Physics Guide]]

Revision as of 08:33, 14 December 2020

Notes:

Introduction

In order to gain a full picture of how Sonic games work, as well as knowing what physically happens the order of events is just as important.

Characters

Characters are the first objects to run their code.

Their main events depend on their current state.

Note: While the main lists below are in order, the sub lists, though also numbered, are merely descriptive.

While Normal

"Normal" means when Sonic is not airborne or rolling.

  1. Check for special animations that prevent control (such as balancing).
  2. Check for starting a spindash.
  3. Adjust gsp based on current ang (Slope Factor).
  4. Check for starting a jump.
  5. Update gsp based on directional input and apply friction/deceleration.
  6. Check for starting ducking, balancing on ledges, etc.
  7. Wall sensor collision occurs.
    1. Which sensors are used varies based on the the sensor activation.
    2. Note: This occurs before Sonic's position physically moves, meaning he might not actually be touching the wall yet. So it will check if the distance to a wall is closer than Sonic's xsp in a given direction using the wall sensor's extension. If the distance returned by the sensor is less than Sonic's xsp, he will collide.
  8. Check for starting a roll.
  9. Handle camera boundaries (keep Sonic inside the view and kill Sonic if he touches the kill plane).
  10. Move Sonic
    1. Update xpos and ypos based on xsp and ysp.
  11. Floor sensor collision occurs.
    1. Update Sonic's angle & position.
    2. Adhere to level of terrain or become airborne if none found/too low.
  12. Check for falling when gsp is too low on walls/ceilings.

While Rolling

  1. Adjust gsp based on current ang (Rolling Slope Factors).
  2. Check for starting a jump.
  3. Update gsp based on directional input and apply friction.
  4. Wall sensor collision occurs.
    1. Which sensors are used varies based on the the sensor activation.
    2. Note: This occurs before Sonic's position physically moves, meaning he might not actually be touching the wall yet. So it will check if the distance to a wall is closer than Sonic's xsp in a given direction using the wall sensor's extension. If the distance returned by the sensor is less than Sonic's xsp, he will collide.
  5. Handle camera boundaries (keep Sonic inside the view and kill Sonic if he touches the kill plane).
  6. Move Sonic
    1. Update xpos and ypos based on xsp and ysp.
  7. Floor sensor collision occurs.
    1. Update Sonic's angle & position.
    2. Adhere to level of terrain or become airborne if none found/too low.
  8. Check for falling when gsp is too low on walls/ceilings.

While Airborne

"Airborne" means when Sonic is falling or jumping or otherwise not grounded.

  1. Check for jump button release (variable jump velocity).
  2. Check for turning Super.
  3. Update xsp based on directional input.
  4. Apply air drag.
  5. Move Sonic
    1. Update xpos and ypos based on xsp and ysp.
  6. Apply gravity.
    1. Update ysp by adding grv to it.
    2. Note: this happens after Sonic's position was updated. This is an important detail for ensuring Sonic's jump height is correct.
  7. Check underwater for reduced gravity.
  8. Rotate angle back to 0.
  9. All collision checks occurs here.
    1. The sensors used depend on the sensor activation.
    2. Wall collision occurs first.

After this, the special objects are executed.

Special objects

Next, objects executed are those which setup certain special events, like title cards.

After this, general objects are executed.

General Objects

Object movement and collision occurs here. Player collision with objects happens here too. As stated in Game Objects, solid objects push Sonic out rather than Sonic himself detecting them. Every object is different and execute their code in various orders.