Actions

Difference between revisions of "Sonic Physics Guide"

From Sonic Retro

(Recategorisation)
(New section)
 
(22 intermediate revisions by the same user not shown)
Line 1: Line 1:
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.
+
==Introduction==
 +
Welcome to the '''Sonic Physics Guide''', a comprehensive resource dedicated to describing the inner workings of the classic [[Genesis]] & [[Sega CD]] [[Sonic]] games, along with [[Sonic Mania]].
 +
Here, the intricate details of how the game's physics function are thoroughly explored, providing in-depth explanations about the exact values and rules and precise speed values governing Sonic's movements, 360 slope physics, [[Badnik]] & object behaviour, all the way to the construction of the sloped terrain. The guide will shed light on exactly how every aspect, from navigating slopes and loops to interacting with [[Springs]], contributes to the gameplay.
  
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.
+
Whether you're a curious newcomer, an experienced [[fan game]] developer, or a seasoned Sonic fan seeking a deeper understanding of the games, this guide aims to present the information in an accessible manner, providing clear and concise breakdowns of the underlying concepts.  
  
Hopefully, these guides will provide adequate information to facilitate implementation.
+
This guide will present these physics rules in an engine-agnostic manner, focusing on the tangible results of the game logic instead of delving into the minutiae of how the original 68k assembly code operated. As a result, these rules can be applied to modern programming languages such as Java, C, C++, Python, or a Lisp dialect when implementing the physics described in this guide. Moreover, individuals using this guide will be able to easily utilise specialised engines/IDEs such as GameMaker, Unity, Godot, Clickteam Fusion, or Love2D to implement the described game rules. Nevertheless, it is important to note that this guide will still acknowledge the quirks, limitations, and workarounds that were necessary for the original game due to its utilisation of a low-level programming language.
  
== Physics Guides ==
+
__TOC__
*[[SPG:Basics|Basics]]
 
A prerequisite for much of the info on this guide.
 
*[[SPG:Characters|Characters]]
 
