?q=+<%2Fcanvas>+<%2Fcanvas>+<%2Fdiv>++++++Credits+<%2Fbutton>++
+TwilightPB<%2Fa>+—+Porting<%2Fspan>+<%2Fdiv>+
+ComplexPlane<%2Fa>+—+Renderer<%2Fspan>+<%2Fdiv>+
+camthesaxman+—+SMB1+Decompilation<%2Fspan>+<%2Fdiv>++SMB2+Decompilation<%2Fdiv>++
ComplexPlane<%2Fdiv>+
CraftedCart<%2Fdiv>+
EELI<%2Fdiv>+
Eucalyptus<%2Fdiv>+
The+BombSquad<%2Fdiv>+<%2Fdiv>+<%2Fdiv>+
+Amusement+Vision+—+Original+game<%2Fspan>+<%2Fdiv>+
+SMB+Custom+Level+Community<%2Fa>+—+Tools+and+resources<%2Fspan>+<%2Fdiv>+<%2Fdiv>+<%2Fdiv>+Settings<%2Fbutton>+<%2Fdiv>+++Discord+Server<%2Fspan>+<%2Fa>+<%2Fdiv>++

Super+Monkey+Ball<%2Fh1>+

Select+a+mode.<%2Fp>+++Singleplayer<%2Fspan>+Course+play+and+practice<%2Fspan>+<%2Fbutton>+<%2Fdiv>+++Online+Multiplayer<%2Fspan>+0+players+online<%2Fspan>+<%2Fbutton>+<%2Fdiv>+++Replays<%2Fspan>+Saved+local+replay+library<%2Fspan>+<%2Fbutton>+<%2Fdiv>++Start<%2Fbutton>+Resume<%2Fbutton>+<%2Fdiv>++

Controls%3A+WASD+%2F+Arrow+Keys+%3D+tilt%2C+R+%3D+reset+stage%2C+N+%3D+skip+stage<%2Fdiv>+
If+you+have+a+controller+plugged+in%2C+it+should+work+too.<%2Fdiv>+<%2Fdiv>+Build+EC5B97599E75<%2Fdiv>+<%2Fdiv>+++Back<%2Fbutton>+
+

Singleplayer<%2Fh1>+

Pick+course+play+or+practice.<%2Fp>+<%2Fdiv>+<%2Fdiv>+++Course+Play<%2Fspan>+Start+from+floor+1<%2Fspan>+<%2Fbutton>+<%2Fdiv>+++Practice<%2Fspan>+Choose+any+stage%2C+then+repeat+it<%2Fspan>+<%2Fbutton>+<%2Fdiv>+<%2Fdiv>+++Back<%2Fbutton>+

+

Course+Play<%2Fh1>+

Choose+source+and+difficulty.<%2Fp>+<%2Fdiv>+<%2Fdiv>+++Game+Source<%2Fspan>+Super+Monkey+Ball+1<%2Foption>Super+Monkey+Ball+2<%2Foption>Super+Monkey+Ball+2+(MB2WS)<%2Foption><%2Fselect>+<%2Flabel>+<%2Fdiv>+++Difficulty<%2Fspan>+Beginner<%2Foption>Advanced<%2Foption>Expert<%2Foption>Beginner+(Extra)<%2Foption>Advanced+(Extra)<%2Foption>Expert+(Extra)<%2Foption>Master<%2Foption><%2Fselect>+<%2Flabel>+<%2Fdiv>++Start+Course<%2Fbutton>+<%2Fdiv>+<%2Fdiv>+++PAUSE<%2Fdiv>++Resume<%2Fbutton>+Retry<%2Fbutton>+Save+Replay<%2Fbutton>+View+Stage<%2Fbutton>+Return+to+Main+Menu<%2Fbutton>+<%2Fdiv>+<%2Fdiv>+<%2Fdiv>+++Back<%2Fbutton>+

