Parallel Universe: Difference between revisions

From Ukikipedia
Jump to navigation Jump to search
(test please ignore)
mNo edit summary
Line 28: Line 28:


==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]]



Revision as of 02:24, 24 August 2018

A diagram of Parallel Universe movement in Hazy Maze Cave, after Mario has returned to the main map.
Frame of 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.

Horizontal Parallel Universes

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 Failed to parse (SVG (MathML can be enabled via browser plugin): Invalid response ("Math extension cannot connect to Restbase.") from server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \mathrm{7FFF}_{\mathrm{h}}} or below Failed to parse (SVG (MathML can be enabled via browser plugin): Invalid response ("Math extension cannot connect to Restbase.") from server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \mathrm{-8000}_{\mathrm{h}}} , 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.

Any multiple of Failed to parse (SVG (MathML can be enabled via browser plugin): Invalid response ("Math extension cannot connect to Restbase.") from server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle 2^{16}} 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 Failed to parse (SVG (MathML can be enabled via browser plugin): Invalid response ("Math extension cannot connect to Restbase.") from server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle |p| < 2^{16}} and Failed to parse (SVG (MathML can be enabled via browser plugin): Invalid response ("Math extension cannot connect to Restbase.") from server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle k} is any integer, being at position Failed to parse (SVG (MathML can be enabled via browser plugin): Invalid response ("Math extension cannot connect to Restbase.") from server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle p + 2^{16}k} along the X or Z axis is equivalent to being at position Failed to parse (SVG (MathML can be enabled via browser plugin): Invalid response ("Math extension cannot connect to Restbase.") from server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle p} for the floor check. Alternatively, being at position Failed to parse (SVG (MathML can be enabled via browser plugin): Invalid response ("Math extension cannot connect to Restbase.") from server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle q} is equivalent to being at position Failed to parse (SVG (MathML can be enabled via browser plugin): Invalid response ("Math extension cannot connect to Restbase.") from server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle q \bmod 2^{16}} for the floor check.

Ergo, in practice, there exists an infinite grid of imperfect copies of the main map, spread out by Failed to parse (SVG (MathML can be enabled via browser plugin): Invalid response ("Math extension cannot connect to Restbase.") from server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle 2^{16}} 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

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.

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.

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, in certain circumstances, upwarp back to the main map. This is called an overflow jump.

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

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 Failed to parse (SVG (MathML can be enabled via browser plugin): Invalid response ("Math extension cannot connect to Restbase.") from server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle 2^{16} \times 4 = 2^{18}} units. 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.

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 clones 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-ombs 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 ceilings, 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

Scuttlebugs 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

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 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. Nothing is currently known about iQue version's behavior in this case, since the usual RTA-viable methods of triggering this crash (BLJ and getting a bully stuck out of bounds) were patched in this version. 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 cancelled while on the ground
  • Mario collides with a wall head-on with PU speed