Actions

Difference between revisions of "SPG:Main Game Loop"

From Sonic Retro

m (More accurate wall collision)
(Simplifying and standardising object & character variables)
Line 20: Line 20:
 
# 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'' ([[SPG:Slope_Physics#Slope_Factor|Slope Factor]]).
+
# Adjust Ground Speed based on current Ground Angle ([[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 Ground Speed based on directional input and apply friction/deceleration.
 
# Check for starting ducking, balancing on ledges, etc.
 
# Check for starting ducking, balancing on ledges, etc.
 
# [[SPG:Solid_Tiles#Wall_Sensors_.28E_and_F.29|Wall sensor collision]] occurs.
 
# [[SPG:Solid_Tiles#Wall_Sensors_.28E_and_F.29|Wall sensor collision]] occurs.
 
## Which sensors are used varies based on the the [[SPG:Solid_Tiles#While_Grounded|sensor activation]].
 
## Which sensors are used varies based on the the [[SPG:Solid_Tiles#While_Grounded|sensor activation]].
## Note: ''This occurs before Sonic's position physically moves, meaning he might not actually be touching the wall yet, the game accounts for this by adding Sonic's xsp and ysp to the sensor's position.
+
## Note: ''This occurs before Sonic's position physically moves, meaning he might not actually be touching the wall yet, the game accounts for this by adding Sonic's X Speed and Y Speed to the sensor's position.
 
# Check for starting a roll.
 
# Check for starting a roll.
 
# Handle camera boundaries (keep Sonic inside the view and kill Sonic if he touches the kill plane).
 
# Handle camera boundaries (keep Sonic inside the view and kill Sonic if he touches the kill plane).
 
# Move Sonic  
 
# Move Sonic  
## Update ''xpos'' and ''ypos'' based on ''xsp'' and ''ysp''.
+
## Update X Position and Y Position based on X Speed and Y Speed.
 
# [[SPG:Solid_Tiles#Floor_Sensors_.28A_and_B.29|Floor sensor collision]] occurs.
 
# [[SPG:Solid_Tiles#Floor_Sensors_.28A_and_B.29|Floor sensor collision]] occurs.
## Update Sonic's angle & position.
+
## Update Sonic's Ground Angle & position.
 
## Adhere to level of terrain or become airborne if none found/too low.
 
## Adhere to level of terrain or become airborne if none found/too low.
# Check for falling when ''gsp'' is too low on walls/ceilings.
+
# Check for falling when Ground Speed is too low on walls/ceilings.
 
</div>
 
</div>
 
<div class="large-4 columns">
 
<div class="large-4 columns">
 
===While Rolling===
 
===While Rolling===
  
# Adjust ''gsp'' based on current ''ang'' ([[SPG:Slope_Physics#Slope_Factor|Rolling Slope Factors]]).
+
# Adjust Ground Speed based on current Ground Angle ([[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 [[SPG:Running#Friction|friction]].
+
# Update Ground Speed based on directional input and apply [[SPG:Running#Friction|friction]].
 
# [[SPG:Solid_Tiles#Wall_Sensors_.28E_and_F.29|Wall sensor collision]] occurs.
 
# [[SPG:Solid_Tiles#Wall_Sensors_.28E_and_F.29|Wall sensor collision]] occurs.
 
## Which sensors are used varies based on the the [[SPG:Solid_Tiles#While_Grounded|sensor activation]].
 
## Which sensors are used varies based on the the [[SPG:Solid_Tiles#While_Grounded|sensor activation]].
## Note: ''This occurs before Sonic's position physically moves, meaning he might not actually be touching the wall yet, the game accounts for this by adding Sonic's xsp and ysp to the sensor's position.  
+
## Note: ''This occurs before Sonic's position physically moves, meaning he might not actually be touching the wall yet, the game accounts for this by adding Sonic's X Speed and Y Speed to the sensor's position.  
 
# Handle camera boundaries (keep Sonic inside the view and kill Sonic if he touches the kill plane).
 
# Handle camera boundaries (keep Sonic inside the view and kill Sonic if he touches the kill plane).
 
# Move Sonic  
 
# Move Sonic  
## Update ''xpos'' and ''ypos'' based on ''xsp'' and ''ysp''.
+
## Update X Position and Y Position based on X Speed and Y Speed.
 
# [[SPG:Solid_Tiles#Floor_Sensors_.28A_and_B.29|Floor sensor collision]] occurs.
 
# [[SPG:Solid_Tiles#Floor_Sensors_.28A_and_B.29|Floor sensor collision]] occurs.
## Update Sonic's angle & position.
+
## Update Sonic's Ground Angle & position.
 
## Adhere to level of terrain or become airborne if none found/too low.
 
## Adhere to level of terrain or become airborne if none found/too low.
# Check for falling when ''gsp'' is too low on walls/ceilings.
+
# Check for falling when Ground Speed is too low on walls/ceilings.
 
</div>
 
</div>
 
<div class="large-4 columns">
 
<div class="large-4 columns">
Line 60: Line 60:
 
# Check for jump button release ([[SPG:Jumping#Jump_Velocity|variable jump velocity]]).
 
# 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.
+
# Update X Speed based on directional input.
 
# Apply [[SPG:Jumping#Air_Drag|air drag]].
 
# Apply [[SPG:Jumping#Air_Drag|air drag]].
 
# Move Sonic  
 
# Move Sonic  
## Update ''xpos'' and ''ypos'' based on ''xsp'' and ''ysp''.
+
## Update X Position and Y Position based on X Speed and Y Speed.
 
# Apply [[SPG:Jumping#Gravity|gravity]].
 
# Apply [[SPG:Jumping#Gravity|gravity]].
## Update ''ysp'' by adding ''grv'' to it.
+
## Update Y Speed by adding ''grv'' to it.
 
## Note: ''this happens after Sonic's position was updated. This is an important detail for ensuring Sonic's jump height is correct.''
 
## Note: ''this happens after Sonic's position was updated. This is an important detail for ensuring Sonic's jump height is correct.''
 
# Check underwater for reduced gravity.
 
# Check underwater for reduced gravity.

Revision as of 11:23, 13 March 2021

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 Ground Speed based on current Ground Angle (Slope Factor).
  4. Check for starting a jump.
  5. Update Ground Speed 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, the game accounts for this by adding Sonic's X Speed and Y Speed to the sensor's position.
  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 X Position and Y Position based on X Speed and Y Speed.
  11. Floor sensor collision occurs.
    1. Update Sonic's Ground Angle & position.
    2. Adhere to level of terrain or become airborne if none found/too low.
  12. Check for falling when Ground Speed is too low on walls/ceilings.

While Rolling

  1. Adjust Ground Speed based on current Ground Angle (Rolling Slope Factors).
  2. Check for starting a jump.
  3. Update Ground Speed 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, the game accounts for this by adding Sonic's X Speed and Y Speed to the sensor's position.
  5. Handle camera boundaries (keep Sonic inside the view and kill Sonic if he touches the kill plane).
  6. Move Sonic
    1. Update X Position and Y Position based on X Speed and Y Speed.
  7. Floor sensor collision occurs.
    1. Update Sonic's Ground Angle & position.
    2. Adhere to level of terrain or become airborne if none found/too low.
  8. Check for falling when Ground Speed 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 X Speed based on directional input.
  4. Apply air drag.
  5. Move Sonic
    1. Update X Position and Y Position based on X Speed and Y Speed.
  6. Apply gravity.
    1. Update Y Speed 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.