About Map Rando
Super Metroid Map Rando randomly arranges the rooms of the classic SNES game Super Metroid while ensuring they fit together in a geometrically consistent way. The in-game map accurately reflects the arrangement of the rooms, allowing players to track and make sense of the randomized world as they explore. Finding and activating map stations will help the player gain more information to decide where to go.
Map randomization create unique challenges and puzzles that players must solve. On the higher
difficulty settings, there are many tricky techniques that may be required in order to beat the game. Players can
customize the difficulty settings to select individual techniques that they know how to do. An interactive spoiler
map is available, allowing players to get a hint in case they get stumped.
To beat the game, the player must complete the required objectives, defeat Mother Brain, and escape by returning
to the Ship. By default, the objectives are to defeat the bosses Kraid, Phantoon, Draygon, and Ridley.
Completing the objectives opens the way to reach Mother Brain.
Even on lower difficulty settings, one consequence of map randomization is that players will
likely encounter risks of dying to powerful enemies while they have few or no items, or of getting stuck in places they
can't get out of. The randomizer includes many features that reduce these risks but do not eliminate them
(for more detail and a full list of changes, see below):
- Gray doors do not immediately close behind Samus when entering a room. This allows the player a chance to
turn around if they encounter a boss they are not prepared for.
- Hazard markings occur on certain doors, ones with immediate risk of death or softlock on the other side.
- The logic is designed so that going down a one-way path is unlikely to be required.
- Samus quickly respawns after death without needing to go through the game-over menu.
- Save animations are accelerated, to incentivize saving often.
- The player can immediately reload to the last save by pressing L + R + Select + Start.
- Rolling saves allow the player to return to previous saves.
- Map progress is retained after dying or reloading, helping the player keep track of potential dangers.
Except for the doors, room layouts are generally exactly the same as the vanilla game. There
are only a handful of minor changes, described in detail below. No platforms are added or removed,
and no changes are made to special objects such as gates, bomb blocks, crumble blocks, or Power Bomb blocks.1
Even with the quality-of-life changes, it takes practice to master the wide variety of challenging
situations that can come up with randomized maps. For players that are newer to Super Metroid, before
trying Map Rando it is recommended to first gain some experience with the vanilla game and possibly
with another randomizer such as
VARIA Randomizer.
It is also possible to play Map Rando without the map randomization, by selecting "Vanilla map"
on the Generate page.
To help players learn the tricks which are possible in this game, a library of over 1000 strat demonstration videos is available. These are integrated into the Logic pages on each release, or they can be viewed immediately as they are being developed on videos.maprando.com. Others are welcome to join in the effort of creating videos, as this project is still far from complete: anyone interested can reach out in the #development channel of the Discord.
Aside from randomizing the map and items, many small changes are made to improve quality-of-life
and adapt the game to behave "as it should" in the context of map and item randomization. The following are
the changes that are either built into the randomizer or enabled by default (See the Generate
page for more details and descriptions of all quality-of-life options, including those disabled by default):
Map enhancements
- Map tiles are modified to show the locations of doors and in-room passages or false walls.
- Non-blue doors are specifically indicated on the map.
- Special map tiles show the locations of map stations, refills, objectives, and Mother Brain.
- Items are consistently marked using dots. Depending on the settings, different dot shapes identify
different tiers of items.
- Map progress is retained even after dying, reloading, resetting, or switching/creating save files.
- Map tiles preserved in this way appear gray, the same as tiles revealed by map stations.
- Map progress is only cleared by creating a new file when all three save slots are empty.
- Maps are color-coded by area. Lighter shades are used to represent heated rooms. A dark, checkered pattern
is used to represent screens that are mostly or fully submerged in water.
- The location of an area's map station is always visible (optional).
- Item dots fade after collection (or disappear, depending on the settings).
- Area transitions are marked, identifying the neighboring area using colored letters (or arrows, an alternative option).
- Pressing Select in the pause map cycles through maps of explored areas. Alternatively, press Y or X
to cycle forwards or backwards, respectively.
- Pressing L + R + Select + Start during gameplay does a quick reload from the last save.
Repeating this input combination cycles through previous saves; Samus just has to still be in the initial
facing-forward pose from the last reload.
- Pressing L + R + Up + X activates a mode called "Spin Lock", temporarily preventing up/down inputs from breaking spin. Pressing shot will cancel this mode.
Saving & loading
- After the death animation, the game immediately loads from the previous save, without needing to go
through the game over menu. The quick reload inputs (L + R + Select + Start) can also be used during the
death animation to make the process even faster.
- Saving at a different station from the last save will move to the next slot before saving (cycling back to the first
slot if the last save was on the third slot), making it possible to return to the earlier save. Saving at the same
station as the last save will overwrite the last save without advancing to the next slot.
Doors
- Pink, green, and yellow doors are randomized (if using the default "Ammo" doors option):
- To limit the risk of softlocks due to doors, the two sides of the door always have the same color,
and unlocking one side automatically unlocks the other side as well.
- Gray doors are replaced with blue doors, with the exception of boss/miniboss rooms and the following four
Space Pirate rooms where gray doors are retained:
- Pit Room (old Mother Brain room)
- Baby Kraid Room
- Plasma Room
- Metal Pirates Room
- Gray doors do not close behind Samus when entering a room. They close when any one of the following occurs:
- An item in the room is collected (applicable in Bomb Torizo Room, Golden Torizo Room, Plasma Room, and Pit Room).
- A boss in the room is hurt.
- All enemies in the room are defeated (causing the door to simultaneously close and unlock).
- A gray door is added on the right side of Metal Pirates Room (while the vanilla game only has one on the left):
- This makes the room symmetric so that the enemies must be defeated to cross the room in either direction.
- After defeating the enemies and shooting open either door, neither door will lock gray again.
- Note that this differs from Pit Room and Baby Kraid Room, where if the player shoots open one gray door and
leaves the room, the other door will still be gray when re-entering the room.
- The green door at the bottom of Spore Spawn Room is replaced with a gray door.
- The solid wall PLM on the right side of Tourian Escape Room 1 is removed. Instead, during the escape, a gray door
spawns on the right side of whichever room connects to Mother Brain Room.
- Hazard markers (yellow & black stripes) are shown on doors leading into the following locations, either directly or via the Toilet:
- Mt. Everest top door
- Oasis top door
- Fish Tank top left door
- Fish Tank top right door
- Bug Sand Hole left and right door
- Amphitheatre left door
- Tourian Blue Hoppers left door
- Big Pink crumble block left door
- Ice Beam Gate Room crumble block top left door
- Fast Pillars Setup Room top right door
Item spawns
- All items spawn at start of game (optional).
- This simplifies the game behavior by making it so that all items appear from the start of the game,
e.g. without needing to first awaken the planet or defeat Phantoon.
- Regardless of this option, other vanilla effects of defeating Phantoon and waking the planet are unchanged by the randomizer:
- After defeating Phantoon, the Bowling Alley Chozo statue becomes usable and there are changes to enemy spawns. This includes
the Workrobot which will move and open access to the item in Wrecked Ship East Super Room.
- After the planet is awakened, enemies will spawn in Parlor, Climb, Morph Ball Room, Construction Zone,
and Blue Brinstar Energy Tank Room.
Suit behavior
In the vanilla game, Gravity suit includes almost all the benefits of Varia suit, apparently based on the
expectation that the player will get Varia before Gravity. In the randomizer, Varia suit behaves as in vanilla,
but Gravity suit alone has only the incremental effects that Gravity gives on top of Varia in the vanilla game:
Gravity suit alone provides no heat protection and only 50% protection against other damage (including lava).
This makes the suits become "complementary", meaning their effects stack to give the same effect as combined
Varia + Gravity suits in the vanilla game:
Suit combination |
Heat |
Lava |
Rainbow beam |
Other damage |
Power Suit |
0% |
0% |
0% |
0% |
Varia |
100% |
50% |
50% |
50% |
Gravity (Map Rando) |
0% |
50% |
0% |
50% |
Gravity (vanilla) |
100% |
100% |
0% |
75% |
Varia + Gravity |
100% |
100% |
50% |
75% |
Note that the only case where the randomizer differs from the vanilla game is with Gravity alone.
Endgame
- Supers do double damage to Mother Brain (optional).
- The Mother Brain fight ends after phase two (optional).
- Samus still gets Hyper Beam.
- Samus gets an energy refill at the start of the escape sequence (optional).
- When acquiring Hyper Beam, Samus collects and equips the following items (optional):
- Varia Suit, Gravity Suit, Morph Ball, Bombs, Spring Ball, Screw Attack, Hi-Jump Boots, Space Jump,
Speed Booster, Grapple, X-Ray.
- Hyper Beam destroys Super, Bomb, and Power Bomb blocks, opens blue & green gates from either side, and
opens pink, green, and yellow doors (and "Beam" doors, if applicable). Note that Hyper Beam does not destroy Speed, Grapple, or crumble blocks.
- An auto-save is made after Mother Brain is defeated, immediately before the escape begins.
- Enemies are cleared during the escape (optional).
- The escape timer is adapted based on the estimated time required to return to the Ship.
- If the "Save the animals" option is enabled, time is also included for a detour to Bomb Torizo Room.
- Leniency time is included based on selected Skill Assumptions.
Fast transitions & cutscenes
- Ship, save, refill, and map station animations are accelerated.
- Parts of the Big Boy Room cutscene are accelerated:
- The Baby enters sooner, and the Hopper moves to the right sooner, stopping in the same position as vanilla.
- The player regains control of Samus sooner after being drained.
- The part in the middle (starting when the Hopper is about to become a corpse) is left unmodified to avoid
disturbing the setup and execution of Baby Skip.
- Some Mother Brain cutscenes are accelerated or simplified:
- The whole-screen flashing during the MB1 death animation is removed (for photo-sensitive players & viewers).
- The delay after MB1 head falls to the ground is eliminated.
- For settings where MB3 is not skipped, the part where Baby Metroid is latched onto MB2 is
accelerated, as is the MB3 death animation. These should not affect the execution of the stand-up glitch.
- Fast doors (optional):
- Scrolling speed is doubled for both the door centering and transition.
- Gameplay fade-in speed is unaffected, to avoid disrupting enemy behavior or the ability of the
player to react to a new room.
- Likewise, gameplay fade-out is unaffected, to avoid affecting enemy damage taken during the fade-out, including R-mode and G-mode setups.
- Fast elevators (optional):
- Elevator speed is tripled.
- Fast pause menu (optional):
- Fade-in and fade-out of the pause menu map are accelerated, as are transitions between the map and equipment screens.
- Map scrolling speed is doubled.
- Gameplay fade-in and fade-out are unaffected, to avoid disrupting strats that rely on pausing
(such as Spring Ball jumps or R-jumps).
Layout changes
- In the morph tunnel between Main Street and Mt. Everest, a few solid tiles are changed to air to allow room to stand.
- Solid tiles are added off-camera at at the bottom of Aqueduct to prevent going out-of-bounds.
- In the vanilla game, when running with Speedbooster it is easy to unintentionally dip out-of-bounds there
(and possible to fall all the way through the floor).
- Objective barriers are added in Mother Brain's room. Several slope tiles are also changed to solid, to prevent Samus from
clipping through the floor when running into the room.
Other changes
- Missile Refill stations refill all ammo types: Missiles, Supers, and Power Bombs.
- Enemy drops are buffed (optional):
- Small energy drops give 10 energy.
- Respawning enemies drop Power Bombs at double the normal rate.
- The Acid Chozo statue can be activated without Space Jump (optional).
- The music for each room is based on its area & sub-area on the randomized map.
- Angle up/down can be bound to any button.
- Item fanfares are removed, replaced with short sound effects that do not interrupt gameplay.
- Most major glitches are patched out:
- The pause menu is fixed to prevent equipping glitched beams.
- GT code is disabled.
- Going out-of-bounds triggers death. Going off-camera into screens that are normally inaccessible is fine,
as long as no part of Samus' hitbox goes outside the rectangle defining the room boundary.
- The out-of-bounds check is suspended when Samus is riding an elevator or grabbed by Draygon, as in those
situations going out-of-bounds is normal and not a glitch.
- During the first phase of the Kraid fight, Samus's X position is no longer restricted to the left screen.
- This allows the room to function properly when entering from the right, giving the player an option to exit back
through the right door before the fight starts.
- Fix to vanilla bug where heat damage could cause Samus to lose blue speed.
- Heat does not damage Samus during the loading fanfare (applicable to the "Random" start location option).
- Fixes to many graphical glitches, mainly ones that would happen because of modifying the doors and how they connect.2
How it works
Randomization happens in a few phases: map generation, item placement, escape timer calculation, and ROM patching.
Map generation is done offline ahead-of-time, while the others happen in real-time when a user requests the system to
generate a game.
Map generation
At the core of the map generation process is a machine-learning model trained to arrange Super Metroid rooms
onto a 72 x 72 grid, while satisfying the following constraints:
- Every Zebes room is used exactly once in every map.
- The rooms do not overlap.
- Every door transition connects to a compatible door transition, e.g., sand connects to sand, and elevators
connect to elevators.
- Every room has a path to and from every other room. This means that for every room containing one-ways
(e.g., crumble blocks, green gates), there must be some path that loops back around. This is to avoid creating
areas which the player could either never reach or never escape from.
Maps produced by the model go through a few steps of post-processing:
- The rooms are partitioned into six areas using a graph clustering algorithm.
- Each area is partitioned into two sub-areas (used to determine which music track plays).
- The Wrecked Ship map station and Phantoon's Room are moved (swapped with other single-tile rooms) so that they
connect to the same room.
- The other map station rooms are likewise moved to ensure there is one in each area.
- Save and refill rooms are moved to improve the balance of their distribution.
The processed maps are then collected and stored off. The randomizer currently uses a pool of approximately 38,000 "Tame" maps and 52,000 "Wild" maps. The difference between these two map pools is that for "Tame" maps, one-ways will have relatively short return paths that loop back around; this is implemented by an extra term in the map generation model's scoring of candidate room placements, and also by a filter applied to completed maps during post-processing.
It took about a year to develop the initial model architecture and training process, including about two months of
continuous training on a pair of RTX 3080 Ti GPUs. The original model suffered from some quirkiness where it almost
always connected certain groups of rooms together. A newer model with a number of improvements was trained for about 4 months on a pair of RTX 4090 GPUs, leading to greater variety in room connections, better balancing of save stations, and better connectivity (e.g. shorter paths from one end of the map to the other).
Item placement
Item placement happens by forward fill: items are first placed in locations that are bireachable
(i.e. possible to reach and return back to the starting room) before the player has collected any items, then in a
sequence of expanding spheres of bireachable locations based on having collected the previously placed items.
On each step of item placement, among the bireachable item locations that do not yet have an item
placed in them, a subset of these locations is selected to place key items in, either randomly (if "Neutral" item
placement is selected), or by prioritizing those that require more difficult techniques to reach (if "Forced" is
selected). Key items are selected to ensure that progression is unlocked (i.e., at least one new item location
becomes bireachable). Filler items are placed in the remaining item locations that are reachable on that step, including locations that are only one-way reachable. The process then repeats with the next set of key items. If on a given step there is no key item that can provide progression, then the randomizer retries with a different map. For more details, see the "Item progression" section
of the Generate page.
The logic used to determine reachability of item locations is based on the
sm-json-data project.
This is a massive repository of Super Metroid strats, currently consisting of over 200,000 lines of manually
crafted JSON. For each room, it defines a set of logically meaningful nodes (points or regions within the room)
and defines tech, item, and resource requirements for strats traversing between nodes. In heated rooms,
this includes heat damage requirements. It also includes information about runways in front of doors and other
room details to support cross-room strats such as shinesparks, gravity jumps, and G-mode.
Spoiler data is also generated during the process of item placement, recording which nodes (including item locations)
are reachable and/or bireachable on each step, and constructing an obtain & return path for each bireachable item
location, which is used in the implementation of the interactive spoiler map.
Escape timer
The escape timer is determined by computing the fastest path from Mother Brain Room to the Ship (including a
detour to Bomb Torizo Room if "Save the animals" is enabled). This is based on manually constructed
escape timing data
which gives a timing between every pair of doors in every room. Extra time is added for leniency based on the difficulty settings.
For escape timings that rely on tech in an important way, this is taken into account by making the timings
conditional on the tech (and where applicable, including alternative timings that do not use the tech):
- "canMoonfall" to save a substantial amount of time in certain rooms,
- "canKago" to get through Wasteland faster from top to bottom,
- "canHyperGateShot" to go through gates in reverse,
- "canSuitlessLavaDive" to go through Amphitheatre in reverse,
- "canHeroShot" to go through Big Pink from the bottom left door,
- "canOffScreenSuperShot" to go through the Morph tunnel left-to-right in Big Pink,
- Note: It's easier with Hyper Beam than with a Super (and Super ammo is not guaranteed to be available).
For other more minor uses of tech (e.g. "canMockball"), the base timings assume that the tech can be used,
and the difficulty multiplier should be enough to account for the player's potential inability to do
the tech on lower difficulty settings.
For timings which are heavily affected by the "Enemies cleared during escape" option, two timings are included
in the data, one based on the enemies being present and one based on them not, and the correct one will be used.
Otherwise a conservative timing is used which should be doable in both cases.
The escape timings assume that the player has all movement items. If the option "Hyper Beam gives all movement items"
is disabled, it possible that the player could defeat Mother Brain but not have the movement items required to
execute the escape in time; in this case the player would need to reload to an earlier save (before the escape auto-save)
and go back and collect the necessary movement items before reattempting Mother Brain and the escape. A similar scenario
could happen if the player needs more energy for the escape (e.g. to perform a shinespark or acid dive): it's possible
they could need to go back and collect more tanks or redo the Mother Brain fight with less energy loss (if the option
"Refill energy for escape" is disabled).
ROM patching
The final step is to construct a ROM patch which applies the item placements, door connections,
map data, and escape time, along with other game changes (as described above) that are either
built into the randomizer or selected as options by the user.
The resulting ROM patch, spoiler data, and other information associated with the randomized game are saved off
to cloud object storage, allowing users to share the randomized games with one another. Each user needs to use
their own vanilla ROM in order to apply the patch to create a playable game.
People & credits
The following people contributed directly to the development of the randomizer, the web service, the
underlying logic data, or ROM patches developed specifically for the randomizer:
- Game design: Maddo, kyleb
- Map generation, randomizer frontend & backend, escape timings, and video site: Maddo
- Spoiler map: Selicre, Maddo, Change
- Title screens and various other art (hazard doors, walljump boots, beam doors): kyleb
- Logic data (sm-json-data):
Osse101, kyleb, Maddo, Rushlight, Minnie Trethewey, DIProgan,
Bokyubi, Sinth
- Tech and strat videos & animations: Sam, maddo, Osse101, NZT, kyleb, Nito, Sinth, sunwu
- Area-themed palettes: kyleb, Maddo, AmoebaOfDoom
- Area-themed glows: AmoebaOfDoom
- Tile themes: AmoebaOfDoom, Maddo, Tundain, chicdead26
- Revamped reserve tank HUD and E-Tank energy refill option: Kewlan
- Integration test: aquanight
- Boss calculator: Kewlan
- Reduced flashing patch: karafruit
- Random objectives and reduced items options: Selicre
- Escape refill to reserve energy: 123456789you123456789
- Many bugfixes (e.g. corrupted graphics leaving Kraid Room): Stag Shot
- ASM help:
- Buggmann (created the title screen animation patch)
- somerando (scrolling sky, West Ocean G4 statue bug, save/load bug, etc.)
- NobodyNada (figured out BT statue crumble bug)
- PJBoy (explained Big Boy Room enemy initialization issue)
- AmoebaOfDoom (lots of helpful advice, on top of all the work on area-themed palettes, glows, tiling, etc.)
Many people in the community have created demonstrations of interesting Super Metroid strats, which have
then contributed to the logic used by the randomizer:
- Special thanks to bobbob and insomniaspeed who have been especially prolific in
creating & sharing new strats.
There are also many ASM patches written by people for earlier projects, which this randomizer
reuses or builds on:
- Vanilla bugfixes: total, PJBoy, strotlog, ouiche
- Save/load patch: Scyzer
- Map tile expansion: DC, TestRunner
- Map Overhaul (inspiration & helpful reference): MFreak
- Max ammo display: Personitis, theonlydude
- Randomized escape: ouiche
- Seed hash display: total
- Progressive suits: Smiley
- Bomb Torizo patch: PJBoy
- Kraid vomit fix: PJBoy
- Water FX bug fix: Benox
- Item collection sound effects (replacing fanfares): Scyzer
- Bind angle up/down to any button: Kejardon
- Fast decompression: Kejardon, PJBoy
- Fast elevators: Lioran
- Fast doors: Kazuto
- Respin: Kejardon, PJBoy
- RTA timer and end-game credits: total, ouiche
- Momentum conservation: Scyzer, Nodever2, OmegaDragnet7
- Graphical fix to vertical door PLMs: HAMGER
- MSU-1 patch (to allow playing the game with customized music): DarkShock
Custom sprites are made possible by
- SpriteSomething
by Artheau and Minnie Trethewey
- Sprite artists:
_aitchfactor, Abyss, Akai Azul, Albert V, Aran Jaeger, Artheau, Auximines, awildwildwes, Benox50, Daltone, Dawn, Dewutt610, Di10, Fingers McGee, Fredz00z, Gala, Glove, Involuntarymillenial, Kyzentun, Little Leaden Hearts, Looking4Giants, Lougaroc, Mattroid, mccad00, Metaquarius, MM102, mm2nescartridge, MoeChicken, Munchy, Nintoaster, Ouily644, P. Yoshi, PaddyCo, Physix, PlaguedOne, Plan, Pneumatic, Purple peak1, RonnSama, ShinobuFujiko, Spoonybard, SpoonyBard, Starry Melody, SthianFel64, Sunwu, TarThoron, Wandering Spider, wuffie
Other randomizers have been a significant source of inspiration and ideas, particularly
VARIA Randomizer,
and also SMZ3 Randomizer which was the first randomizer that we played (Maddo and kyleb). The set of patches used by VARIA was an especially helpful reference.
The following tools and reference materials have been indispensible:
We've also received valuable feedback, suggestions, and bug reports from many players. Though there are too many
to mention them all individually, we are grateful for everyone who has shared their ideas and observations! There are
a few players who have been involved from an early period who we do have to mention:
- Osse, who did a lot of careful playtesting since the first release of the randomizer and became a main contributor to the logic, which is uniquely valuable given his high skill at the game. He also created almost all the videos and animations for notable strats, featured on the Generate page.
- Joonie, who gave very helpful feedback that guided much of the early development.
- somerando(cauuyjdp), who has reported a ton of bugs (and shared interesting strats, seeds, and ASM help).
- TarThoron and neen, who have been super helpful on the Discord, sharing a lot of knowledge and answering questions.
Thanks also to the people who have created and shared tools related to the randomizer: