Parallel Universe: Difference between revisions

Jump to navigation Jump to search
m
Reverted edits by Thestickman391 (talk) to last revision by Bad boot
mNo edit summary
m (Reverted edits by Thestickman391 (talk) to last revision by Bad boot)
Line 1: Line 1:
[[File:ParallelUniverseViews.jpg|thumb|A diagram of Parallel Universe movement in [[Hazy Maze Cave]], after [[Mario]] has returned to the main map.]]
[[File:ParallelUniverseViews.jpg|thumb|A diagram of Parallel Universe movement in [[Hazy Maze Cave]], after [[Mario]] has returned to the main map.]]
[[File:Visible PU.png|thumb|Frame of [[Peter Fedak|Peter Fedak's]] video where he uses a hack to turn Parallel Universes visible. Mario is in a PU; note the lack of [[objects]].]]
A '''Parallel Universe''', or '''PU''', is an area in a map at which the game creates phantom collision for objects "outside" of the level. This is because some of the values for collision detection are truncated into the range of the real map's coordinate system, allowing some space that is intended to be [[Out of Bounds]] to become habitable.


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.
A '''Parallel Universe''', or '''PU''', is a region of space located far outside the intended map boundaries that reflects certain aspects, especially the floors and/or ceilings, of the main map. When the game looks for floors below (or ceilings above) a given object, it first "truncates" the object's position from a floating point value to a 16-bit integer value. While the range of a floating point value is infinite, the range of a 16-bit integer value is -2<sup>15</sup> = -32,768 to 2<sup>15</sup> - 1 = 32,767. If a coordinate of the object's position falls outside this range, it "wraps around". For example, if one of these floating point values is 40,000, then 40,000 - 65,536 = -25,536 will be used when determining if the object is aligned with a floor or ceiling. This gives the illusion that the floors and ceilings of the main level map are "copied" repeatedly in a uniform 3D grid, at a spacing of 65,536 units.


==Horizontal Parallel Universes==
[[File:Visible PU.png|thumb|184x184px|Frame of [[Peter Fedak|Peter Fedak's]] video where he turns Parallel Universes visible using hacks; notice the lack of [[objects]]|left]]


The collision glitch that causes horizontal PUs occurs because the casted position value used to check for [[floor]] below Mario (or an [[object]]) doesn't have enough bits to go above <math>\mathrm{7FFF}_{\mathrm{h}}</math> or below <math>\mathrm{-8000}_{\mathrm{h}}</math>, unlike Mario's actual position, which is a [[float]]. This is because the programmers did not anticipate Mario to stand faraway enough from the world origin to loop the collision check in standard gameplay, as that is intended to be Out of Bounds since no map is big enough; nor to be able to travel to such a faraway place, as that would require exorbitant amounts of speed beyond Mario's positive speed cap.
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.
 
Any multiple of <math>2^{16}</math> in Mario's actual position values will be truncated off for the floor check. Therefore, if Mario tries to reach a position faraway from the real map that causes the floor check to roll over and still detect a floor from the real map, then that space is not considered Out of Bounds and he can travel there.
 
Where <math>|p| < 2^{16}</math> and <math>k</math> is any integer, being at position <math>p + 2^{16}k</math> along the X or Z axis is equivalent to being at position <math>p</math> for the floor check. Alternatively, being at position <math>q</math> is equivalent to being at position <math>q \bmod 2^{16}</math> for the floor check.
 
Ergo, in practice, there exists an infinite grid of imperfect copies of the main map, spread out by <math>2^{16}</math> intervals. Due to the nature of the glitch, horizontal Parallel Universes do not have anything except floors, so there are no duplicate walls, ceilings, or objects. However, certain objects can be sent to PUs.


== Vertical parallel universes ==
== Vertical parallel universes ==
Line 28: Line 20:


==Travel and movement==
==Travel and movement==
[[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 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.


Since Mario's movement is split up into 4 quarter steps, and Mario cannot move [[Out of Bounds]], Mario must travel at least a '''Quadruple Parallel Universe''' distance in 1 frame, '''QPU''' for short. The QPU distance is <math>2^{16} \times 4 = 2^{18}</math> [[unit]]s. However, 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 a full 4 PU, instead ending up at some quarter-step between the QPUs, depending on where the movement is cut off. This is referred to as a '''QPU misalignment'''.
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.
 
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 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.
===Object behavior===
Spawning a [[100 Coin Star]] in a PU will softlock the game.
[[Koopa the Quick]] can be sent to a PU by strategically using bowling ball [[clone]]s to force him to accelerate backwards into OoB until his speed syncs with a PU. However, going to a PU moves him away from the bowling ball clones, so he will slowly lose speed with every jump. Koopa the Quick's behavior with normal positive speed in a PU is not currently known.
[[Bob-omb]]s and Crazy Boxes can be brought to PUs, and appear to function normally. Naturally, they also update the [[HOLP]] to the PU location.
==Vertical Parallel Universes==
A '''Vertical Parallel Universe''', or '''VPU''', is a vertical extension of the PU phenomenon. Objects behave differently depending on what checks they use for collision. While it could be assumed that VPUs are a wall collision glitch, Mario's real position is used for the wall check, so he cannot experience duplicate walls at all in PUs. In addition, floor and ceiling collision may extend vertically into VPUs, causing some objects to experience their hitboxes.
Since Mario's Y position cannot exceed 20,000 (the default ceiling detection value) in most circumstances, there are only two ways to reach a positive vertical PU: Hyper Speed Flying, and Platform Release Displacement. Negative vertical PUs can be reached with those methods or the Overflow Jump.
In positive VPUs (above the real map), Mario is (correctly) detected as being too high above real map floors to stand on PU duplicates, so he falls through. He is also detected as being high above [[ceiling]]s, thereby putting him in their hitboxes and constricting his movement. The game also uses Mario's real position to check for walls, so he can't experience any duplicate walls in VPUs. Therefore, positive VPUs are entirely ceiling.
In negative VPUs (below the real map), Mario is detected as being below real map floors, so he is snapped up onto the horizontal PU grid upon a floor collision. He is also detected as being far below ceilings, so ceilings have no effect. Again, the game also uses Mario's real position to check for walls, so he can't experience duplicate walls in VPUs. Therefore, negative VPUs are entirely floor.
===Object behavior===
[[Scuttlebug]]s can be raised through VPUs. In a VPU, they are considered Out of Bounds, so they can't move laterally. Much like Mario with negative VPU floors, a Scuttlebug will snap to a main map wall if it interacts with a VPU duplicate.


== Floating point truncation crash ==
== Floating point truncation crash ==
Line 66: Line 42:
* Mario's quarter step gets cancelled while on the ground
* Mario's quarter step gets cancelled while on the ground
* Mario collides with a wall head-on with PU speed
* Mario collides with a wall head-on with PU speed
== Miscellaneous behavior ==
Certain objects and graphics behave interestingly while in parallel universes. For example:
* Shadows and coin twinkle effects are glitchy
* Spawning a 100 coin star will [[Softlock|softlock]] the game

Navigation menu