+Level+Select<%2Fh1>+Choose+the+game+source%2C+course%2C+and+stage.<%2Fp>+<%2Fdiv>+<%2Fdiv>+++Game+Source<%2Fspan>++Super+Monkey+Ball+1<%2Foption>+Super+Monkey+Ball+2<%2Foption>+Super+Monkey+Ball+2+(MB2WS)<%2Foption>+<%2Fselect>+<%2Flabel>+<%2Fdiv>+++

Packs<%2Fh2>+<%2Fdiv>++Load+Pack<%2Fbutton>++Zip+File<%2Fbutton>+Folder<%2Fbutton>+<%2Fdiv>+No+pack+loaded<%2Fdiv>+<%2Fdiv>+++<%2Fdiv>+++

Stage+Selection<%2Fh2>+<%2Fdiv>+++Difficulty<%2Fspan>++Beginner<%2Foption>+Advanced<%2Foption>+Expert<%2Foption>+Beginner+(Extra)<%2Foption>+Advanced+(Extra)<%2Foption>+Expert+(Extra)<%2Foption>+Master<%2Foption>+<%2Fselect>+<%2Flabel>++Stage<%2Fspan>+PLAIN<%2Foption>DIAMOND<%2Foption>HAIRPIN<%2Foption>WIDE+BRIDGE<%2Foption>BONUS+BASIC<%2Foption>SLOPES<%2Foption>STEPS<%2Foption>BLOCKS<%2Foption>JUMP+SINGLE<%2Foption>EXAM+A<%2Foption><%2Fselect>+<%2Flabel>+<%2Fdiv>+++SMB2+Mode<%2Fspan>++Challenge<%2Foption>+Story<%2Foption>+<%2Fselect>+<%2Flabel>+++Challenge+Difficulty<%2Fspan>+Beginner<%2Foption>Advanced<%2Foption>Expert<%2Foption>Beginner+Extra<%2Foption>Advanced+Extra<%2Foption>Expert+Extra<%2Foption>Master<%2Foption>Master+Extra<%2Foption><%2Fselect>+<%2Flabel>++Challenge+Stage<%2Fspan>+Stage+1<%2Foption>Stage+2<%2Foption>Stage+3<%2Foption>Stage+4<%2Foption>Stage+5<%2Foption>Stage+6<%2Foption>Stage+7<%2Foption>Stage+8<%2Foption>Stage+9<%2Foption>Stage+10<%2Foption><%2Fselect>+<%2Flabel>+<%2Fdiv>+++Story+World<%2Fspan>+World+1<%2Foption>World+2<%2Foption>World+3<%2Foption>World+4<%2Foption>World+5<%2Foption>World+6<%2Foption>World+7<%2Foption>World+8<%2Foption>World+9<%2Foption>World+10<%2Foption><%2Fselect>+<%2Flabel>++Story+Stage<%2Fspan>+Stage+1<%2Foption>Stage+2<%2Foption>Stage+3<%2Foption>Stage+4<%2Foption>Stage+5+-+PLAIN<%2Foption>Stage+6+-+DIAMOND<%2Foption>Stage+7+-+HAIRPIN<%2Foption>Stage+8+-+WIDE+BRIDGE<%2Foption>Stage+9+-+SLOPES<%2Foption>Stage+10+-+STEPS<%2Foption><%2Fselect>+<%2Flabel>+<%2Fdiv>+<%2Fdiv>+<%2Fdiv>++Confirm<%2Fbutton>+Return+to+main+menu+with+this+selection.<%2Fdiv>+<%2Fdiv>+++

Lobby+Stage<%2Fh2>+<%2Fdiv>+Choose<%2Fbutton>+Updates+the+lobby+selection+without+starting+the+match.<%2Fdiv>+<%2Fdiv>+<%2Fdiv>+++Back<%2Fbutton>+
+

Replays<%2Fh1>+

Local+replay+library.<%2Fp>+<%2Fdiv>+<%2Fdiv>+++Import+Replay<%2Fbutton>+Refresh<%2Fbutton>+Replays%3A+0+saved<%2Fdiv>+<%2Fdiv>++

No+saved+replays.<%2Fdiv><%2Fdiv>+<%2Fdiv>+<%2Fdiv>++++Back<%2Fbutton>+
+

