When playing a speedgame, there are certain circumstances (e.g. blindfolded or performing an extremely precise trick) where it can be extremely useful to move the character in such a way where the position of the character is always an exact known value with little to no variance between attempts.
Normalized Movement is a solution to this problem. Think of the old Pokemon games where player movement is constrained to a tile grid. In those games, the simple act of buffering the direction of the next tile the player wants to navigate to maintains Normalized Movement. A runner can repeat the same actions across many attempts and always end up in the same position at the exact same frame with 100% consistency. In games where there is a gradient of movement speed and direction (i.e. games that control movement with an analog stick), the only way to maintain Normalized Movement is with a pre-defined set of Normalized Moves.
A well matured example of this is Ocarina of Time.
Actions like...
- Level transition
- Ledge climb
- Crawling
- Chest animation
...can be used to "normalize" the player's position to an exact starting point.
And moves like...
- Forward slash
- Backflip
- Left/Right hop
...can be used to travel in all 4 directions form that starting point with exact offsets. Because the starting point is known and the distance traveled is known, then the player's position is well understood through most gameplay. Critically, the player knows this without having to trust unreliable mechanisms like audio cues, the player's sense of the analog stick, and the player's sense of time.
In short: It doesn't
A set of Normalized Moves exists, but they do not allow for easy traversal in all 4 directions. The nature of the game world means resetting the player to a normalized position such as elevators are far and few between. Unlike other games, normalized movement in prime requires the normalization of both player position and player orientation. Tools like Prime Practice Mod, PrimeWatch and Dolphin Memory Engine can be used to observe the player's position and rotation as numerical values.
Because of this, the use of Normalized Movement to solve difficult problems such as blindfolded or a consistent setup for Early World have not been thoroughly explored.
With this context established, here are all the known methods of such movement in Metroid Prime:
This is your only option for getting to a "known" starting position and rotation.
The player's position and rotation is set to hard-coded values when:
- A save is loaded
- The player transports between regions
- A cutscense reposition is reached
These are your options for getting to a "known" starting position only.
Simple meaning a wide range of analog angles and amplitudes result in the same final position when releasing to neutral analog stick.
When the player is stuck in collision without being in the standing state, the player will be moved to a deterministically calculated position.
These are your options for getting to a "known" starting rotation only.
If the player's position is normalized, then locking on to a static object's lock-on point sets the player's position to a knowable value.
In a specific type of morph ball area, the player will unmorph to a fixed point. If this unmorph is performed from a normalized position, then the rotation will become normalized as well. Most common source of this is unmorphing near a door.
Assuming the player starts from a normalized position and rotation, the player can move to another normalized position by these means.
The height of the first jump is constant, therefore any overhead obstruction will be hit with a normalized velocity. Any slope on the ceiling will convert some of the vertical momentum to horizontal momentum, resulting in the player landing in a slightly lateral position from where they started.
The morph ball extends 0.1 units further than the standing player collision model. If the player morphs and quickly unmorphs while pressed against the wall and on flat ground, the player will have moved exactly 0.1 units away from the wall. This is technically a reposition.
- Open map
- [Optional] start holding L if you want to mutate the rotation
- Hold one of 8 notch angles and don't have a shitty controller
- Close map
You are now moving with an normalized movement vector. Good luck finding a normalized way of stopping.
If the player walks off a ledge they will enter the limited influence state at a normalized time. This means they can let go of all inputs anywhere between the start and end of limited influence and still stay normalized.
Boost ball has a max charge capacity of 3 seconds. If the player charges to max and then releases, they will move a normalized distance. Unsure if the lower boost tiers are a gradient or not. I'm too lazy to check right now. Use lock-ons to update the normalized
You can combine the B press release with a buffered notch angle, but then you have very few options for controlling the release of that angle.
Assuming the player starts from a normalized rotation, the player can move to another normalized position by these means.
If you're holding L, you can let go of it to normalize vertical rotation.
Things that are almost normalized movement but not quite 100% controllable
Constant velocity/duration/angle but requires specific and uncontrollable timing leading up to the animation.
Here is an example I recorded showing:
- Normalized position via corner
- Normalized rotation via scan visor
- Normalized movement via buffered notch walk
- Normalized end of movement via limited influence