20
edits
m (reference and added WF as possible) |
(Corrected BitS to have no PU access and no HSW spot on the table.) |
||
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.]] | ||
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. The range of a floating point value is much larger than the range of a 16-bit integer value (which 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. | 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. The range of a floating point value is much larger than the range of a 16-bit integer value (which 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. | ||
[[File:Visible PU.png|thumb|184x184px|Frame of Peter Fedak's video where he turns Parallel Universes visible using hacks; notice the lack of [[objects]]|left]] | [[File:Visible PU.png|thumb|184x184px|Frame of Peter Fedak's video where he turns Parallel Universes visible using hacks; notice the lack of [[objects]]|left]] | ||
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. | ||
Line 114: | Line 111: | ||
|- | |- | ||
|[[Bowser in the Sky]] | |[[Bowser in the Sky]] | ||
|No | |No | ||
| | |No | ||
| | |||
|- | |- | ||
|[[The Princess's Secret Slide]] | |[[The Princess's Secret Slide]] | ||
Line 175: | Line 172: | ||
|} | |} | ||
|} | |} | ||
== Vertical Parallel Universes == | == Vertical Parallel Universes == | ||
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. | 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. | ||
Line 187: | Line 182: | ||
In the negative direction, we can use a [[Negative Jump|negative jump]] to jump downward with large amounts of negative speed, or platform displacement. | In the negative direction, we can use a [[Negative Jump|negative jump]] to jump downward with large amounts of negative speed, or platform displacement. | ||
==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]] | ||
[[File:PUBLJ.gif|thumb|Mario [[BLJ]]ing to a PU]] | [[File:PUBLJ.gif|thumb|Mario [[BLJ]]ing to 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 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. These PU axis integers are Mario's coordinates on the PU grid. 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. These PU axis integers are Mario's coordinates on the PU grid. 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. | ||
Line 200: | Line 192: | ||
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. When Mario's position becomes large enough, this imprecision will result in the coordinates in PUs becoming so coarse that Mario cannot cross from one coordinate to the next and, eventually, will result in certain PUs being completely unaccessible. | 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. When Mario's position becomes large enough, this imprecision will result in the coordinates in PUs becoming so coarse that Mario cannot cross from one coordinate to the next and, eventually, will result in certain PUs being completely unaccessible. | ||
== Floating point truncation crash == | == Floating point truncation crash == | ||
While in theory the grid of PUs extends indefinitely, the behavior of the truncation operation becomes "undefined" when the floating point value is outside the range -2<sup>31</sup> to 2<sup>31</sup> - 1. The Nintendo 64 and [[iQue]] Player<ref>[https://youtu.be/_dAGdYd9KUY "Do Parallel Universes Crash on iQue?" by CadBrad]</ref> versions of the game crash when such a truncation is attempted. The Wii and Wii U virtual console versions of the game do not crash, though it is not currently known whether they wrap around the 32-bit integer range, or cap to the endpoints of the range. Most emulators do not properly emulate the crash, except for a specific version of Mupen64, modded to crash correctly. | While in theory the grid of PUs extends indefinitely, the behavior of the truncation operation becomes "undefined" when the floating point value is outside the range -2<sup>31</sup> to 2<sup>31</sup> - 1. The Nintendo 64 and [[iQue]] Player<ref>[https://youtu.be/_dAGdYd9KUY "Do Parallel Universes Crash on iQue?" by CadBrad]</ref> versions of the game crash when such a truncation is attempted. The Wii and Wii U virtual console versions of the game do not crash, though it is not currently known whether they wrap around the 32-bit integer range, or cap to the endpoints of the range. Most emulators do not properly emulate the crash, except for a specific version of Mupen64, modded to crash correctly. | ||
Line 212: | Line 202: | ||
* Mario's quarter step gets canceled 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 | ||
== Miscellaneous behavior == | == Miscellaneous behavior == | ||
Certain objects and graphics behave interestingly while in parallel universes. For example: | Certain objects and graphics behave interestingly while in parallel universes. For example: | ||
* Shadows and coin twinkle effects are glitchy | * Shadows and coin twinkle effects are glitchy | ||
* TODO: Add more | * TODO: Add more | ||
==References== | ==References== | ||
<references/> | <references/> | ||
[[Category:Glitches]] | [[Category:Glitches]] | ||
{{Glitches}} | {{Glitches}} |
edits