Posts for MUGG

Editor, Experienced Forum User, Published Author, Expert player (2329)
Joined: 5/15/2007
Posts: 3933
Location: Germany
I was not able to improve 1A, so the best time is still 53.92. Additionally to using the "no nitro sounds", I tried adding pauses to the first boost as well as the last boost. Although I tried many different timings and durations - thinking the pause sound itself has an impact - it never actually seems to change anything. On the underground boost, the best RTA time 54.06 does some pauses there but I think it doesn't actually have any impact. 54.04 is the best time RTA could achieve without any pausing and without "no nitro sounds". I will do a few more tests, but I guess pausing can be ignored as it doesn't seem to be a time-saver. If that's the case, I would be happy about this because it makes running this game slightly easier. Bk2 of 1A 53.92 https://tasvideos.org/UserFiles/Info/638672762461221250 Used JP ROM on Bizhawk 2.9.1.
Editor, Experienced Forum User, Published Author, Expert player (2329)
Joined: 5/15/2007
Posts: 3933
Location: Germany
GJTASer2018 wrote:
Patashu wrote:
It's too bad this can't be console verified because the route/tricks used are very funny.
Not consistently verified, anyway - a verification could still happen by pure (unmanipulateable) chance. The only foolproof way to test whether the save corruption works on a real console is to use a brand new, unopened GBA cart - which means you run into the same problem as Space Station Silicon Valley's mandatory first boot cutscene (in other words, no one is going to risk ruining their "mint condition" cart to test something that's not likely to work anyway).
Instead of just running the input file to verify it, I would be more interested what are actually the values in the SRAM battery when shipped by Nintendo (mint condition). Are they really random, or 0x00, or 0xFF...? Maybe it is possible to check it somehow. The save corruption method itselfs should work. I can probably make a test verification movie file that doesn't require the SRAM's initial state to be 0xFF. But it will require hard-resets, not sure how the verification process can do that.
Editor, Experienced Forum User, Published Author, Expert player (2329)
Joined: 5/15/2007
Posts: 3933
Location: Germany
This was already known:
$c10d - speed
$c38a - speed - this seems to be related to the amount of pixels to advance the screen by per frame

This is new:
$c7a3 - speed (actual speed address, mirrored at $c7a0 and possibly other places. $c10d and $c38a depend on this. Will be temporarily set to 0 when a lag frame occurs.)
$c7a4 - nitro boost duration (Will be temporarily set to 0 when a lag frame occurs, and I think it also gets set to 0 if leaving a ramp.)
I would like to investigate the "speed skips" (mentioned in a previous post) once more. I was thinking maybe those speed skips happen even before the speed value actually starts decreasing. Some years passed and now "best ingame time at all costs" seems more logical for a goal choice than "no-nitro-sound spamming allowed but no pausing". Also I think all levels should be played (all eight races in all three difficulty settings). Although this is just a first thought. I have not done any actual new work yet and I'm not sure I will do it, since it's very tedious to optimize this game. I still have the old bk2s and luascript with the unfinished staff ghost utility.
Editor, Experienced Forum User, Published Author, Expert player (2329)
Joined: 5/15/2007
Posts: 3933
Location: Germany
@Potato I took your 35f improvement and managed to save 16 more frames. Bk2 4f in Cruiser room 4 (small optimizations). 12f in Stardust Mushroom side (used a teleport instead of running). Maybe it is possible to use two teleports in that room? But like I said, I'm not quite good using this bug. I tried the spike room again but couldn't manage to save time. Tried to apply spike ledge boosts and set up the follow path further down so we could maybe reach the loading zone with Mario without having to jump or having to switch. Other than that, I'm not sure if it is possible to have Luigi get teleported into a wall, too - he always is already in falling state after the teleport, otherwise it might be possible to switch inside the wall and then just walk down out of the wall, instead of jumping. But I was not able to do it. Unfortunately, this Bk2 desyncs again, this time in the first room of the mountain. Maybe you can adjust it again? I guess that first enemy actor ruins the set up... Not sure how it could be fixed. Perhaps some of the 16 frames time save has to be neglected/delayed to keep the RNG the same as before. Although there might be more frames to squeeze, I think the run has reached a satisfactory level of quality now so I think we should submit it soon. I don't think getting 1024 speed is possible in Stardust Mushroom side, unless perhaps if you do it diagonally off a corner (like in Cruiser 4). Getting 1024 is very precise; it seems you can only get it in very specific spots.
Editor, Experienced Forum User, Published Author, Expert player (2329)
Joined: 5/15/2007
Posts: 3933
Location: Germany
Wow, first time I see this. My mind is blown at the fact you can skip the barrier with a jab, lol I don't really understand it. Going through "1 pixel" means the game only uses a point as a collision for Link. I always assumed the game used multiple points or a diamond shape or something. This is something that I quickly dismissed back in the early days of testing. The second thing is with there being 1 pixel in the first place. It doesn't make sense that it exists. One would think that the environmental collision planes should align perfectly into each other, with the ledges working the same as the inner part. But this discovery suggests that the ledges work as "empty lines". Weird. The Tingle Tuner thing is funny. Disconnecting and Reconnecting the device is something that should sound like an obvious thing to test for glitch hunters, but I guess nobody has thought of it. It's funny that a random player pointed it out in a random post. To me it is a legitimate thing to do next to inputs and hard resets.
Editor, Experienced Forum User, Published Author, Expert player (2329)
Joined: 5/15/2007
Posts: 3933
Location: Germany
@Potato I looked at your 131f improvement and found more improvements. Bk2 Koopa Cruiser room 4 (25f faster) Stardust Fields spike room (16f faster) After the spike room, I had to switch the brothers back, done after the cave towards Hoohoo Mountain Village (1f lost) The NPC girl in Hoohoo Mountain Village isn't in a bad spot anymore (2f faster) The movie desyncs in the mountain sections because of the enemy actor. It might be possible to squeeze a few more frames in Koopa Cruiser room 4 and Stardust Fields spike room (especially the latter). Maybe you can squeeze more frames in the spike room, Potato? I suggest to do this before anything else, since enemy actors in the mountain rooms could change again if we save more frames.
Editor, Experienced Forum User, Published Author, Expert player (2329)
Joined: 5/15/2007
Posts: 3933
Location: Germany
@Potato I managed to improve by 58 frames. Bk2 here 10f from the jump before the Koopa Cruiser cutscene. 3f from Koopa Cruiser 4th room. 45f by successfully using Firedash speed glitch in the Stardust Fields room with the spikes. I did not find a 1 frame improvement in the first Stardust Fields room which you mentioned. The subsequent NPC boosts in Hoohoo Mountain Village needed to be changed but there was neither a time gain nor a loss. I vaguely remember that I was able to teleport right into the exit in the Stardust Fields spike room but it required a few brother swaps or something... Unfortunately I didn't save the input for that. It might not be worth looking into it since the new improvement I came up with is pretty decent. Lastly, a few words on Firedash speed glitch. As explained in a previous post, it works if Luigi in front gets pushed by an adjacent ledge while falling off but it is precise. You can usually gain the ability to run around at 768 speed. In order to obtain 1024 speed, I think you have to do it on a ledge that is two units high (requiring high jump to get on it) or on a 1 unit tall ledge that looks like the one in the Stardust Fields spike room (adjacent ledge has a width of 1 tile). I have not been able to get 1024 speed in other scenarios. I would be happy if you continue looking for improvements when you have time and feel like it.
Editor, Experienced Forum User, Published Author, Expert player (2329)
Joined: 5/15/2007
Posts: 3933
Location: Germany
I noticed another minor bug with TAStudio where input of the last frame isn't displayed on the emulator screen. The three A presses before the last one are displayed by "View→Display Input" on the emulator screen, but the last one is not even though it is executed.
Editor, Experienced Forum User, Published Author, Expert player (2329)
Joined: 5/15/2007
Posts: 3933
Location: Germany
Hello Potato, thank you for the help. I'm not very good with the teleportation glitch. About understanding save corruption better: I have updated my MLSS luascript so it will work on Bizhawk 2.9.1. See here. When using that script, open the "Savegames" display. It will show two values in the bottom right corner, which is the current checksum and the required checksum. If both match, then the savegame is valid. You can also look at the SRAM memory domain while saving, copying or deletion takes place to better understand what's going on. For NPC boosting in Toad Town and Koopa Cruiser, I tried delaying 1 or 2 frames on the file select screen which yielded different RNG seeds but the NPCs still didn't cooperate. Since you came up with improvements in cruiser, maybe it is worth trying this again. If you send me the bk2 or tasproj file, I can try it. I did try to improve the run myself, came up with 3 frames improvement in the fourth room of Cruiser. I think because I took a more sharp turn towards the crates at the top of the room and by a better NPC boost after the crates. Tried firedash speed glitch but did not manage to save time with it. In Stardust Fields at the first room with spikes to jump across, is where I stopped because I tried firedash glitch with teleportation but couldn't make it work. Let me know if you have any questions.
Editor, Experienced Forum User, Published Author, Expert player (2329)
Joined: 5/15/2007
Posts: 3933
Location: Germany
I don't really understand how it makes a difference of more than a second. Shouldn't this have lead to a desync? I always assumed the Game Boy runs at 59.727(...) FPS. 31150 / 59,727 = 521.539672175 (8 minutes, 41 seconds, 539 milliseconds) Is there somewhere I can read about this topic?
Editor, Experienced Forum User, Published Author, Expert player (2329)
Joined: 5/15/2007
Posts: 3933
Location: Germany
Why did the time change to 08:40.33?
Editor, Experienced Forum User, Published Author, Expert player (2329)
Joined: 5/15/2007
Posts: 3933
Location: Germany
I tried figuring out the % calculation.
wikirby.com wrote:
Enter every room in the game besides Rainbow Route - Central Circle and the tutorial rooms0.136% per room (272 in total) Total: 37%
Open Treasure Chests and pull levers0.45% per chest/lever (80 chests in total, 4 levers in total) Total: 37%
Push every Big Switch1% per switch (15 in total) Total: 15%
Collect all the shards for the Dimension Mirror1% per shard (8 in total) Total: 8%
Defeat Dark Mind, and watch the staff credits in full3%
However, when setting flags for 2 chests and 16 rooms, it should be 3%.
2 * 0.45 + 16 * 0.136 = 3.076
But the game shows 2%. I'm under the impression that there are different amounts of % added even for the same type of flag.
Editor, Experienced Forum User, Published Author, Expert player (2329)
Joined: 5/15/2007
Posts: 3933
Location: Germany
I encountered a minor bug where input in TAStudio isn't displayed correctly at the top-most row for one frame. https://i.imgur.com/rE8JWzs.png 1. In recording mode, advance a few frames. (A) 2. Then load a state from an earlier frame. (B) 3a. Press any button on this frame. It will be correctly shown (C1) but on the next frame the row will be shown as empty (C2). 3b. Don't press anything on this frame. The row will be empty (D1) but if you press anything on the next frame, the input will be shown for the current row as well as the top-most row (D2).
Editor, Experienced Forum User, Published Author, Expert player (2329)
Joined: 5/15/2007
Posts: 3933
Location: Germany
I made a comparison video that includes the gameplay improvements. Link to video
Editor, Experienced Forum User, Published Author, Expert player (2329)
Joined: 5/15/2007
Posts: 3933
Location: Germany
I corrected the submission text. The last jump in Act 6 room 1 didn't turn out to be improvable but I found an improvement in the 2nd room which saved 27 frames. Act 12 was changed slightly without gaining or losing time. The new file is linked in the submission text.
Editor, Experienced Forum User, Published Author, Expert player (2329)
Joined: 5/15/2007
Posts: 3933
Location: Germany
jlun2 wrote:
Woah, a glitched run finally exists! I looked through this thread every time it got an update, and I knew a glitched run was attempted for years without success. Congrats! 1. Does save corruption exist for the other Mario & Luigi games? 2. Assuming a run that does this gets published, would you or others still try to do that ACE run as a "no save glitch" category? 3. What other stuff can you do with this? Anything fun?
1. I don't know. The corruption was only possible because bytes get saved in groups of 8 once per frame and the checksum protection is weak. 2. I thought ACE was close but not reached yet. I'm not sure what the progress is on that. Of course that would be a different category. Remember, this run only works this way because SRAM is full of 0xFF, which is an acceptable "default state" for emulators but the real SRAM battery probably gets shipped with random values. Although not even that is sure, I think. 3. It depends what you want to do. With subframe resets, you might be able to reach an end credits room earlier.
Editor, Experienced Forum User, Published Author, Expert player (2329)
Joined: 5/15/2007
Posts: 3933
Location: Germany
I should probably have verified the time saves at some point... After directly comparing this bk2 to the "resynched without improvements bk2" it turns out: Act 5 actually saved 5 frames. Act 6-1 saved 1 frame instead of 3. Acts 8 and 9 accepted input 1 frame sooner each on the title card, but it didn't actually save 1 frame each... Everything else looks correct. Act 12 saved 13f (12 from the hot pot skip and 1 from a reduced lag frame), resulting in 19f time save total and the 20th frame was saved at Gargamel. Please wait until I do more checks, before you decide on publishing this.
Editor, Experienced Forum User, Published Author, Expert player (2329)
Joined: 5/15/2007
Posts: 3933
Location: Germany
No new updates on 100%. I have gotten burnt out on trying to manipulate luck in route [03] so I'm taking a break. In the meantime, I looked at low% again. I determined in 2011 that it is possible to beat the game with 27%, see here. Some things I found that might be important:
  • It is possible to skip two rooms (740 and 790) in Moonlight Mansion via Parasol glitch.
  • When traveling to Carrot Castle etc., it is best to go through rooms 507 -> 137 -> 194.
  • When traveling to Candy Constellation, going through Moonlight Mansion or Peppermint Palace takes the same amount of rooms.
  • When going from Carrot Castle to Peppermint Palace, you can skip rooms 121 and 226 by taking the warpstar in Carrot Castle in room 731. But this Carrot Castle route takes 2 rooms more than the normally fastest route so there is no gain.
  • If there was a way to skip down through platforms, you could save 1 room when going from 513 -> 515 in Cabbage Cavern.
  • If there was a way to glitch through walls in any of the "bottom Lever rooms" (Olive Ocean and Radish Ruins), you could save a bunch of rooms, but it is not possible.
  • You can reset at a certain frame when the game transitions from the tutorial into the hub cutscene which results in the game not setting the "have visited this room" flag for room 801, but that room does not get counted to the completion percentage, therefore making it a useless trick.
