"Brownie points to whoever can tell me what's truly bizarre about the way I get to the credits. No, it's not the direction I approach the ship, nor is it the way I enter it."
"In truth, the way to end the game is to finish off all 47 metroids and recharge your missiles. Any missile recharge will do, it's just that ordinarily you're limited to the ship at the end when you do so. You see, when you touch a recharge station, it first checks to see if D089, the memory location for the number of metroids left, is zero; if so, end the game, if not, fill missiles." -Ferret Warlord
This note from the submission thread of #2049: Ferret Warlord's GB Metroid 2 - Return of Samus "any%, glitched" in 23:40.92 made me wonder if there is something can be done to take further advantage of this fact now that subframe input is possible for GB. As it turned out, there is.
Can't blame YouTube when this sequence is played 8 times throughout this 19 minutes run.
- Emulator Used: BizHawk 2.8
- Genre: Platformer
- Heavy glitch abuse
- Uses sub-frame resets
- Corrupts save data
Note: Early parts of the movie contain inputs copied from Ferret Warlord's movie. I'm not sure whether they are considered lengthy enough to warrant co-authorship so I'll leave it to the site staff to decide.
Note on branch name: I suppose this one should be branched as "save glitch", but it also uses the select glitch that is currently titular to #2049: Ferret Warlord's GB Metroid 2 - Return of Samus "any%, glitched" in 23:40.92. If this ends up being accepted, it might be reasonable to make that movie branchless while labeling the other 2 movies as "inbounds" instead.
The glitch and SR-388
Detailed explanation can be found on the game resource page.
The save file
Detailed explanation of the save file structure of this game can be found here here. The most relevant addresses are the following:
- 000F: X coordinate of the room
- 000D: Y coordinate of the room
- 0019: Map bank of the room
- 0019: Equipment status
- 0029: Actual Metroid count, not the one being displayed
- 1143: The flag for the event where the displayed Metroid count is increased by 8.
There is apparently no checksum mechanism whatsoever, so the save data can be corrupted by simply resetting with sub-frame precision right after the desired data is written while the rest of the file still has the old values. Note that because of how save file writing works, it's impossible to write values for higher addresses without values in lower addresses being overwritten first. For example, to have the real Metroid count updated in the save file, map coordinates must be overwritten first.
This is the watch file used to observe these values during the making of the movie: https://tasvideos.org/UserFiles/Info/638142827147555872
The route
As mentioned earlier, the real credit triggering condition for this game is to reach a missile refill station after the real Metroid counter, which starts at 47, reaches 0. While there isn't a known way to corrupt the value to be 0 right away (unless the emulator fills uninitiated (S)RAM addresses with 00 instead of FF), it is possible to take advantage of this by repeatedly killing the same Metroids and resetting mid-frame while saving after the counter is updated but before the flags that mark those Metroids as killed are written.
The 8 "regular" Metroids at the end of the game are clustered together and faster to kill than any other Metroid variants and it is intuitive to consider them the best choice for grinding. Each of them require Ice Beam and 5 missiles to be killed. For this reason, Ice Beam and a missile tank, which adds 10 to the default total missile count of 30, are acquired along with Spider Ball and Space Jump, which are used to maneuver.
Breakdown of the 8 times the game is started:
1. Go for Spider Ball, missile tank, and Ice Bream. The game is saved properly here which means this movie does not rely on uninitiated RAM values.
2. Start a new game on the same save slot and save at the first save station while resetting right after the location values are overwritten to have a save file at the starting area with Spider Ball, Ice Beam, and missile cap of 40.
3. Head to the end game area via secret worlds, which is conveniently close to the starting area.
Grab Space Jump via secret worlds before killing the 8 Metroids.
Refill missiles and save the game at the save station outside the final area while resetting right after the Metroid counter is updated. Note that I tried overwriting the flag for the event where the displayed Metroid count is increased by 8 so that it's not played again later but unfortunately the flags for 7 of the 8 Metroids would be overwritten as well by the time that flag is written so this can't be done.
4-7. Grind the 8 Metroids repeatedly. The inputs for each round are near identical aside from the one-time energy refill.
8. Kill 7 more Metroids. It's no longer possible to return to the final big room via Queen Metroid's room because it would lead to a secret world (that can't be maneuvered with the tile set of the room) when the Metroid counter has reached 0, so instead a secret world is used to warp to a big room from earlier part of the game with a missile recharge station in order to trigger the credits.
Special Thanks
- Ferret Warlord, for the research on the game in general, which inspired this movie to be made.
- liamnajor, for ROSE, which made it significantly easier to check the inner-working of the game map and come up with a route.
- Anyone who contributed to making subframe input possible for GameBoy on BizHawk.
- YOU, for reading the submission text and watching the movie.
feos: Claiming for judging.
feos: I don't know the game at all, but after having watched "100%" and "select glitch", even I can clearly tell the route taken in this movie is very different from the other branches, even if it goes through some of the same areas. [1175] GB Metroid II: Return of Samus "select glitch" by Ferret Warlord in 23:47.40, while confusing to a layperson indeed, has a decent rating, so it can go to Alternative while this becomes the Standard fastest completion. Accepting as a new branch.
Spikestuff: Publishing.