Parallel Universe: Difference between revisions

From Ukikipedia
Jump to navigation Jump to search
mNo edit summary
mNo edit summary
 
(44 intermediate revisions by 21 users not shown)
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.]]A '''Parallel Universe''', or '''PU''', is an area in a ''[[Super Mario 64]]'' map at which the game creates phantom floors despite [[Mario]] being "outside" of the level. This is because the casted position value used to check for ground below Mario doesn't have enough bits to go above 7FFF<sub>h</sub> or below -8000<sub>h</sub>, unlike Mario's actual position, which is a [[float]]. [[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]][[pannenkeok2012]]'s video "[[Fly Guy Size Manipulation]]" confirms that vertical PUs do exist as well. However, since Mario's Y position cannot exceed 20000 in most circumstances, there are only three ways to reach a positive vertical PU: Hyper Speed Flying, Platform Release Displacement, and Indefinite Owl Flight. Negative vertical PUs can be reached with Hyper Speed Flying, Platform Release Displacement, or an Overflow Jump. "[[Spawning a 100 Coin Star in a PU]]" shows that spawning a [[100 Coin Star]] in a PU will softlock the game. Note that PUs do not have anything except floors, so there are no walls, ceilings, or [[objects]].
[[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.
[[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]]|right]]
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.


Due to the extremely high speed required to travel to PUs, they are not accessible from all courses. The courses where PUs can or cannot be accessed are summarized in the tables below. Work is ongoing to try to access PUs in courses such as [[Bowser in the Fire Sea]] (via [[Bully battery]]) and demo courses (via massive [[Spawning displacement]]).
Methods to access a PU are:
*Speed:
**[[Backwards Long Jump#Elevator BLJ|EBLJ]]
**[[Hyperspeed Walking|HSW]]
**[[Hyperspeed Punching|HSP]]
**[[Bully battery|BB]]
**[[Speed conservation|Speed Conservation]]
* Displacement:
**Pole Teleport
**Platform Displacement
Note that EBLJ (and other types of BLJs), and BB (Bully battery) cannot be achieved on Shindou versions. Also, if a method requires to set [[HOLP]] in a PU, then it is only possible to do it on VC (because other versions crash if a camera is in the PU, and by locking camera on the main map, the HOLP wont update, because camera being too far is one of the cases where HOLP doesn't update).
{|
|+
!
{| class="wikitable"
|+
Main Course PU Access
!Course
!PU Access
!Access by versions
!0x A Access
!Method
|-
|[[Bob-omb Battlefield]]
|Yes
|Non-Shindou
| No
|EBLJ
|-
|[[Whomp's Fortress]]
|Yes<ref>[https://www.youtube.com/watch?v=y_gELy37HHc "Going to a vertical PU in WF" by Maria Nicolae]</ref>
|VC
|No
|Platform Displacement
|-
|[[Jolly Roger Bay]]
|Yes
|All Versions
|No
|HSW
|-
|[[Cool, Cool Mountain]]
|No
|
|No
|
|-
|[[Big Boo's Haunt]]
| Yes
|Non-Shindou
|No
|EBLJ
|-
|[[Hazy Maze Cave]]
|Yes
|All Versions
|Yes
|EBLJ, HSW
|-
|[[Lethal Lava Land]]
|Yes
|Non-Shindou
|Yes
|BB
|-
|[[Shifting Sand Land]]
|Yes
|All Versions
|Yes
|EBLJ, HSP
|-
|[[Dire, Dire Docks]]
|Yes
|Unsure if All Versions or only VC
|No
|Pole Teleport
|-
|[[Snowman's Land]]
|Yes
|All Versions
|No
|HSW
|-
|[[Wet-Dry World]]
| Yes
|All Versions
|Yes
|EBLJ, HSW
|-
|[[Tall, Tall Mountain]]
|No
|
|No
|
|-
|[[Tiny-Huge Island]]
|No
|
|No
|
|-
|[[Tick Tock Clock]]
|No
|
|No
|
|-
|[[Rainbow Ride]]
|Yes
|Non-Shindou
|No
|EBLJ
|}
!
{| class="wikitable"
|+
Special Course PU Access
!Course
!PU Access
!Access by versions
!0x A Access
!Method
|-
|[[Bowser in the Dark World]]
|No
|
|No
|
|-
|[[Bowser in the Fire Sea]]
|Yes
|Non-Shindou
|No
| EBLJ
|-
|[[Bowser in the Sky]]
|No
|
|No
|
|-
|[[The Princess's Secret Slide]]
|No
|
|No
|
|-
|[[Secret Aquarium]]
|No
|
|No
|
|-
|[[Tower of the Wing Cap]]
|No
|
|No
|
|-
|[[Cavern of the Metal Cap]]
|No
|
|No
|
|-
|[[Vanish Cap under the Moat]]
|Yes
|Non-Shindou
|No
|EBLJ
|-
|[[Wing Mario over the Rainbow]]
|No
|
|No
|
|-
|[[The Castle#Castle Grounds|Castle Grounds]]
|Yes
|All Versions
|Yes
|HSW, Speed Conservation
|-
|[[The Castle#First Floor|Castle Foyer]]
|Yes
|All Versions (for simply accessing), VC (to avoid crash)
|Yes
|Speed Conservation
|-
|[[The Castle#Basement|Castle Basement]]
|No
|
|No
|
|-
|[[The Castle#Second Floor|Castle Upstairs]]
|No
|
|No
|
|-
|[[The Castle#Courtyard|Castle Courtyard]]
| No
|
|No
|
|-
|}
|}
==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.
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.<ref>[https://www.youtube.com/watch?v=av42uJ-04A4 "Walls, Floors, and Ceilings in PUs" by Maria Nicolae]</ref>
On the other hand, when Mario is below his "nearest" floor, he will snap up to it. This means that if Mario moves to a negative vertical PU, he will usually upwarp back to the main PU grid. This is called an '''overflow jump''', or '''OJ''' for short.
It is typically difficult to get to a vertical PU. In the positive direction, there is a ceiling at ''y'' = 20,000 that prevents upward movement. We can bypass this ceiling by pressing against OoB, for example by using [[Hyperspeed Flying|hyperspeed flying]]. We can also use [[Platform Displacement|platform displacement]] or [[Indefinite Owl Flight|indefinite owl flight]] to reach a positive vertical PU.
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]]
Parallel Universe movement is comparable to movement through a five-dimensional space, as Mario can be modelled as travelling along five axes: relative X, relative Y, Z, PU X, and PU Z. This is because 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.
[[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.
 
{{Anchor|QPU}}
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. He is then "QPU misaligned."


Since Mario's movement is split up into 4 quarter steps, and Mario cannot move out of bounds, in the game's courses Mario must travel at least a '''Quadruple Parallel Universe''' distance, '''QPU''' for short. 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 a quarter-step between the QPUs depending on where the movement is cut off. This is referred to as a '''misaligned QPU'''.
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.


In "[[Angles]]" and "[[Floats]]", pannenkeok2012 demonstrated how the granularity of [[Mario]]'s [[position]] and angle can affect movement in Parallel Universes, and how this granularity makes it important to stay QPU-aligned and axis-aligned where possible.
==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.


Parallel universes tend to crash on console due to floating point exceptions. There are 4 ways the crash can happen:
While movement to PUs at coordinates this large is rarely useful, this crash can occur due to other instances of truncation in the game, even in PUs close to the main map. For example, when determining Mario's tilt while walking, the game multiples Mario's speed by 16,384 and then truncates this value. This means that the game can crash in certain conditions when Mario has a speed of about 131,000, which is below QPU speed.
* The camera leaves the main map
* Mario bonks while in a PU
* Mario's quarter step gets cancelled while on the ground
* Mario collides with a wall head-on with PU speed


== Emulation ==
While not all conditions for these types of crashes are known, there are some that come up frequently. These are when:
Most emulators (including the official [[Virtual Console]] version) do not correctly emulate crashing due to floating point exceptions. A specialized version of Mupen64 was created that crashes when encountering floating point exceptions in order to better test PU routes.
*The camera enters a PU
*Mario bonks while in a PU
*Mario's quarter step gets canceled while on the ground
*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
*TODO: Add more
==References==
<references />
[[Category:Glitches]]
{{Glitches}}

Latest revision as of 07:21, 18 June 2024

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 -215 = -32,768 to 215 - 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.

Frame of Peter Fedak's video where he turns Parallel Universes visible using hacks; notice the lack of objects

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.

Due to the extremely high speed required to travel to PUs, they are not accessible from all courses. The courses where PUs can or cannot be accessed are summarized in the tables below. Work is ongoing to try to access PUs in courses such as Bowser in the Fire Sea (via Bully battery) and demo courses (via massive Spawning displacement).

Methods to access a PU are:


Note that EBLJ (and other types of BLJs), and BB (Bully battery) cannot be achieved on Shindou versions. Also, if a method requires to set HOLP in a PU, then it is only possible to do it on VC (because other versions crash if a camera is in the PU, and by locking camera on the main map, the HOLP wont update, because camera being too far is one of the cases where HOLP doesn't update).

Main Course PU Access
Course PU Access Access by versions 0x A Access Method
Bob-omb Battlefield Yes Non-Shindou No EBLJ
Whomp's Fortress Yes[1] VC No Platform Displacement
Jolly Roger Bay Yes All Versions No HSW
Cool, Cool Mountain No No
Big Boo's Haunt Yes Non-Shindou No EBLJ
Hazy Maze Cave Yes All Versions Yes EBLJ, HSW
Lethal Lava Land Yes Non-Shindou Yes BB
Shifting Sand Land Yes All Versions Yes EBLJ, HSP
Dire, Dire Docks Yes Unsure if All Versions or only VC No Pole Teleport
Snowman's Land Yes All Versions No HSW
Wet-Dry World Yes All Versions Yes EBLJ, HSW
Tall, Tall Mountain No No
Tiny-Huge Island No No
Tick Tock Clock No No
Rainbow Ride Yes Non-Shindou No EBLJ
Special Course PU Access
Course PU Access Access by versions 0x A Access Method
Bowser in the Dark World No No
Bowser in the Fire Sea Yes Non-Shindou No EBLJ
Bowser in the Sky No No
The Princess's Secret Slide No No
Secret Aquarium No No
Tower of the Wing Cap No No
Cavern of the Metal Cap No No
Vanish Cap under the Moat Yes Non-Shindou No EBLJ
Wing Mario over the Rainbow No No
Castle Grounds Yes All Versions Yes HSW, Speed Conservation
Castle Foyer Yes All Versions (for simply accessing), VC (to avoid crash) Yes Speed Conservation
Castle Basement No No
Castle Upstairs No No
Castle Courtyard No No

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.

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.[2]

On the other hand, when Mario is below his "nearest" floor, he will snap up to it. This means that if Mario moves to a negative vertical PU, he will usually upwarp back to the main PU grid. This is called an overflow jump, or OJ for short.

It is typically difficult to get to a vertical PU. In the positive direction, there is a ceiling at y = 20,000 that prevents upward movement. We can bypass this ceiling by pressing against OoB, for example by using hyperspeed flying. We can also use platform displacement or indefinite owl flight to reach a positive vertical PU.

In the negative direction, we can use a negative jump to jump downward with large amounts of negative speed, or platform displacement.

Travel and movement

Mario looking to the original map from a PU
Mario BLJing 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.

Mario's movement is split up into four 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. He is then "QPU misaligned."

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

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 -231 to 231 - 1. The Nintendo 64 and iQue Player[3] 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 movement to PUs at coordinates this large is rarely useful, this crash can occur due to other instances of truncation in the game, even in PUs close to the main map. For example, when determining Mario's tilt while walking, the game multiples Mario's speed by 16,384 and then truncates this value. This means that the game can crash in certain conditions when Mario has a speed of about 131,000, which is below QPU speed.

While not all conditions for these types of crashes are known, there are some that come up frequently. These are when:

  • The camera enters a PU
  • Mario bonks while in a PU
  • Mario's quarter step gets canceled while on the ground
  • 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
  • TODO: Add more

References