After going through the game again with everything I know, it still results in 27%. You can visit 2 rooms more which still results in 27%, with a third additional room resulting in 28%. It would take 6 rooms less to result in 26%. It looks like 8 visited rooms (one flags byte being fully set) make up one percent. With this knowledge, you could probably calculate a floating point percentage that could be used as a true determinator of what percentage we got.
Editor, Experienced Forum User, Published Author, Expert player (2329)
Joined: 5/15/2007
Posts: 3933
Location: Germany
I made a "no B presses" / "walkathon" TAS. You can get the Bk2 here. Note for future reference: I might have lost 1F on selecting the difficulty. Pressing B+Up+Start sets it hard while also closing the options, which was done in the regular TAS. This can probably be easily fixed. Link to video
Editor, Experienced Forum User, Published Author, Expert player (2329)
Joined: 5/15/2007
Posts: 3933
Location: Germany
MLSS Luascript v0.13
Changes in 0.13			14th Oct 2024
- The script now runs in Bizhawk 2.9.x.
- The script now uses Arial font by default.
- On displays that use up and down arrows, you can now scroll up or down via mouse wheel.
- The emulator will assume the user's original window size after the script stops.
- Fixed errors arising from loading a branch in TAStudio.
- Fixed that displays could become positioned offscreen if reducing padding in the settings or by closing "Actors"/"Overview".
- The script will recognize the two new E3 proto ROMs but there is currently no support.
- Flags: Added some room-related flags.
- Actors: Added a button to enable viewing collision boxes.
- Actors: Added a button to enable showing loading zones (still in an unfinished state).
- Actors: Fixed issue where the actors list could become empty if loading a state from ingame while on the title screen.
- Run Event: Removed Mine Cart Minigame on the Japanese version (crashes).
- Savegames: "Auto-Apply Checksum" now triggers on each frame when the client is paused
- Savegames: Checksum will be updated each frame when client is paused or when a movie is active.
- Savegames: Now shows the required checksum next to the current checksum.
- Savegames: Valid savegame will be shown with a green mark; invalid savegame will be shown with a red !-sign.
- Savegames: Fixed a problem where the checksum was not calculated correctly if bytes near the end of the file were non-zero.
- Savegames: Added "Auto-Apply Bytes" which continuously sets bytes required for the savegames to be valid on top of a correct checksum.
- Savegames: Added some Item addresses, increasing entries from 107 to 178.
- Notifications: Fixed that value changes were printed when the Actors display was active and loading a state from ingame while on the title screen. 
Editor, Experienced Forum User, Published Author, Expert player (2329)
Joined: 5/15/2007
Posts: 3933
Location: Germany
@YoshiRulz I'm using Bizhawk 2.9.1. RetroEdit PM'd me to inquire about my workflow but I couldn't confirm the steps that I wrote down. Sorry. Maybe I wasn't paying enough attention when the problem happened.
MUGG's reply to RetroEdit wrote:
I couldn't reproduce the issue I described :/ Maybe I wasn't paying enough attention in the "heat of action". I can reproduce a different issue though. (Using Bizhawk 2.9.1 with mGBA core) 1) Start game Mario & Luigi Superstar Saga (US) 2) Open TAStudio 3) Advance a few frames 4) Move -> Stop Movie (save as "somefile.tasproj") 5) Start game Mario & Luigi Superstar Saga (JP) (TAStudio is still open at this point) 6) Drag & Drop somefile.tasproj on the emulator 7) Exception ("core rejected the savestate") Depending when you close or reopen TAStudio or switch the ROM, it's possible to get a different exception error (still "core rejected the savestate" but with a red cross sign). If I figure out how I originally did it, I will PM again.
A different minor issue: Selecting RAM Watch while it is already open but hidden behind other windows will not make it come into focus (i.e. it will not be shown on top of the other windows). This does not occur with RAM Search and Hexeditor, but I have not tested anything else.
Editor, Experienced Forum User, Published Author, Expert player (2329)
Joined: 5/15/2007
Posts: 3933
Location: Germany
Migu wrote:
Wow, that was quick after finding the save corruption! But I guess there wasn't much to optimize.
I did some optimizing, but a few rooms could probably be improved. If you are interested, you can help me optimize this run before we are submitting to TASvideos.
So those 4 bytes are first set to 0 when you save (or earlier?) and then when you corrupt the save, as long as they stay 0, it works?
I think you are refering to older information. Please read my information write-up in the previous post. The in-game timer, which is the last 4 bytes of a savegame, is set to 0xFFFF when saving and hard-resetting in Toad Town. The 4 bytes prior to that have an unknown purpose and are not counted to the savegame's checksum. I erroneously counted them to the savegame's checksum before, which is why I came up with the wrong assumption that they are used as a counter-measure against savegame corruption.
I guess you can't change the map you saved on to something useful because you're only writing FF?
I have not tried for it extensively but theoretically you can visit map 0, which is useless for a speedrun. Otherwise, you can only set it to 0xFFFF (65535) which crashes. Other values may be possible if subframe resets become available.
Editor, Experienced Forum User, Published Author, Expert player (2329)
Joined: 5/15/2007
Posts: 3933
Location: Germany
I finished a run in 11 minutes and 7 seconds. Bk2: https://tasvideos.org/UserFiles/Info/638638997623551530
  • Bizhawk 2.9.1, mGBA-core,
  • Mario & Luigi RPG (J)
