Actions

Difference between revisions of "Sonic Physics Guide"

From Sonic Retro

m (Physics: Order)
(Slight formatting improvements, reference to item monitor solidity section)
Line 6: Line 6:
  
 
== Physics Guides ==
 
== Physics Guides ==
'''[[SPG:Basics|Basics]]'''
+
===General===
:A prerequisite for much of the info on this guide, including common variables, how angles work, how object sizes are displayed, and more.
+
'''[[SPG:Basics|Basics]]'''<br>
 +
A prerequisite for much of the info on this guide, including common variables, how angles work, how object sizes are displayed, and more.
 
:*[[SPG:Basics#Positions|''Positions And Speeds'']]
 
:*[[SPG:Basics#Positions|''Positions And Speeds'']]
 
:*[[SPG:Basics#Angles|''Angles'']]
 
:*[[SPG:Basics#Angles|''Angles'']]
 
:*[[SPG:Basics#Variables|''Variables'']]
 
:*[[SPG:Basics#Variables|''Variables'']]
  
'''[[SPG:Calculations|Calculations]]''' (Technical)
+
'''[[SPG:Calculations|Calculations]]''' (Technical)<br>
:A detailed explanation of how values like speeds, positions, and angles are stored and calculated in the original games. While it is not necessary to emulate these things to create an extremely accurate recreation, it can be useful to know for absolute pinpoint accuracy.
+
A detailed explanation of how values like speeds, positions, and angles are stored and calculated in the original games. While it is not necessary to emulate these things to create an extremely accurate recreation, it can be useful to know for absolute pinpoint accuracy.
 
:*[[SPG:Calculations#Pixel and Subpixel|''Pixel and Subpixel'']]
 
:*[[SPG:Calculations#Pixel and Subpixel|''Pixel and Subpixel'']]
 
:*[[SPG:Calculations#Hex Angles|''Hex Angles'']]
 
:*[[SPG:Calculations#Hex Angles|''Hex Angles'']]
  
'''[[SPG:Characters|Characters]]'''
+
'''[[SPG:Characters|Characters]]'''<br>
:Information about specific characters and their constants, variables, sizes, and jump height.
+
Information about specific characters and their constants, variables, sizes, and jump height.
 
:*[[SPG:Characters#Sonic|''Sonic'']]
 
:*[[SPG:Characters#Sonic|''Sonic'']]
 
:*[[SPG:Characters#Tails|''Tails'']]
 
:*[[SPG:Characters#Tails|''Tails'']]
 
:*[[SPG:Characters#Knuckles|''Knuckles'']]
 
:*[[SPG:Characters#Knuckles|''Knuckles'']]
  
<div class="large-3 columns">
+
<div class="large-3 columns" style="margin: 0px; padding: 0px 0.9375rem 0px 0px">
 
===Collision===
 
===Collision===
'''[[SPG:Solid Tiles|Solid Tiles]]'''
+
'''[[SPG:Solid Tiles|Solid Tiles]]'''<br>
:''Terrain Part 1:'' A detailed description of the individual building blocks of terrain and how they are processed detected.  
+
''Terrain Part 1:'' A detailed description of the individual building blocks of terrain and how they are processed detected.  
 
:*[[SPG:Solid Tiles#Sensors|''Sensors'']]
 
:*[[SPG:Solid Tiles#Sensors|''Sensors'']]
  
'''[[SPG:Solid Terrain|Solid Terrain]]'''
+
'''[[SPG:Solid Terrain|Solid Terrain]]'''<br>
 
:''Terrain Part 2:'' How Solid Tiles and collison layers are used to construct slopes, loops, and other structures.
 
:''Terrain Part 2:'' How Solid Tiles and collison layers are used to construct slopes, loops, and other structures.
 
:*[[SPG:Solid Terrain#Layers|''Layers'']]
 
:*[[SPG:Solid Terrain#Layers|''Layers'']]
 
:*[[SPG:Solid Terrain#Loops|''Loops'']]
 
:*[[SPG:Solid Terrain#Loops|''Loops'']]
  
'''[[SPG:Slope Collision|Slope Collision]]'''
+
'''[[SPG:Slope Collision|Slope Collision]]'''<br>
:''Slopes Part 1:'' How the Player object uses its sensor arrangement to detect and react to sloped terrain.  
+
''Slopes Part 1:'' How the Player object uses its sensor arrangement to detect and react to sloped terrain.  
 
:*[[SPG:Slope Collision#The_Player.27s_Sensors|''The Player's Sensors'']]
 
:*[[SPG:Slope Collision#The_Player.27s_Sensors|''The Player's Sensors'']]
 
:*[[SPG:Slope Collision#Sensor_Activation|''Sensor Activation'']]
 
:*[[SPG:Slope Collision#Sensor_Activation|''Sensor Activation'']]
Line 42: Line 43:
 
:*[[SPG:Slope Collision#Wall_Sensors_.28E_and_F.29|''Wall Sensors (E and F)'']]
 
:*[[SPG:Slope Collision#Wall_Sensors_.28E_and_F.29|''Wall Sensors (E and F)'']]
  
'''[[SPG:Hitboxes|Hitboxes]]'''
+
'''[[SPG:Hitboxes|Hitboxes]]'''<br>
:Object hitboxes, the Player's hitbox, and other ways objects directly interact with the player other than solidity.
+
Object hitboxes, the Player's hitbox, and other ways objects directly interact with the player other than solidity.
 
:*[[SPG:Hitboxes#The_Player.27s_Hitbox|''The Player's Hitbox'']]
 
:*[[SPG:Hitboxes#The_Player.27s_Hitbox|''The Player's Hitbox'']]
 
:*[[SPG:Hitboxes#Trigger_Areas|''Trigger Areas'']]
 
:*[[SPG:Hitboxes#Trigger_Areas|''Trigger Areas'']]
  
'''[[SPG:Solid Objects|Solid Objects]]'''
+
'''[[SPG:Solid Objects|Solid Objects]]'''<br>
:Object solidity, jump through platforms, and sloped variants of each.
+
Object solidity, jump through platforms, and sloped variants of each.
 
:*[[SPG:Solid Objects#Solid Objects|''Solid Objects'']]
 
:*[[SPG:Solid Objects#Solid Objects|''Solid Objects'']]
 
:*[[SPG:Solid Objects#Sloped Objects|''Sloped Objects'']]
 
:*[[SPG:Solid Objects#Sloped Objects|''Sloped Objects'']]
 
:*[[SPG:Solid Objects#Jump Through Platforms|''Jump Through Platforms'']]
 
:*[[SPG:Solid Objects#Jump Through Platforms|''Jump Through Platforms'']]
 
:*[[SPG:Solid Objects#Pushable Blocks|''Pushable Blocks'']]
 
:*[[SPG:Solid Objects#Pushable Blocks|''Pushable Blocks'']]
 +
:*[[SPG:Solid Objects#Item Monitor|''Item Monitor'']]
 
</div>
 
</div>
<div class="large-3 columns">
+
<div class="large-3 columns" style="margin: 0px; padding: 0px 0.9375rem 0px 0.9375rem">
 
===Physics===
 
===Physics===
'''[[SPG:Slope Physics|Slope Physics]]'''
+
'''[[SPG:Slope Physics|Slope Physics]]'''<br>
:''Slopes Part 2:'' How the Player moves with momentum over angled surfaces, and 360° movement along extreme slopes such as walls and ceilings.
+
''Slopes Part 2:'' How the Player moves with momentum over angled surfaces, and 360° movement along extreme slopes such as walls and ceilings.
 
:*[[SPG:Slope Physics#Moving_Along_Slopes|''Moving Along Slopes'']]
 
:*[[SPG:Slope Physics#Moving_Along_Slopes|''Moving Along Slopes'']]
 
:*[[SPG:Slope Physics#360_Degree_Movement|''360 Degree Movement'']]
 
:*[[SPG:Slope Physics#360_Degree_Movement|''360 Degree Movement'']]
Line 63: Line 65:
 
:*[[SPG:Slope Physics#Landing On The Ground|''Landing On The Ground'']]
 
:*[[SPG:Slope Physics#Landing On The Ground|''Landing On The Ground'']]
  
'''[[SPG:Running|Running]]'''
+
'''[[SPG:Running|Running]]'''<br>
:Horizontal input & general physics of the Player while walking/running.
+
Physics & control of the Player while walking/running.
  
'''[[SPG:Rolling|Rolling]]'''
+
'''[[SPG:Rolling|Rolling]]'''<br>
:Horizontal input & general physics of the Player while rolling.
+
Physics & control of the Player while rolling.
  
'''[[SPG:Air State|Air State]]'''
+
'''[[SPG:Air State|Air State]]'''<br>
:Horizontal input & general physics of the Player while they are in the air.
+
Physics & control of the Player while they are in the air.
  
'''[[SPG:Jumping|Jumping]]'''
+
'''[[SPG:Jumping|Jumping]]'''<br>
:Jump physics, jumping at angles, and how controllable jump height is achieved.
+
Physics & control while Jumping, how controllable jump height is achieved, and jumping at angles.
  
'''[[SPG:Getting Hit|Getting Hit]]
+
'''[[SPG:Getting Hit|Getting Hit]]'''<br>
:What happens when the Player gets hit.
+
What happens when the Player gets hit or dies.
  
'''[[SPG:Rebound|Rebound]]'''
+
'''[[SPG:Rebound|Rebound]]'''<br>
:The Player's physics bouncing off enemies and other destroy-able items.
+
Physics when bouncing off enemies, bosses and other destroy-able items.
  
'''[[SPG:Underwater|Underwater]]'''
+
'''[[SPG:Underwater|Underwater]]'''<br>
:The Player's physics underwater, and how their remaining air is depleted.
+
Physics underwater, and how their remaining air is depleted.
 
:*[[SPG:Underwater#Air|''Air'']]
 
:*[[SPG:Underwater#Air|''Air'']]
 
:*[[SPG:Underwater#Physics|''Physics'']]
 
:*[[SPG:Underwater#Physics|''Physics'']]
  
'''[[SPG:Super Speeds|Super Speeds]]'''
+
'''[[SPG:Super Speeds|Super Speeds]]'''<br>
:The Player's abilities when super.
+
The Player's speeds and abilities when super.
 
</div>
 
</div>
  
<div class="large-3 columns">
+
<div class="large-3 columns" style="margin: 0px; padding: 0px 0.9375rem 0px 0.9375rem">
 
 
 
===Gameplay===
 
===Gameplay===
'''[[SPG:Main Game Loop|Main Game Loop]]'''
+
'''[[SPG:Main Game Loop|Main Game Loop]]'''<br>
:The order that objects update each frame, and order of specific events like Player collision and movement.
+
The order that objects update each frame, and order of specific events like Player collision and movement.
  
'''[[SPG:Game Objects|Game Objects]]'''
+
'''[[SPG:Game Objects|Game Objects]]'''<br>
:Mechanics and sizes for things like rings, pushable blocks, buttons, and springs. How they are constructed, function, and interact with the Player.
+
Mechanics and sizes for things like rings, pushable blocks, buttons, and springs. How they are constructed, function, and interact with the Player.
  
'''[[SPG:Game Enemies|Game Enemies]]'''
+
'''[[SPG:Game Enemies|Game Enemies]]'''<br>
:Badnik and bosses behaviour, collision, and specific interaction with the Player.
+
Badnik and bosses behaviour, collision, and specific interaction with the Player.
 
:*[[SPG:Game Enemies#Badniks|''Badniks'']]
 
:*[[SPG:Game Enemies#Badniks|''Badniks'']]
 
:*[[SPG:Game Enemies#Bosses|''Bosses'']]
 
:*[[SPG:Game Enemies#Bosses|''Bosses'']]
  
'''[[SPG:Ring Loss|Ring Loss]]'''
+
'''[[SPG:Ring Loss|Ring Loss]]'''<br>
:Ring dispersal mechanics and physics when lost.
+
Ring dispersal mechanics and physics when lost.
  
'''[[SPG:Special Abilities|Special Abilities]]'''
+
'''[[SPG:Special Abilities|Special Abilities]]'''<br>
:General special abilities such as spindashing, and also detailing how character specific moves work.
+
General special abilities such as spindashing, and also detailing how character specific moves work.
 
:*[[SPG:Special_Abilities#Spindash_.28Sonic_2.2C_3.2C_.26_K.29|''Spindash'']]
 
:*[[SPG:Special_Abilities#Spindash_.28Sonic_2.2C_3.2C_.26_K.29|''Spindash'']]
 
:*[[SPG:Special_Abilities#Dash_.28Super_Peel_Out.29|''Super Peel Out'']]
 
:*[[SPG:Special_Abilities#Dash_.28Super_Peel_Out.29|''Super Peel Out'']]
Line 117: Line 118:
 
:*[[SPG:Special_Abilities#Climbing|''Climbing'']]
 
:*[[SPG:Special_Abilities#Climbing|''Climbing'']]
  
'''[[SPG:Elemental Shields|Elemental Shields]]'''
+
'''[[SPG:Elemental Shields|Elemental Shields]]'''<br>
:Elemental Shield abilities, powers, and moves.
+
Elemental Shield abilities, powers, and moves.
 
:*[[SPG:Elemental_Shields#Flame_Shield|''Flame Shield'']]
 
:*[[SPG:Elemental_Shields#Flame_Shield|''Flame Shield'']]
 
:*[[SPG:Elemental_Shields#Bubble_Shield|''Bubble Shield'']]
 
:*[[SPG:Elemental_Shields#Bubble_Shield|''Bubble Shield'']]
 
:*[[SPG:Elemental_Shields#Lightning_Shield|''Lightning Shield'']]
 
:*[[SPG:Elemental_Shields#Lightning_Shield|''Lightning Shield'']]
  
'''[[SPG:Special Stages|Special Stages]]'''
+
'''[[SPG:Special Stages|Special Stages]]'''<br>
:Special stages including the rotating mazes from Sonic 1.
+
Special stages including the rotating mazes from Sonic 1.
 
:*[[SPG:Special Stages#Rotating Maze|''Rotating Maze'']]
 
:*[[SPG:Special Stages#Rotating Maze|''Rotating Maze'']]
 
</div>
 
</div>
  
<div class="large-3 columns">
+
<div class="large-3 columns" style="margin: 0px; padding: 0px 0px 0px 0.9375rem">
 
===Presentation===
 
===Presentation===
'''[[SPG:Camera|Camera]]'''
+
'''[[SPG:Camera|Camera]]'''<br>
:Camera mechanics when following the Player.
+
Camera mechanics when following the Player.
  
'''[[SPG:Animations|Animations]]'''
+
'''[[SPG:Animations|Animations]]'''<br>
:Animations system, and specific animation timings & rules.
+
Animations system, and specific animation timings & rules.
 
:*[[SPG:Animations#Animation_System|''Animation System'']]
 
:*[[SPG:Animations#Animation_System|''Animation System'']]
 
:*[[SPG:Animations#Variable Speed Animation Timings|''Variable Speed Animation Timings'']]
 
:*[[SPG:Animations#Variable Speed Animation Timings|''Variable Speed Animation Timings'']]
 
:*[[SPG:Animations#Normal Animation Timings|''Normal Animation Timings'']]
 
:*[[SPG:Animations#Normal Animation Timings|''Normal Animation Timings'']]
 
:*[[SPG:Animations#Animation Rules|''Animation Rules'']]
 
:*[[SPG:Animations#Animation Rules|''Animation Rules'']]
</div>
 
  
<div class="large-3 columns">
 
 
===Special===
 
===Special===
'''[[SPG:Overlay Scripts|Overlay Scripts]]'''
+
'''[[SPG:Overlay Scripts|Overlay Scripts]]'''<br>
:Lua scripts which overlay the game in an emulator for an interactive visual of collision.
+
Lua scripts which overlay the game in an emulator for an interactive visual of collision.
 
:*[[SPG:Overlay_Scripts#Sonic_1_Overlay|''Sonic 1 Overlay'']]
 
:*[[SPG:Overlay_Scripts#Sonic_1_Overlay|''Sonic 1 Overlay'']]
 
:*[[SPG:Overlay_Scripts#Sonic_2_Overlay|''Sonic 2 Overlay'']]
 
:*[[SPG:Overlay_Scripts#Sonic_2_Overlay|''Sonic 2 Overlay'']]
 
</div>
 
</div>
 
[[Category:Sonic Physics Guide| ]]
 
[[Category:Sonic Physics Guide| ]]

Revision as of 09:47, 28 June 2023

ROM Hacks make the process of developing a functional Sonic game with unique art, enemies, and modifications much easier, since the game engine and basic mechanics are already functional. However, if the game requires a different game engine, modifying existing low-level assembly may be inappropriate, and some game designers might choose to program their own unique game engine. The physics of a game engine are rules that describe how to transform the Player's input (either in the form of buttons, keyboard, or even a mouse if the designer feels inclined) into appropriate changes in the position of the sprites in the game (such as the Sonic sprite, or alternatively, how enemy sprites will respond). These physics guides will hopefully make the process of simulating the rules used in Sonic games easier.

Since the rules themselves are independent of how they are implemented, many people choose programming languages such as Java, C, C++, Python, or a Lisp dialect to implement game physics. In addition, people can choose to use more specialized applications like Adobe Flash (Animate), GameMaker Studio 2, or a Clickteam program like Multimedia Fusion 2.

Hopefully, these guides will provide adequate information to facilitate implementation.

Physics Guides

General

Basics
A prerequisite for much of the info on this guide, including common variables, how angles work, how object sizes are displayed, and more.

Calculations (Technical)
A detailed explanation of how values like speeds, positions, and angles are stored and calculated in the original games. While it is not necessary to emulate these things to create an extremely accurate recreation, it can be useful to know for absolute pinpoint accuracy.

Characters
Information about specific characters and their constants, variables, sizes, and jump height.

Collision

Solid Tiles
Terrain Part 1: A detailed description of the individual building blocks of terrain and how they are processed detected.

Solid Terrain

Terrain Part 2: How Solid Tiles and collison layers are used to construct slopes, loops, and other structures.

Slope Collision
Slopes Part 1: How the Player object uses its sensor arrangement to detect and react to sloped terrain.

Hitboxes
Object hitboxes, the Player's hitbox, and other ways objects directly interact with the player other than solidity.

Solid Objects
Object solidity, jump through platforms, and sloped variants of each.

Physics

Slope Physics
Slopes Part 2: How the Player moves with momentum over angled surfaces, and 360° movement along extreme slopes such as walls and ceilings.

Running
Physics & control of the Player while walking/running.

Rolling
Physics & control of the Player while rolling.

Air State
Physics & control of the Player while they are in the air.

Jumping
Physics & control while Jumping, how controllable jump height is achieved, and jumping at angles.

Getting Hit
What happens when the Player gets hit or dies.

Rebound
Physics when bouncing off enemies, bosses and other destroy-able items.

Underwater
Physics underwater, and how their remaining air is depleted.

Super Speeds
The Player's speeds and abilities when super.

Gameplay

Main Game Loop
The order that objects update each frame, and order of specific events like Player collision and movement.

Game Objects
Mechanics and sizes for things like rings, pushable blocks, buttons, and springs. How they are constructed, function, and interact with the Player.

Game Enemies
Badnik and bosses behaviour, collision, and specific interaction with the Player.

Ring Loss
Ring dispersal mechanics and physics when lost.

Special Abilities
General special abilities such as spindashing, and also detailing how character specific moves work.

Elemental Shields
Elemental Shield abilities, powers, and moves.

Special Stages
Special stages including the rotating mazes from Sonic 1.

Presentation

Camera
Camera mechanics when following the Player.

Animations
Animations system, and specific animation timings & rules.

Special

Overlay Scripts
Lua scripts which overlay the game in an emulator for an interactive visual of collision.