Basic info about characters such as their varying sizes and jump height, and also detailing how their specific moves work.
 
  
<div class="large-3 columns">
+
==Physics Guides==
===Collision===
+
===General===
*[[SPG:Solid Tiles|Solid Tiles]]
+
'''[[SPG:Basics|Basics]]'''<br>
A detailed description of how sloped terrain is constructed, and how objects use sensors to collide with it.  
+
A prerequisite for much of the info on this guide, including common object variables, how angles work, how object sizes are displayed, and more.
*[[SPG:Solid Objects|Solid Objects]]
+
:*[[SPG:Basics#Positions|''Positions And Speeds'']]
Explaining object hitboxes, solidity, the Player's hitbox, and other ways objects directly interact with them.
+
:*[[SPG:Basics#Angles|''Angles'']]
 +
:*[[SPG:Basics#Variables|''Variables'']]
 +
 
 +
'''[[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 things for an extremely close recreation, they are necessary for absolute accuracy
 +
:*[[SPG:Calculations#Pixel and Subpixel|''Pixel and Subpixel'']]
 +
:*[[SPG:Calculations#Hex Angles|''Hex Angles'']]
 +
 
 +
'''[[SPG:Characters|Characters]]'''<br>
 +
Information about specific characters and their constants, variables, sizes, and jump height.
 +
:*[[SPG:Characters#Sonic|''Sonic'']]
 +
:*[[SPG:Characters#Tails|''Tails'']]
 +
:*[[SPG:Characters#Knuckles|''Knuckles'']]
 +
 
 +
 
 +
===Gameplay===
 +
These guides will explain what happens during gameplay scenarios, such as slope collision, player movement, and object interactions.
 +
<div class="large-4 columns" style="margin: 0px; padding: 0px 0.9375rem 0px 0px">
 +
====Collision====
 +
'''[[SPG:Solid Tiles|Solid Tiles]]'''<br>
 +
''Terrain Part 1:'' A detailed description of the individual building blocks of terrain, and how they are processed and detected.
 +
:*[[SPG:Solid Tiles#Sensors|''Sensors'']]
 +
 
 +
'''[[SPG:Solid Terrain|Solid Terrain]]'''<br>
 +
:''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#Loops|''Loops'']]
 +
 
 +
'''[[SPG:Slope Collision|Slope Collision]]'''<br>
 +
''Slopes Part 1:'' How the Player object uses their sensor arrangement to detect and react to terrain, including 360° slopes such as walls and ceilings, and collision while airborne.
 +
:*[[SPG:Slope Collision#The_Player.27s_Sensors|''The Player's Sensors'']]
 +
:*[[SPG:Slope Collision#While Grounded|''While Grounded'']]
 +
:**[[SPG:Slope Collision#360_Degree_Collision|''360 Degree Collision'']]
 +
:*[[SPG:Slope Collision#While Airborne|''While Airborne'']]
 +
 
 +
'''[[SPG:Hitboxes|Hitboxes]]'''<br>
 +
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#Trigger_Areas|''Trigger Areas'']]
 +
 
 +
'''[[SPG:Solid Objects|Solid Objects]]'''<br>
 +
Object solidity, jump through platforms, and sloped variants of each.
 +
:*[[SPG:Solid Objects#Solid Objects|''Solid Objects'']]
 +
:*[[SPG:Solid Objects#Sloped Objects|''Sloped Objects'']]
 +
:*[[SPG:Solid Objects#Jump Through Platforms|''Jump Through Platforms'']]
 +
:*[[SPG:Solid Objects#Pushable Blocks|''Pushable Blocks'']]
 +
:*[[SPG:Solid Objects#Item Monitor|''Item Monitor'']]
 
</div>
 
</div>
<div class="large-3 columns">
+
<div class="large-4 columns" style="margin: 0px; padding: 0px 0.9375rem 0px 0.9375rem">
===Physics===
+
====Physics====
*[[SPG:Slope Physics|Slope Physics]]
+
'''[[SPG:Slope Physics|Slope Physics]]'''<br>
How the Player moves with momentum over angled surfaces, along with the specific physics for actions such as rolling.
+
''Slopes Part 2:'' How the Player moves with momentum over angled surfaces.
*[[SPG:Air State|Air State]]
+
:*[[SPG:Slope Physics#Moving_Along_Slopes|''Moving Along Slopes'']]
Explaining the Player's physics through the air.
+
:*[[SPG:Slope Physics#360_Degree_Movement|''360 Degree Movement'']]
*[[SPG:Running|Running]]
+
:*[[SPG:Slope Physics#Falling and Slipping Down Slopes|''Falling and Slipping Down Slopes'']]
Describing how horizontal inputs control the Player while walking/running.
+
:*[[SPG:Slope Physics#Landing On The Ground|''Landing On The Ground'']]
*[[SPG:Jumping|Jumping]]
+
 
The Player's jump physics and how variable jump height is achieved.
+
'''[[SPG:Running|Running]]'''<br>
*[[SPG:Rolling|Rolling]]
+
Physics & control of the Player while walking/running.
Describing how horizontal inputs control the Player while rolling.
+
 
*[[SPG:Getting Hit|Getting Hit]]
+
'''[[SPG:Rolling|Rolling]]'''<br>
What happens when the Player gets hit.
+
Physics & control of the Player while rolling.
*[[SPG:Rebound|Rebound]]
+
 
Describing how the Player bounces off enemies and other destroy-able items.
+
'''[[SPG:Air State|Air State]]'''<br>
*[[SPG:Underwater|Underwater]]
+
Physics & control of the Player while they are in the air.
How the Player's movements change underwater.
+
 
*[[SPG:Super Speeds|Super Speeds]]
+
'''[[SPG:Jumping|Jumping]]'''<br>
How the Player's abilities change when super.
+
Physics & control while Jumping, how controllable jump height is achieved, and jumping at angles.
 +
 
 +
'''[[SPG:Getting Hit|Getting Hit]]'''<br>
 +
What happens when the Player gets hit or dies.
 +
 
 +
'''[[SPG:Rebound|Rebound]]'''<br>
 +
Physics when bouncing off enemies, bosses and other destroy-able items.
 +
 
 +
'''[[SPG:Underwater|Underwater]]'''<br>
 +
Physics underwater, and how their remaining air is depleted.
 +
:*[[SPG:Underwater#Air|''Air'']]
 +
:*[[SPG:Underwater#Physics|''Physics'']]
 +
 
 +
'''[[SPG:Super Speeds|Super Speeds]]'''<br>
 +
The Player's speeds and abilities when super.
 
</div>
 
</div>
  
<div class="large-3 columns">
+
<div class="large-4 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 of events for objects, including characters.
+
The order that objects update each frame, and order of specific events like Player collision and movement.
*[[SPG:Game Objects|Game Objects]]
+
 
How objects such as rings, enemies, blocks, and springs move around, are constructed, and interact with the Player.
+
'''[[SPG:Game Objects|Game Objects]]'''<br>
*[[SPG:Ring Loss|Ring Loss]]
+
Mechanics and sizes for things like rings, pushable blocks, buttons, and springs. How they are constructed, function, and interact with the Player.
How rings disperse when hit.
+
 
*[[SPG:Special Abilities|Special Abilities]]
+
'''[[SPG:Game Enemies|Game Enemies]]'''<br>
General special abilities such as spindashing and elemental shields.
+
Badnik and bosses behaviour, collision, and specific interaction with the Player.
 +
:*[[SPG:Game Enemies#Badniks|''Badniks'']]
 +
:*[[SPG:Game Enemies#Bosses|''Bosses'']]
 +
 
 +
'''[[SPG:Ring Loss|Ring Loss]]'''<br>
 +
Ring dispersal mechanics and physics when lost.
 +
 
 +
'''[[SPG:Special Abilities|Special Abilities]]'''<br>
 +
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#Dash_.28Super_Peel_Out.29|''Super Peel Out'']]
 +
:*[[SPG:Special_Abilities#Drop_Dash_.28Mania.29|''Drop Dash'']]
 +
:*[[SPG:Special_Abilities#Insta-Shield|''Insta-Shield'']]
 +
:*[[SPG:Special_Abilities#Flying|''Flying'']]
 +
:*[[SPG:Special_Abilities#Gliding|''Gliding'']]
 +
:*[[SPG:Special_Abilities#Climbing|''Climbing'']]
 +
 
 +
'''[[SPG:Elemental Shields|Elemental Shields]]'''<br>
 +
Elemental Shield abilities, powers, and moves.
 +
:*[[SPG:Elemental_Shields#Flame_Shield|''Flame Shield'']]
 +
:*[[SPG:Elemental_Shields#Bubble_Shield|''Bubble Shield'']]
 +
:*[[SPG:Elemental_Shields#Lightning_Shield|''Lightning Shield'']]
 +
 
 +
'''[[SPG:Player 2|Player 2]]'''<br>
 +
How the second Player will follow you throughout stages, and how they respawn when they fall offscreen.
 +
:*[[SPG:Player_2#Player_2_CPU|''Player 2 CPU'']]
 +
:*[[SPG:Player_2#Respawning|''Respawning'']]
 +
 
 +
'''[[SPG:Special Stages|Special Stages]]'''<br>
 +
Special stages including the rotating mazes from Sonic 1.
 +
:*[[SPG:Special Stages#Rotating Maze|''Rotating Maze'']]
 
</div>
 
</div>
  
<div class="large-3 columns">
+
==Presentation==
===Specific===
+
'''[[SPG:Camera|Camera]]'''<br>
*[[SPG:Camera|Camera]]
+
Camera mechanics when following the Player.
Mechanics of the camera following the Player.
+
 
*[[SPG:Animations|Animations]]
+
'''[[SPG:Animations|Animations]]'''<br>
Covering how animations play and specific animation timings.
+
Animations system, and specific animation timings & rules.
</div>
+
:*[[SPG:Animations#Animation_System|''Animation System'']]
 +
:*[[SPG:Animations#Variable Speed Animation Timings|''Variable Speed Animation Timings'']]
 +
:*[[SPG:Animations#Normal Animation Timings|''Normal Animation Timings'']]
 +
:*[[SPG:Animations#Animation Rules|''Animation Rules'']]
  
<div class="large-3 columns">
+
==Special==
===Special===
+
'''[[SPG:Overlay Scripts|Overlay Scripts]]'''<br>
*[[SPG:Overlay Scripts|Overlay Scripts]]
 
 
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.
</div>
+
:*[[SPG:Overlay_Scripts#Sonic_1_Overlay|''Sonic 1 Overlay'']]
 +
:*[[SPG:Overlay_Scripts#Sonic_2_Overlay|''Sonic 2 Overlay'']]
 +
 
 
[[Category:Sonic Physics Guide| ]]
 
[[Category:Sonic Physics Guide| ]]

Latest revision as of 09:39, 19 July 2023

Introduction

Welcome to the Sonic Physics Guide, a comprehensive resource dedicated to describing the inner workings of the classic Genesis & Sega CD Sonic games, along with Sonic Mania. Here, the intricate details of how the game's physics function are thoroughly explored, providing in-depth explanations about the exact values and rules and precise speed values governing Sonic's movements, 360 slope physics, Badnik & object behaviour, all the way to the construction of the sloped terrain. The guide will shed light on exactly how every aspect, from navigating slopes and loops to interacting with Springs, contributes to the gameplay.

Whether you're a curious newcomer, an experienced fan game developer, or a seasoned Sonic fan seeking a deeper understanding of the games, this guide aims to present the information in an accessible manner, providing clear and concise breakdowns of the underlying concepts.

This guide will present these physics rules in an engine-agnostic manner, focusing on the tangible results of the game logic instead of delving into the minutiae of how the original 68k assembly code operated. As a result, these rules can be applied to modern programming languages such as Java, C, C++, Python, or a Lisp dialect when implementing the physics described in this guide. Moreover, individuals using this guide will be able to easily utilise specialised engines/IDEs such as GameMaker, Unity, Godot, Clickteam Fusion, or Love2D to implement the described game rules. Nevertheless, it is important to note that this guide will still acknowledge the quirks, limitations, and workarounds that were necessary for the original game due to its utilisation of a low-level programming language.

Physics Guides

General

Basics
A prerequisite for much of the info on this guide, including common object 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 things for an extremely close recreation, they are necessary for absolute accuracy

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


Gameplay

These guides will explain what happens during gameplay scenarios, such as slope collision, player movement, and object interactions.

Collision

Solid Tiles
Terrain Part 1: A detailed description of the individual building blocks of terrain, and how they are processed and 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 their sensor arrangement to detect and react to terrain, including 360° slopes such as walls and ceilings, and collision while airborne.

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.

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.

Player 2
How the second Player will follow you throughout stages, and how they respawn when they fall offscreen.

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.