Link to video General The game uses three savegames which are located in the SRAM memory domain. Savegame 1 is located in $0010-$0707. Savegame 2 is located in $0708-$0DFF. Savegame 3 is located in $0E00-$14F7. Before being saved over or wiped for the first time, the memory in the SRAM memory domain is in an "uninitialized state". At the time of writing this, not much is known about this but the general sentiment seems to be that the memory inside the SRAM battery in the game's cartridge could have any possible values and Nintendo doesn't actually wipe values to 0xFF or 0x00 nor set the memory to any specific pre-set. Bizhawk - along with other emulators - sets the SRAM memory to be filled with 0xFF as a measure to be somewhat more deterministic and to do things in a more sane way. This speedrun is possible if one assumes the SRAM memory starts out like that. If we were to work with any other "uninitialized state" where the SRAM memory could have any other possible values, a much faster speedrun could be possible in theory. The memory would have to align in such a way that the game interprets it as a valid savegame with a correct checksum. The photosprite ID for Mario and Luigi must be a good value so the game doesn't crash on the file select screen. And the starting room must be one that leads into the ending cinematics (30, 455, 478 or 479). Then it would be possible to load up the game, see a savegame is already there and loading that savegame places us right at the ending cinematics. Savegame-corruption! Each savegame has a 1-byte checksum which is the sum of values in $0010-$0013, $0018-$06FF and $0704-$0707. (Add 0x06F8 for slot 2 and 0x06F8*2 for slot 3) Also some bytes need to have certain values for the game to consider a savegame as active and valid. Because of how the game works, the game keeps savegame memory not only in SRAM but also in EWRAM. Upon loading up the game, SRAM memory is copied to EWRAM memory and when saving or copying, EWRAM memory is copied to SRAM memory. Now, in order to corrupt memory in SRAM, these tools are available to us: 1) Saving - copies values to SRAM, 8 bytes per frame, from top to bottom. 2) Copying - copies values to SRAM like saving does. 3) Deleting - sets values in SRAM to 0, 8 bytes per frame, from top to bottom. 4) "wipe all saves" - like a normal delete from top to bottom, but for all three savegames plus the Mario Bros. highscore. Done by holding L+R+A+B+Select when the game starts up and choosing yes twice. You can interrupt each of these with a hard-reset. It is not recommended to do with the real hardware as it is said that the game cartridge or the battery could take damage, but for all intents and purposes, here, it just interrupts what the game was doing. If the checksum is still correct and the bytes are telling that the savegame is active*, then the savegame will be valid even though the saving/copying/deletion procedure did not finish. (*One flag that tells if the savegame is ok is set first thing when saving and copying; said flag is unset first thing when deleting; And said flag is set to 0x00 first thing when "wiping all saves".) How savegame corruption is used in the run The values inside a savegame are ordered like this (just to give a general idea.): - Mario current room - Luigi current room, - Mario stats, direction, photo sprite ID, - Luigi stats, direction, photo sprite ID, - Items - Bunch of flags, in this order (We are thinking in 8 bytes since the game saves and deletes in 8 byte blocks:) -- "Can go to Bowser's Castle" -- "Escaping from Bowser's Castle" -- current unlocked Action Commands (in $0227~$022F, $0920~$0927 for slot 2) -- "Can use Bros Attack, items, flee in battle" (in $0230~$0237, $0928~$092F for slot 2) -- "Block Action Commands" flag (in $0240~$0247, $0938~$093F for slot 2) -- Green Pipes flag (in $0248~$024F, $0940~$0947 for slot 2) -- "Loading zone in 3rd room in Koopa Cruiser exists" flag (in $02A8~$02AF, $09A0~$09A7 for slot 2) -- "Collision box in 3rd room in Koopa Cruiser exists" flag (in $0300~$0307, $09F8~$09FF for slot 2) -- Splash Bros. Uses, Bounce Bros. Uses, etc. (in $0577~$057F, $0C6F~$0C78 for slot 2) In Toad Town is where we get our first opportunity to save the game. The saving is interrupted by hard-reset which allows anything past Luigi's photo sprite ID value to remain as 0xFF. Since the photo sprite ID must not be 0xFF (to prevent the game from crashing on the file select screen) this is the earliest point we can interrupt the saving procedure. A few frames are spent waiting before the saving starts so the in-game time advances in order to make the checksum match correctly. Now, one would think this savegame which has all flags set to 0xFF would be perfect for the purpose of advancing forward and finishing the game. Most cutscenes won't play since the game thinks we already watched them. But there were a few hurdles that needed to be gotten rid of, in the form of undesirable flags. There is a "Block all Action Commands" flag that prevents us from using any action commands on the overworld (even prevents the front brother from jumping) which must be set to 0. Let's punch smaller 0x00 holes into our savegame You can punch 256-byte sized "0x00 holes" into a savegame that was filled with 0xFF - by copying, delete & hard-reset, copy& hard-reset - and come out with the correct checksum. That's because the checksum is only 1 byte and overflows (The checksum plus 0x256 is the same value). Even though you can do that, it is not a viable option here since there are other crucial flags that must not be set to 0, such as one flag that enables the next loading zone in Koopa Cruiser, one flag that disables a collision box in Koopa Cruiser, and of course the "have spinjump / highjump / hammer / hand" flags. So a special method needed to be used to place 0x00 sections that are smaller than 256-bytes. A careful eye will have spotted that we were playing on slot 2. We did a factory wipe at the beginning of the run to set some of slot 1's memory to 0x00, up until $039F. The savegame we just made in slot 2 is now copied to slot 1 until we interrupt by hard-reset. This effectively means a small hole of 0x00 was placed in slot 1 in $0308~$039F ($0300~$0307 being the last 8-byte block that needed to be 0xFF, as it contains the "collision box in Koopa Cruiser flag"). At this point, slot 1 is still considered invalid since the checksum is incorrect, but the data remains there indefinitely. Now, slot 2 is copied to slot 3 completely. Then, slot 2 is deleted until we interrupt by hard-reset. Slot 2 is invalid. Then, slot 3 is copied back to slot 2 and we interrupt again. Slot 2 is valid again. This created a 256 byte sized hole of 0x00 in slot 2, in $0938~$0A37. Finally, slot 2 is copied to slot 1, which is interrupted, causing slot 1 to have two smaller holes of 0x00, both summing up to 256 bytes of 0x00 which causes its checksum to match and be valid. The two smaller holes of 0x00 in slot 1 are located in $0240~$02A7 and $0308~$039F. Any values before $0240 and after $02A7 and before $0308 must be 0xFF because important flags are located there. And we wanted to squish $0240~$0247 to zero as it contains the bad flag that blocks action commands. If we hadn't done this, we would have gotten stuck in Koopa Cruiser (missing loading zone or collision box stopping us) or would have had other problems with progression (no action commands, no jumping in Stardust Fields). Using glitched Badge When items in memory are set as 0xFF, the game reads that as "the player doesn't have it". Because all items are set as 0xFF, the player doesn't have any badge or pants but is still allowed to switch them. In this case, a glitch happens where the player can choose their clothing or badge in a list of glitched options. Strangely, this list is different depending what room you are in. I choose a badge for Mario and Luigi that raises Pow and allows me to defeat Fawful by jumping once each. Choosing this badge turned out to be fastest to do in the 2nd room of Koopa Cruiser. Why go to Hohooros? For certain gameplay events, the game uses a special timer (called "event timer"). This timer is used by a surfing minigame in Oho Ocean, a jumping minigame in Guffawha Ruins, a time-limit block in Gwarhar Lagoon, a time-limit block in Bowser's Castle and the escape from Bowser's Castle (there may be more). If you enter Bowser's Castle when the game thinks you are escaping, it checks for the event timer to trigger a game-over if it reaches 0. You can bypass that if you make sure the event timer is non-zero, such as when failing the Hohooros minigame and then leaving. There is no other way around it. Since most flags are set to 0xFF, Hohooros is considered to be already beaten, but the flag for the check if you are touching the ground is also active, allowing us to do the minigame again. I was also considering going to the surfing minigame instead (we have set the green pipes flag Edit: Nvm, I lied. But we could set it if we want.), but I think it would take longer. Firedash glitch This glitch only works on the Japanese version of the game. It is used in this run in order to travel through the mountain area faster. This glitch happens if you use Firedash right before a ledge which causes the brothers to enter a glitched state because Luigi is allowed to move on when Mario behind Luigi is not ready yet. While working on this run, I found a different Firedash glitch which I will call "Firedash speed glitch". Firedash speed glitch When doing a firedash that has Luigi fall off a ledge, if Luigi gets boosted by an adjacent ledge, then it is possible that the brothers will be allowed to move around the room at 768 or even 1024 speed (512 speed is normal walking speed). Deathwarping? I tried saving in Hoohoo Village and deathwarping after getting the event timer at Hohooros, but this turned out to be about 10 seconds slower. Why not submit this I think some rooms should still be looked at for improvements before this should be submitted to TASvideos. One NPC boost off a blue Toad couldn't be manipulated at the Toad Town plaza. One NPC had bad placement in Hoohoo Village so I had to go around. I didn't spend too much time on optimizing the Firedash glitch in the mountain area. "Firedash speed glitch" has potential for use in Koopa Cruiser. New Luascript Version 0.13 of my luascript, which allows the script to run on the latest Bizhawk and fixes many things, will be released soon™. I will make a new post when the time comes. EDIT: I renamed "factory wipe" to "wipe all saves". The word factory wipe implies that the SRAM battery is shipped with all 0x00, but the game's manual does not mention the word "factory wipe".
Editor, Experienced Forum User, Published Author, Expert player (2329)
Joined: 5/15/2007
Posts: 3933
Location: Germany
If I understand right, you want to start a game where the save file is all 0xFF, except for the 4 bytes before the timer? What are those bytes for? Do they ever change when saving in game?
Right. However, as I found out, those 4 bytes before the in-game timer can be ignored since they are not counted to the checksum. I don't know what they are used for...
Editor, Experienced Forum User, Published Author, Expert player (2329)
Joined: 5/15/2007
Posts: 3933
Location: Germany
I encountered a problem with TAStudio. Worked on it playing game A. The next day I tried to open it in game B, when loading a state/branch it would say "it is throwing a fatal exception, would you like to save (depending on what caused the error, this may or may not succeed)?" Since I was still oblivious to the fact that I'm on the wrong game, I confirmed to save, thinking it might export a bk2 instead. Now when I'm trying to open the tastudio file on the correct game, it doesn't accept any branch loads and the beginning is ruined so it doesn't actually progress through the game. Since I have made backups, the loss is not significant but I want to bring to your attention that tastudio should probably not throw exceptions when loading bad states/branches. Also, instead of saving over the problematic file, it should save a second file... @CasualPokePlayer I'm saying when loading a state it should "forget" that I inputted a hard-reset. Loading a state should rewind to the exact situation I was in before.