JazzerThighs (talk | contribs) No edit summary |
JazzerThighs (talk | contribs) No edit summary |
||
Line 46: | Line 46: | ||
== Analog Stick Formulas for the GameCube Controller and SSBM == | |||
=== System Stick Handling === | |||
The input data that the GameCube gathers the Analog Sticks' potentiometers is handled before SSBM's game engine. The GameCube calculates the mathematical representations of the value range, and then SSBM's engine introduces additional criteria for altering the outputs of the Analog Sticks. | The input data that the GameCube gathers the Analog Sticks' potentiometers is handled before SSBM's game engine. The GameCube calculates the mathematical representations of the value range, and then SSBM's engine introduces additional criteria for altering the outputs of the Analog Sticks. | ||
Line 72: | Line 72: | ||
=== SSBM Game Engine Stick Handling === | |||
==== Dead Zones ==== | |||
After the electrical signals outputted by each of the Analog Sticks' potentiometers is converted to a valid (X,Y) coordinate, the game engine of SSBM performs some further operations to aid in the balance between inconsistent human input available options in the game-play. | After the electrical signals outputted by each of the Analog Sticks' potentiometers is converted to a valid (X,Y) coordinate, the game engine of SSBM performs some further operations to aid in the balance between inconsistent human input available options in the game-play. |
Revision as of 19:45, 11 August 2022
The purpose of this page is to elaborate on the specific architecture and implementation of the GameCube Controller's two Analog Sticks in the context of Super Smash Bros. Melee.
Released in 2001, the Nintendo GameCube's First-Party GameCube Controller is released with along with the original console. Coincidentally, the successor to the Nintendo 64 being the GameCube, also lined up with both the Successor of the Nintendo 64 Controller and the development of Super Smash Bros. Melee, the Successor to Super Smash Bros. for the Nintendo 64. Following the trends of the SONY DualShock Controller, Nintendo opted to include two Analog Sticks on either side of the controller; The methodology gave an excuse to replace the C-Buttons on the N64 Controller with a C-Stick, a Fully-Analog companion to the Main Analog Stick. Both of these Sticks are structurally Identical, except for the shape of the part of the sticks that touch the thumbs.
SSBM was intentionally designed to fit the developers' idea of the connection between how to fit all of the game's options on the controller, and how they thought the player would want to play the game. This ideology, coupled with the manufacturing quirks of the Nintendo GameCube Controller, and the metagame of competitive SSBM evolving as it did, caused for a rise in discoveries and insights into the general mechanics of the game.
An Introduction to the Controls of SSBM
Fundamental Controls
To a Newcomer, the controls of the Super Smash Bros. franchise are simple to grasp;
- The Left Stick moves the player around. Up makes the character Jump, and Down makes them Crouch.
- Furthermore, how fast the Left Stick is moved changes character's action. Slowly "Tilt" left to Walk, Quickly "Tap" left to Dash. Tilting Up does nothing, Tapping Up makes the character Jump.
- The A Button performs Attacks.
- The B Button performs Special Moves.
- By using the Left Stick in tandem with the A or B Buttons, different attacks and special moves can be performed, respectively.
- "Tilting" and "Tapping" the stick in tandem with the A or Buttons produces different affects; "Tilt" attacks & "Smash" attacks for the A-Button, and similar-but-situational occurrences of Special Move variations.
- The L and R triggers put up the character's Shield.
- Pressing A while holding down the L or R Shoulder Buttons makes the character perform a Grab.
- The Z Button acts like holding down one Shoulder Button a little bit, and pressing A, so a Grab is performed, followed by a larger-but-more-fragile Light Shield.
- The D-Pad generally does nothing except Taunt.
- While in the Air, all of the controls trigger Counterpart Actions to their Main Grounded Actions.
Diving Deeper into SSBM's Control Scheme
Once a player has become familiar with the basic movements and options available, they should have a basic understanding that moving the Analog Sticks in a certain way is necessary to performing certain actions in a consistent manner (i.e. ensuring that the Left Stick is Tapped quickly enough to the left or right to make the character perform a Dash and not a slower Walk, for example). It is well established that the polished and tight feeling of SSBM's movement engine and similar game mechanics is something to behold, even in the modern era. But, a common criticism to SSBM in contrast to the later titles in the franchise is a feeling of "clunky" controls, and a high degree of difficulty to perform the desired actions consistently.
We can analyze these properties as consequences to the decisions made in the development of SSBM's game mecahnics, physics engine, and the internal properties of the Nintendo GameCube Controller.
The Technical Specifications of the GameCube Controller
Digital Inputs
Each individual button on the controller controls 1 digital output; A, B, X, Y, Z, Digital R, Digital L, D-Pad Up, D-Pad Down, D-Pad Left, D-Pad Right, and "START", for a total of twelve inputs.
We'll ignore the D-Pad and the "START" button for now, as they do not play a role in the game-play controls.
Analog Inputs
Each Analog Stick controls a 2D Grid of X and Y Coordinates, corresponding to their respective East-West and North-South axes. The use of one rotating potentiometer, per axis, per stick, is used to measure the indirect rotation of that axis' post, cause by moving the stick along that axis with the thumb.
Altimor's StickMap is a program used to visualize the X,Y Grid of Coordinates that each Analog Stick is able to measure.
Analog Stick Formulas for the GameCube Controller and SSBM
System Stick Handling
The input data that the GameCube gathers the Analog Sticks' potentiometers is handled before SSBM's game engine. The GameCube calculates the mathematical representations of the value range, and then SSBM's engine introduces additional criteria for altering the outputs of the Analog Sticks.
The calculation of the Magnitude of a coordinate (aka the length of a straight line between a given coordinate and (0,0)), the vector length from the Origin (0,0) and that other coordinate is measured with the following formula:
Magnitude = SquareRoot( X^2 + Y^2 )
An (X,Y) coordinate is valid to the Nintendo GameCube if it meets all of the following criteria:
I. X <= (0 + 0.0125*n), where -80 <= n <= 80 II. Y <= (0 + 0.0125*n), where -80 <= n <= 80 III. Magnitude <= 1
If an (X,Y) coordinate is measured that is outside of the valid coordinate range, the system traces the vector back to the origin to find the closest coordinate that is valid, and rounds the invalid input to that valid output.
To calculate the Theta of a valid coordinate, the following formula is applied:
Atan( |Y| ÷ |X| ) * ( 180 ÷ pi ), rounded to 2 Decimal Places Note: for X = 0, the Angle assigned is 90 Degrees; (0, 0) is assigned 0 Degrees.
SSBM Game Engine Stick Handling
Dead Zones
After the electrical signals outputted by each of the Analog Sticks' potentiometers is converted to a valid (X,Y) coordinate, the game engine of SSBM performs some further operations to aid in the balance between inconsistent human input available options in the game-play.
Referring back to the StickMap, there are marked sections of the grid that represent different types of Dead-Zones on the Analog Sticks:
I. If -0.2750 >= X <= 0.2750, the game engine treats this as (X = 0) II. If -0.2750 >= Y <= 0.2750, the game engine treats this as (Y = 0)
What these rules create are the Cardinal Direction Dead Zones. The center of the Stick's Range, extending twenty-two units in all four Cardinal Directions, is the Neutral Dead Zone, where the (X,Y) values of that Analog Stick are treated as (0,0) inputs. If one of the values falls outside of their respective Dead Zone, that value is preserved while the other is treated as a 0.