Pistons (2in1)

## Pistons

Stage Overview

**Pistons** is a reconstruction of the level of the same name in vanilla Super Monkey Ball 2. It is the 31st Expert stage.

## Description

The stage consists of a flat geometric mesh resembling a triangular pentagon, with 63 triangles cut out in a neat pattern, with the only triangles that aren't filled in being the first one (which the player starts on) and another triangle attached to the top of the stage, where the goal rests. The triangles are all separated by a bunch of wires that are slightly smaller than the ball. There are a bunch of triangular prisms under the stage, each one corresponding to one of the aforementioned holes. Every second, a set of pistons will pop out in a wave pattern from the piston in the very center to the outermost pistons. This pattern repeats every 8 seconds, with the only exception being that the very center piston will keep popping up every two seconds, hence why there's a banana bunch next to it. The tops of the pistons are beveled to make it more likely that you'll get thrown off the stage if you get hit by one.

## Goal tutorial

Firstly, it's important to keep in mind that all of the wires that are between the pistons are smaller than the ball, and thus, should a piston pop up while you're crossing one, it's guaranteed you'll be spiked off of the stage. In order to safely pass through the wave of pistons as it's coming out through the center, wait in one of the six-sided intersections instead, where the bananas are (not unlike Totalitarianism). The most common route to the goal is to head between the first two triangle holes from the bottom left, then veer in an up right direction until you get to the middle of the stage, passing by four more intersections along the way and stopping at the fifth one. Wait for the wave of pistons to pop up, then face the goal and charge straight towards it. A riskier but faster strat involves riding the outer edges of the stage, which are in fact twice as skinny as the other path. Roll in an up-left direction on the skinny paths, passing four incomplete intersections, then immediately turn up-right and charge towards the goal. If you're quick, this should net you a 24.

Occasionally, you might fall off of the mesh and onto the pistons below. There is a way to save yourself if this happens, but it requires really good air control and it might be easier to just fall off and try again (unless you're running low on lives). Let the piston you're on propel you into the air, paying attention to your minimap, and try to land in one of the intersections, on top of one of the pistons, or even in the goal area. If your ball hits any of the edges of the stage, even the inner edges of the triangle holes, most likely you won't be able to survive.

## Differences from vanilla

The original has a steep ramp that leads up to the level. This was thrown out to make the non-moving part of the stage perfectly co-planar and thus, able to support reflections, which was necessary for getting the level to match Arctic's aesthetics closely. Also, to eliminate any need to wait at the start of the level, the cycle of the wave was offset two seconds early. This means that by the time the player lands, the outermost set of pistons have already went back under the stage, optimizing all possible RTA/IL strats.

## Glitches

If you hit "View Stage", you'll notice that there are somehow incomplete meshes of pistons frozen in place, with the top, flat faces missing. Even weirder still, if you pause at a later time, the position of these broken pistons will change. What's going on here is these broken pistons match exactly with the frame you paused on. These broken pistons are actually background objects that tilt with the stage, commonly referred to as foreground objects, and they were also given a special tag that allows them to remain perfectly in sync with the stage objects at the cost of not having working animation in "View Stage". (If this special tag was removed, not only would they be desynced from the second attempt and onwards, but they'd go twice as fast in "View Stage".) They're also mere millimetres smaller than the actual pistons.

The purpose of these seemingly pointless foreground objects is to give the pistons legitimate reflections in the mirror floor. Unlike SMB1, there is no way to get real stage objects to have reflections unless the game's code is modified (and even then, there have been no findings on how to fix this). To make things worse, goal frames are considered stage objects for some reason (presumably so that they can support casting shadows onto the stage) and as a result, if a goal alone is above a mirror surface, only the timer, party ball, and goal tape will have reflections. This physically-incorrect glitch is seen on many of Monkeyed Ball 2's Bonus and Master Extra stages such as Field, Stunt Ramp, WWIAFTB, Towers, and Swiss. It's even present in STAGE 195 in vanilla Super Monkey Ball 2's debug files, the only stage with a mirror surface.

**However**, every other type of object in the game, from the ball and monkey, to background objects, to stage *placeables* (such as bananas, bumpers, and switches), will always have reflections. In Super Monkey Ball 2in1, switches are misused in nearly every stage with a mirror floor, with the only exceptions being Entangled Path, Serial Jump, Mountain, Centrifugal, and Helix because there's no stage objects or goals above the mirror floor(s). Every other stage with reflections uses switches that are attached to dummy item groups. Because the game takes "BUTTON\_FF"/"BUTTON\_FR"/"BUTTON\_P"/"BUTTON\_R"/"BUTTON\_S" from the **stage files** for what the switches visually looks like instead of a common source (the fallback is a large giant GameCube "A" button), switch models in SMB2in1 are specially tailored for the stage to match existing stage objects that should have reflections, and usually one of the switches is an identical copy of the goal frame. Furthermore, the collision for the switches is determined by the model's bounding sphere radius and center. The bounding spheres for switch models are typically made really big (anywhere from 200 to 1000), and the center is typically really high in the air to make it so that the only possible way to activate the switches is with a moonjump cheat. This allows all of the levels with reflective floors to play seamlessly and look physically correct.

Pistons, however, is a special case. Using switches for the piston reflections bloated the amount of triangles in the level and caused lag when play testing, mostly because the piston reflections are tailored to gradually erase the prisms from the bottom if they go more than halfway under the mirror plane, and switches also show up in the mini-map. As a result, the piston reflections were made foreground objects instead, with the only switch in this stage being the goal frame. This is the only stage in SMB2in1 with custom animated foreground objects for this purpose. Despite not working in View Stage, they work perfectly fine in-game, and the player may never even notice that there's tilting background objects hidden inside of the pistons.

## Trivia

* There are 10 copies of this stage in the debug files (spanning from IDs 366-375), one for each SMB1 background, with the stage retextured to match. This includes an identical copy of the Arctic variant (id 371, the ID that's used in game is 291). Why this is present in the game files is unclear.
* Incidentally, SMB2 SMB1 Style is not the first pack to put Pistons into the Arctic world. An Arctic reskin of Pistons can also be found in NGUU Story Pack (click here for a video of this), since its World 7 is set in the Arctic world. However, this reskin is much more simpler, only switching textures in the .tpl and changing the background: The physical stage itself is identical to how it plays in vanilla SMB2, complete with the starting bridge, and thus cannot be considered a custom stage. Incidentally, NGUU Story Pack's World 7 also contains Arctic reskins of Soft Cream and Entangled Path, two stages that ALSO appear in the Arctic region for SMB2 SMB1 Style.