Parallel Universe: Difference between revisions

no edit summary
("he will, in certain circumstances, upwarp back to the main PU grid" becomes "usually")
No edit summary
Line 7: Line 7:
The truncation responsible for the existence of parallel universes is only performed when determining alignment with floors and ceilings. This means that walls and objects, both of which use floating point arithmetic to determine collision, do not "exist" in PUs, unless they are brought there.
The truncation responsible for the existence of parallel universes is only performed when determining alignment with floors and ceilings. This means that walls and objects, both of which use floating point arithmetic to determine collision, do not "exist" in PUs, unless they are brought there.


== Vertical parallel universes ==
== Vertical Parallel Universes ==


Though usually the term "PU" refers to a horizontal PU (i.e. one caused by truncation of the ''x'' and/or ''z'' coordinates of an object's position), vertical PUs (where the ''y'' coordinate is truncated) also exist. However, these behave completely differently to horizontal PUs. While truncated coordinates are used to ''find'' the floor below the object and the ceiling above the object, the original floating point values are used to determine what ''effect'' these surfaces have on the object.
Although usually the term "PU" refers to a horizontal PU (i.e. one caused by truncation of the ''x'' and/or ''z'' coordinates of an object's position), vertical PUs (where the ''y'' coordinate is truncated) also exist. However, these behave completely differently to horizontal PUs. While truncated coordinates are used to ''find'' the floor below the object and the ceiling above the object, the original floating point values are used to determine what ''effect'' these surfaces have on the object.


For example, when Mario is less than 160 units below the nearest ceiling, he is considered to be "above" the ceiling, his vertical speed is killed, and he bonks. If Mario moves to a positive (upward) vertical PU, the "nearest" ceiling will be determined based on truncated coordinates, and will therefore be in the main map. But when checking whether he is above this ceiling, floating point coordinates are used instead, and so Mario behaves as though he is stuck in a ceiling. This behavior results in positive vertical PUs appearing to be filled entirely with ceilings.
For example, when Mario is less than 160 units below the nearest ceiling, he is considered to be "above" the ceiling, his vertical speed is killed, and he bonks. If Mario moves to a positive (upward) vertical PU, the "nearest" ceiling will be determined based on truncated coordinates, and will therefore be in the main map. But when checking whether he is above this ceiling, floating point coordinates are used instead, and so Mario behaves as though he is stuck in a ceiling. This behavior results in positive vertical PUs appearing to be filled entirely with ceilings.
Line 23: Line 23:
[[File:Mario looking from a PU.png|thumb|251x251px|Mario looking to the original map from a PU]]
[[File:Mario looking from a PU.png|thumb|251x251px|Mario looking to the original map from a PU]]


Parallel universes have found uses in both speed TASes and the [[A Button Challenge]] since they allow greater control of movement through a level. PU routing is comparable to movement through a five-dimensional space, as Mario can be modelled as travelling along five axes: three "relative" axes describing his position within the map, and two integers to specify which PU he is currently in. Mario can adjust his [[speed]] and [[angle]] to move relatively around the stage regardless of how many PUs he moves in the ''x'' or ''z'' dimensions.
Parallel universes have found uses in both speed TASes and the [[A Button Challenge]] since they allow greater control of movement through a level. PU routing is comparable to movement through a five-dimensional space, as Mario can be modeled as traveling along five axes: three "relative" axes describing his position within the map, and two integers to specify which PU he is currently in. Mario can adjust his [[speed]] and [[angle]] to move relatively around the stage regardless of how many PUs he moves in the ''x'' or ''z'' dimensions.


Mario's movement is split up into four [[Movement Steps|quarter steps]], and if any of these quarter steps attempts to place Mario out of bounds, his movement is cancelled. Therefore in order to move to a PU, Mario's speed must be a multiple of four times the distance between PUs. If Mario takes all four quarter steps, then he will move four PUs in a single frame. This distance is called the '''Quadruple Parallel Universe''', or '''QPU''', distance.
Mario's movement is split up into four [[Movement Steps|quarter steps]], and if any of these quarter steps attempts to place Mario out of bounds, his movement is canceled. Therefore in order to move to a PU, Mario's speed must be a multiple of four times the distance between PUs. If Mario takes all four quarter steps, then he will move four PUs in a single frame. This distance is called the '''Quadruple Parallel Universe''', or '''QPU''', distance.


If one of Mario's quarter steps (other than the first one) ends out of bounds, the game will cut his movement short. In this case, Mario does not travel the full QPU distance, and instead ends at whichever PU he made it to before his intended quarter step became out of bounds. This is referred to as a '''misaligned QPU'''.
If one of Mario's quarter steps (other than the first one) ends out of bounds, the game will cut his movement short. In this case, Mario does not travel the full QPU distance, and instead ends at whichever PU he made it to before his intended quarter step became out of bounds. This is referred to as a '''misaligned QPU'''.


As travelling to PUs involves moving very far from the origin, floating point imprecision can begin to have a significant affect on Mario's position, angle, and collision.
As traveling to PUs involves moving very far from the origin, floating point imprecision can begin to have a significant effect on Mario's position, angle, and collision.


== Floating point truncation crash ==
== Floating point truncation crash ==
Line 40: Line 40:
* The camera enters a PU
* The camera enters a PU
* Mario bonks while in a PU
* Mario bonks while in a PU
* Mario's quarter step gets cancelled while on the ground
* Mario's quarter step gets canceled while on the ground
* Mario collides with a wall head-on with PU speed
* Mario collides with a wall head-on with PU speed