Online+Multiplayer<%2Fh1>+

Join+public+lobbies%2C+invite+friends%2C+or+host+your+own+room.<%2Fp>+<%2Fdiv>+<%2Fdiv>++++

Public+Lobbies<%2Fh2>+Refresh<%2Fbutton>+<%2Fdiv>+Lobby%3A+0+room(s)<%2Fdiv>+<%2Fdiv>+<%2Fdiv>+++

Join+Private+Room<%2Fh2>+<%2Fdiv>+++Join<%2Fbutton>+<%2Fdiv>+<%2Fdiv>+++

Host+Room<%2Fh2>+<%2Fdiv>++Create+Room<%2Fbutton>+++Public<%2Fspan>+<%2Flabel>+<%2Fdiv>+++<%2Fdiv>+<%2Fdiv>+<%2Fdiv>++++

Lobby<%2Fh2>+Copy+Room+Code<%2Fbutton>+Leave+Room<%2Fbutton>+<%2Fdiv>+<%2Fdiv>++Lobby+Name<%2Fspan>++<%2Flabel>+<%2Fdiv>+<%2Fdiv>+++

Players<%2Fh2>+<%2Fdiv>+<%2Fdiv>+<%2Fdiv>+++

Match+Settings<%2Fh2>+<%2Fdiv>++Selected+Stage<%2Fspan>++Unknown<%2Fspan>+<%2Fbutton>+<%2Fdiv>++Gamemode<%2Fspan>+Standard<%2Foption>Chained+Together<%2Foption><%2Fselect>+<%2Flabel>+<%2Fdiv>++Max+Players<%2Fspan>++2<%2Foption>+3<%2Foption>+4<%2Foption>+5<%2Foption>+6<%2Foption>+7<%2Foption>+8<%2Foption>+9<%2Foption>+10<%2Foption>+11<%2Foption>+12<%2Foption>+13<%2Foption>+14<%2Foption>+15<%2Foption>+16<%2Foption>+<%2Fselect>+<%2Flabel>++Increased+max+players+may+negatively+impact+gameplay+performance.+<%2Fdiv>+++Player+Collision<%2Fspan>+<%2Flabel>+++Infinite+Time<%2Fspan>+<%2Flabel>+++Lock+Room<%2Fspan>+<%2Flabel>+Only+the+host+can+change+match+settings.<%2Fdiv>+<%2Fdiv>++Start+Match<%2Fbutton>+<%2Fdiv>+<%2Fdiv>+<%2Fdiv>+++

Chat<%2Fh2>+<%2Fdiv>+<%2Fdiv>+++Send<%2Fbutton>+<%2Fdiv>+<%2Fdiv>+<%2Fdiv>+++
+

Match+Menu<%2Fh1>+

Multiplayer+session+controls.<%2Fp>+<%2Fdiv>+<%2Fdiv>+++

Players<%2Fh2>+<%2Fdiv>+<%2Fdiv>+<%2Fdiv>+++Resume<%2Fbutton>+Return+to+Lobby<%2Fbutton>+Leave+Match<%2Fbutton>+<%2Fdiv>+<%2Fdiv>+<%2Fdiv>+++Back<%2Fbutton>+
+

Settings<%2Fh1>+

Adjust+controls%2C+audio%2C+and+multiplayer+preferences.<%2Fp>+<%2Fdiv>+<%2Fdiv>++Input<%2Fbutton>+Audio<%2Fbutton>+Multiplayer<%2Fbutton>+<%2Fdiv>+++++

Controls<%2Fh2>+<%2Fdiv>++Control+Mode<%2Fspan>++<%2Fselect>+Recalibrate<%2Fbutton>+++<%2Fdiv>+<%2Fdiv>+<%2Fdiv>+<%2Fdiv>+<%2Fdiv>+<%2Flabel>++++Gyro+Sensitivity+25°<%2Foutput><%2Fspan>++<%2Flabel>+Tap+the+screen+during+gameplay+to+recalibrate+gyro.<%2Fdiv>+<%2Fdiv>+++Virtual+Joystick+Size+1.0x<%2Foutput><%2Fspan>++<%2Flabel>+<%2Fdiv>+++Input+Falloff+1<%2Foutput><%2Fspan>++<%2Flabel>++++<%2Fpath>+<%2Fsvg>+<%2Fdiv>++<%2Fdiv>+<%2Fdiv>+<%2Fdiv>+<%2Fdiv>+<%2Fdiv>++A+lower+value+makes+joystick+input+more+linear.+Higher+makes+small+adjustments+more+precise.+<%2Fdiv>+<%2Fdiv>++Calibrate+Stick<%2Fbutton>+<%2Fdiv>+<%2Fdiv>+<%2Fdiv>+<%2Fdiv>++++

Audio<%2Fh2>+<%2Fdiv>+++Music+Volume+50%25<%2Foutput><%2Fspan>++<%2Flabel>++SFX+Volume+30%25<%2Foutput><%2Fspan>++<%2Flabel>++Announcer+Volume+30%25<%2Foutput><%2Fspan>++<%2Flabel>+<%2Fdiv>+<%2Fdiv>+<%2Fdiv>++++

Profile<%2Fh2>+<%2Fdiv>++Display+Name<%2Fspan>++<%2Flabel>++<%2Fdiv>+++Clear+Avatar<%2Fbutton>+<%2Fdiv>+<%2Fdiv>+<%2Fdiv>+PNG%2FJPG%2FWebP+only.+Max+512x512+and+150kb.<%2Fdiv>+++Hemisphere+1+Color<%2Fspan>++<%2Flabel>++Hemisphere+2+Color<%2Fspan>++<%2Flabel>+<%2Fdiv>+++Hemisphere+1+Texture<%2Fspan>++Clear+Hemisphere+1+Texture<%2Fbutton>+<%2Flabel>++Hemisphere+2+Texture<%2Fspan>++Clear+Hemisphere+2+Texture<%2Fbutton>+<%2Flabel>+<%2Fdiv>++++Player+Texture+(4x3+spritesheet)<%2Fspan>+Download+template<%2Fa>+<%2Fspan>++Clear+Player+Texture<%2Fbutton>+<%2Flabel>+<%2Fdiv>+<%2Fdiv>+Ball+textures+sync+in+multiplayer.+Max+512x512+and+100kb+per+hemisphere%2C+max+1024x768+and+200kb+per+player+spritesheet<%2Fdiv>++Ball+Preview<%2Fdiv>++<%2Fcanvas>+<%2Fdiv>+<%2Fdiv>+<%2Fdiv>+<%2Fdiv>+++

Privacy<%2Fh2>+<%2Fdiv>+++Hide+Player+Names<%2Fspan>+<%2Flabel>+++Hide+Lobby+Names<%2Fspan>+<%2Flabel>+++Hide+Remote+Ball+Textures<%2Fspan>+<%2Flabel>+Replaces+names+with+deterministic+aliases+for+safer+sharing.<%2Fdiv>+<%2Fdiv>+<%2Fdiv>+<%2Fdiv>+<%2Fdiv>+<%2Fdiv>++<%2Fdiv>+++<%2Fdiv>+<%2Fdiv>+++<%2Fdiv>+<%2Fdiv>+<%2Fdiv>+<%2Fdiv>++Menu+<%2Fbutton>++Fullscreen+<%2Fbutton>+++

Stick+Calibration<%2Fh2>+

Move+the+left+stick+in+slow+circles+to+map+the+gate.+Use+the+full+range.<%2Fp>+<%2Fcanvas>+Click+anywhere+or+press+any+controller+button+to+close.<%2Fdiv>+<%2Fdiv>+<%2Fdiv>++const+field+%3D+document.getElementById(%27control-mode-field%27)%3B+const+select+%3D+document.getElementById(%27control-mode%27)%3B+const+hasTouch+%3D+(%27ontouchstart%27+in+window)+%7C%7C+((navigator.maxTouchPoints+%3F%3F+0)+>+0)%3B+const+hasCoarsePointer+%3D+window.matchMedia%3F.(%27(pointer%3A+coarse)%27)%3F.matches+%3F%3F+false%3B+const+hasGyro+%3D+typeof+window.DeviceOrientationEvent+!%3D%3D+%27undefined%27+%26%26+(hasTouch+%7C%7C+hasCoarsePointer)%3B+const+gyroButton+%3D+document.getElementById(%27gyro-recalibrate%27)%3B+const+gyroHelper+%3D+document.getElementById(%27gyro-helper%27)%3B+if+(!field+%7C%7C+!select+%7C%7C+(!hasTouch+%26%26+!hasGyro))+%7B+field%3F.classList.add(%27hidden%27)%3B+%7D+else+%7B+const+options+%3D+%5B%5D%3B+if+(hasGyro)+options.push(%7B+value%3A+%27gyro%27%2C+label%3A+%27Gyro%27+%7D)%3B+if+(hasTouch)+options.push(%7B+value%3A+%27touch%27%2C+label%3A+%27Touchscreen%27+%7D)%3B+if+(options.length+%3D%3D%3D+0)+%7B+field.classList.add(%27hidden%27)%3B+%7D+else+%7B+field.classList.remove(%27hidden%27)%3B+select.innerHTML+%3D+%27%27%3B+for+(const+opt+of+options)+%7B+const+el+%3D+document.createElement(%27option%27)%3B+el.value+%3D+opt.value%3B+el.textContent+%3D+opt.label%3B+select.appendChild(el)%3B+%7D+const+key+%3D+%27smb_control_mode%27%3B+const+saved+%3D+localStorage.getItem(key)%3B+if+(saved+%26%26+options.some((o)+%3D>+o.value+%3D%3D%3D+saved))+%7B+select.value+%3D+saved%3B+%7D+else+%7B+select.value+%3D+hasTouch+%3F+%27touch%27+%3A+%27gyro%27%3B+localStorage.setItem(key%2C+select.value)%3B+%7D+const+syncGyroUi+%3D+()+%3D>+%7B+const+showGyro+%3D+select.value+%3D%3D%3D+%27gyro%27%3B+gyroButton%3F.classList.toggle(%27hidden%27%2C+!showGyro)%3B+gyroHelper%3F.classList.toggle(%27hidden%27%2C+!showGyro)%3B+%7D%3B+syncGyroUi()%3B+const+requestGyroPermission+%3D+async+()+%3D>+%7B+const+requests+%3D+%5B%5D%3B+const+orientationPermission+%3D+window.DeviceOrientationEvent%3F.requestPermission%3B+if+(typeof+orientationPermission+%3D%3D%3D+%27function%27)+%7B+requests.push(orientationPermission.call(window.DeviceOrientationEvent))%3B+%7D+const+motionPermission+%3D+window.DeviceMotionEvent%3F.requestPermission%3B+if+(typeof+motionPermission+%3D%3D%3D+%27function%27)+%7B+requests.push(motionPermission.call(window.DeviceMotionEvent))%3B+%7D+if+(requests.length+%3D%3D%3D+0)+%7B+return+%27granted%27%3B+%7D+try+%7B+const+results+%3D+await+Promise.all(requests)%3B+return+results.every((result)+%3D>+result+%3D%3D%3D+%27granted%27)+%3F+%27granted%27+%3A+%27denied%27%3B+%7D+catch+%7B+return+%27denied%27%3B+%7D+%7D%3B+select.addEventListener(%27change%27%2C+async+()+%3D>+%7B+let+next+%3D+select.value%3B+%2F%2F+iOS%3A+gyro+requires+a+user-gesture+permission+prompt.+if+(next+%3D%3D%3D+%27gyro%27)+%7B+const+result+%3D+await+requestGyroPermission()%3B+if+(result+!%3D%3D+%27granted%27)+%7B+next+%3D+hasTouch+%3F+%27touch%27+%3A+%27gyro%27%3B+select.value+%3D+next%3B+%7D+%7D+localStorage.setItem(key%2C+next)%3B+syncGyroUi()%3B+%7D)%3B+%7D+%7D+<%2Fscript>+