Potato
He/Him
Editor, Player (158)
Joined: 3/7/2020
Posts: 53
Location: Mars
MUGG wrote:
To answer your question, in order to be able to buy #1 Trousers from the Bean clothing shop, you have to defeat Mom Piranha or Trunkle or Popple & Birdo, or collect all 4 star bean pieces.
Thanks, I also figured it out a few hours ago that you needed to defeat Mom Pirahna in order to unlock the #1 Trousers, but yours is way more helpful. We planned to do Mom Pirahna, Birdo & Trunkle early on anyway. This is how the route looks so far for All Bosses: 1. Tolstar 2. Hoohooros 3. Dragohoho 4. Queen Bean 5. Popple & Rookie (I) 6. Mom Pirahna 7. Birdo 8. Trunkle 9. Popple (Solo) 10. Wiggler 11. Chuckolator 12. Cackletta 13. Popple & Rookie (II) 14. Hermie III 15. Chucklissa And now we're trying to figure out the optimal boss order for Bowser's Castle. We have 2 ways to look at it; the first would be to play through the castle as "normal" (meaning, no Castle Skip to reach Bowletta and doing Iggy first and Fawful last). The first thought we had was to do them in this order: *Note: Since we're going to do Bowletta and Cackletta last no matter what they are not going to be in the list below. - Iggy - Roy (using teleports to reach him early) - Ludwig - Lemmy - Morton - Wendy - Larry - Fawful The other way we could do it is to just do them in the intended order. This would mean, Iggy, Morton, Lemmy, Ludwig, Roy, Wendy. Larry, Fawful, but I think that may be slower than the previous order. Finally, there is also the possibility to do the bosses in the reversed order; this would imply doing Castle Skip to reach Fawful and fight him first, then work your way backwards to Iggy and then perform Castle Skip again to fight Bowletta. We're not sure if you can defeat the Koopalings after you defeat Bowletta and Cackletta by skipping Prince Peasly's cutscene with a teleport. That will have to be tested in the near future.
MLSS Any% TAS out! (link)MLSS All Bosses TAS out! (link)MLSS Glitchless TAS out! (link)
Potato
He/Him
Editor, Player (158)
Joined: 3/7/2020
Posts: 53
Location: Mars
MUGG wrote:
You can manipulate RNG without losing time or with losing only very little time, by optimizing the camera (having entities be active or inactive at different frame counts, thus causing a different advancement of RNG), but it is very time-consuming and tedious.
How do you exactly know when entities go offscreen? This information would be very helpful for future TASes.
MLSS Any% TAS out! (link)MLSS All Bosses TAS out! (link)MLSS Glitchless TAS out! (link)
Editor, Expert player (2323)
Joined: 5/15/2007
Posts: 3899
Location: Germany
How do you exactly know when entities go offscreen? This information would be very helpful for future TASes.
It is probably possible to visualize it by luascript. For my own projects I've only relied on trial and error. RNG values aren't advancing if the entity has gone offscreen too far (= it has gone inactive).
Editor, Expert player (2323)
Joined: 5/15/2007
Posts: 3899
Location: Germany
For future reference, a list of battle backgrounds by ID. When entering battle, $24BA (IWRAM) will tell which background to use and $4204 (IWRAM) and $654E (IWRAM) will be set to the same value subsequently. You can poke a different value to $24BA to get a different background. Also see here. 0 - Test (unused) 1 - Peach Castle 2 - On Koopa Cruiser 3 - Stardust Fields 4 - Hoohoo Mountain 5 - Hoohoo Mountain Top 6 - Beanbean Outskirts cave 7 - Inside Koopa Cruiser 8 - Beanbean Outskirts (same as 11) 9 - Beanbean Outskirts South 10 - Beanbean Beach 11 - Beanbean Outskirts (same as 8) 12 - Beanbean Castle Sewers 13 - Beanbean International Airport 14 - Chateau de Chucklehuck 15 - Chucklehuck Woods 16 - Chucklehuck Woods South (Towards Snail Game) 17 - Chuckolator room 18 - Gwarhar Lagoons 19 - Seabed 20 - Woohoo Hooniversity 21 - Woohoo Hooniversity Library 22 - Woohoo Hooniversity Green Floor 23 - Woohoo Hooniversity Cackletta room 24 - Woohoo Hooniversity Purple Floor with stars (unused) 25 - Woohoo Hooniversity Basement 26 - Beanbean Castle 27 - Teehee Valley Underground 28 - Guffawha Ruins 29 - Teehee Valley 30 - Oho Oasis Fire Temple 31 - Oho Oasis Thunder Temple 32 - Joke's End Inside 33 - Joke's End Outside 34 - Woohoo Hooniversity Barrel Section 35 - Bowser's Castle 36 - Bowser's Castle Lava 37 - vs. Final Cackletta 38 - vs. Final Fawful 39 - vs. Bowletta 40 - (crash) 41 ...
Potato
He/Him
Editor, Player (158)
Joined: 3/7/2020
Posts: 53
Location: Mars
MUGG wrote:
For future reference, a list of battle backgrounds by ID. When entering battle, $24BA (IWRAM) will tell which background to use and $4204 (IWRAM) and $654E (IWRAM) will be set to the same value subsequently.
How would this help though?
MLSS Any% TAS out! (link)MLSS All Bosses TAS out! (link)MLSS Glitchless TAS out! (link)
Editor, Expert player (2323)
Joined: 5/15/2007
Posts: 3899
Location: Germany
This is for documentation. Useful if anyone or I wants to make a video fighting enemies in unusual places. I'm really only trying to improve upon that atlas script you gave me, though.
Potato
He/Him
Editor, Player (158)
Joined: 3/7/2020
Posts: 53
Location: Mars
Okay, so I've been trying to do teleports in different places on English just to see if we're able to skip cutscenes or reach loading zones that were not doable without the usage of teleports. Here are my results: • With 2 precise teleports you can actually reach the Popple (Solo) fight in Chucklehuckle Woods early; one to get past the big koopa blocking the door to the cave section, and one to get past the NPC to skip having to do the minigame for 500 coins to reach Popple's room. You then need to do another teleport to get past the NPC on your way back as well. With some careful Follow Path positioning I was able to get all 3 teleports. This enables us to do Popple early if we want to for All Bosses, and we thought about it carefully, since he gives lots of coins and EXP. We'll see if we want to forgo doing him as early as possible over doing him later when you have more mush damage. • Also in the Chucklehuckle Woods, you can do a 136 warp to go past Chuckroot without getting into his cutscene at all. Even though we are forced to switch more often since 136 gets overwritten very quickly, those switches obviously pay off if we can reach Chuckolator early. RTA used to do something similar on the Japanese version; they'd warp into a wall and then jumped with Luigi high in the air to make Mario clip past Chuckroot, and then they emerged with Luigi to enter the loading zone. What we do for TAS is obviously faster than what RTA does. We have been trying to come up with a way to 1 cycle Chuckolator, without letting him do any attacks using #1 Trousers, but that involves getting Mario to 59 speed, and that requires a LOT of level ups. We are going to further investigate if it's worth doing. • The door in University that gets us to Cackletta can be barely teleported into. It seems like at Z 57344 there is actually another loading zone for this door that we can enter by letting the walls push us into it. But how do you even get to Z 57344? Well, you teleport into a wall, then use emerge. While emerging, the walls will launch Luigi in the air 57344 units upwards in a single frame. This skips having to hit the last switch to open the door which saves a lot of time. • If you don't defeat Chuckolator, there is a door inside Beanbean Castle that doesn't unlock unless you defeat him and play the cutscene of resurrecting Queen Bean. But at this point I wouldn't have talked about it if it wasn't possible to skip it. So, yes, you can skip it, but not in the same way the University door was skipped. You will need to do a 136 warp instead of a 256 one by teleporting from the ledge where the door is standing on. If your Follow Path Y is perfectly set up to be the exact Y coordinate of the loading zone behind the door, and if your Follow Path X is also between certain coordinates, you can barely manage to get inside. This means we don't have to do Chuckolator early, but we will still probably do it, mainly to skip having to teleport past the guards to get to Cackletta and to teleport past the rocks that block us from reaching the East side of Beanbean Town, which are also unlocked after you defeat Chuckolator. I will test some more areas of the game, probably Joke's End and Bowser's Castle, to see how much more can be skipped.
MLSS Any% TAS out! (link)MLSS All Bosses TAS out! (link)MLSS Glitchless TAS out! (link)
Editor, Expert player (2323)
Joined: 5/15/2007
Posts: 3899
Location: Germany
I'm sorry I just disappeared for half a year without saying anything. Surely you are disappointed that I didn't help you out with your WIPs or with the overlay. I'm too burned out. There are countless projects that I had left over the years, abandoned, that I really wished I could finish but I never could. It pains me. Somehow after all these years of TASing and glitch hunting and documenting, it felt like I had to do a hard break. At this point I lost all fun and it felt like the "reward" for putting work in is not enough, or not worth my life time anymore. I have certainly hit a stage where I can say I have done what I could. And I have done a lot for this community.
Post subject: All Bosses - First preview
Potato
He/Him
Editor, Player (158)
Joined: 3/7/2020
Posts: 53
Location: Mars
MLSS Any% TAS out! (link)MLSS All Bosses TAS out! (link)MLSS Glitchless TAS out! (link)
Potato
He/Him
Editor, Player (158)
Joined: 3/7/2020
Posts: 53
Location: Mars
Thought I'd leave them here too. Link to video Link to video
MLSS Any% TAS out! (link)MLSS All Bosses TAS out! (link)MLSS Glitchless TAS out! (link)
Post subject: PAL version
Potato
He/Him
Editor, Player (158)
Joined: 3/7/2020
Posts: 53
Location: Mars
So a few weeks ago Sjorec found out that the PAL version doesn't lag as much when using Void Barrel, and most importantly (for RTA at least) it also lets you change Mario's action command so you can hammer out of the Void Barrel. It's estimated to save about 10 seconds in Any% for RTA, and perhaps it could be slightly faster than the English version for TAS as well, but I'm wondering if there's anything else that's different in the PAL version. Link to video
MLSS Any% TAS out! (link)MLSS All Bosses TAS out! (link)MLSS Glitchless TAS out! (link)
Post subject: All Bosses TAS reveal
Potato
He/Him
Editor, Player (158)
Joined: 3/7/2020
Posts: 53
Location: Mars
I am proud to present to you my newest TAS of this game: the All Bosses TAS. Reveal will be once again on my YouTube channel and this time I will try my best to also release the commentary for it. Don't know the date though.
MLSS Any% TAS out! (link)MLSS All Bosses TAS out! (link)MLSS Glitchless TAS out! (link)
Post subject: All Bosses TAS
Potato
He/Him
Editor, Player (158)
Joined: 3/7/2020
Posts: 53
Location: Mars
MLSS Any% TAS out! (link)MLSS All Bosses TAS out! (link)MLSS Glitchless TAS out! (link)
Potato
He/Him
Editor, Player (158)
Joined: 3/7/2020
Posts: 53
Location: Mars
Glitchless TAS will be premiered today at 1:30PM EST on my YouTube channel. Link to video
MLSS Any% TAS out! (link)MLSS All Bosses TAS out! (link)MLSS Glitchless TAS out! (link)
Potato
He/Him
Editor, Player (158)
Joined: 3/7/2020
Posts: 53
Location: Mars
So, it was just a normal day yesterday when I suddenly got the idea to try and mess around in Peach escort room 4, the infamous room where Mugg got the credits warp back in 2014 that was deemed impossible to replicate outside of the VBA emulator. But back in 2022, RETIRE figured out that it's possible to do it on mGBA, although it requires memory editing to change the byte at $2336 in IWRAM to 10 in order for the game to load the credits sequence. Up until now, based on the attempts that were made to pull off the credits warp legit, the result always ended up being one of the scripts being played, and the script loaded stayed mostly consistent every time it was loaded, so it was pretty much assumed that this game only had Arbitrary Script Execution to work with. Below is a list with all the scripts that could be played by changing the byte at $2336.
Byte valueOutcome
05Mario turns into his form when he ingests water
07Warp to room ??? (room ID: 128)
08Warp to room ??? (room ID: 128)
09Start minecart minigame
0AStar amimation from when entering a battle (softlocks the game)
0BOpen suitcase menu
0COpen save menu
0DOpen map (area selection screen)
0EOpen shop selling items menu
0FTrigger death warp (respawn screen)
10Trigger credits sequence
11Warp to test room (room ID: 0, unused)
12+No effect, game simply softlocks
The byte at $2416 is responsible if the game crashes when Luigi breaks out or hops off a barrel. Throughout the game, this byte is set to 0 most of the time but a few rooms, like room 4 of Peach escort or Chuckroot's room, change it to 22 instead if Luigi is in a barrel which triggers the crash to happen. However, when Luigi breaks out of the barrel (or when Mario hops off the barrel), as soon as both bros are on the ground, the game always sets the byte at $2336 to 0A which corresponds to the star animation being played. This caused the progress to stop dead in its tracks, since we realised this value is most likely not useful for us if we want to make credits warp a reality in real time. It was already established for years that the bros' position in the room and what action command Mario had in the back could lead to different scripts being played, but yesterday I decided that I wanted to try to trigger as many of these scripts as I could and make input files for them in order to maybe analyze them and potentially figure out why they happen when they happen. I was able to trigger some of these events, as well as some other events that couldn't be achieved by editing $2336. But probably the most interesting result that I got during my testing session was this: This is the shop selling menu, a script that is by no means a rare script to trigger, in fact I managed to trigger it dozens of times before. However, this instance of the script was special because it had this glitched badge at the bottom (which I was able to actually sell and not softlock the game), something which never appeared in any of my other instances of triggering the shop menu. I am not sure why this badge was generated but my assumption is that it had to have read some garbage parameters from somewhere when it was loading the items, which got my hopes up a bit that actual Arbitrary Code Execution might be possible to do in this game. I have yet to figure out how it happened but this might a good step in the path to discovering ACE.
MLSS Any% TAS out! (link)MLSS All Bosses TAS out! (link)MLSS Glitchless TAS out! (link)
Potato
He/Him
Editor, Player (158)
Joined: 3/7/2020
Posts: 53
Location: Mars
This is an update to the post I made yesterday, because we have made a lot of progress during the last 24 hours.
when Luigi breaks out of the barrel (or when Mario hops off the barrel), as soon as both bros are on the ground, the game always sets the byte at $2336 to 0A which corresponds to the star animation being played. This caused the progress to stop dead in its tracks, since we realized this value is most likely not useful for us if we want to make credits warp a reality in real time.
In the previous post I mentioned that trying to modify $2336 in IWRAM was established to not actually be useful for pulling it off legit, however we discovered that $2336 is not the only value that handles what scripts are being run or what events are being triggered. The memory address $2337 handles which minigame you are currently into; when you are not inside of a minigame, the game simply sets this byte to FF, and when you are inside the game changes this byte to one of these values, depending on which minigame you are in.
Byte valueMinigame entered
00Minecart minigame (Hoohoo Mountain)
01Geno minigame (Little Fungitown)
02Border jump (Stardust Fields)
03Barrel minigame (Cruise Ship)
04Winkle minigame (Chucklehuck Woods)
05+All entities disappear, game softlocks
This value is also not very useful for us since it stays as FF while doing the crash, but it was something to work with. What is useful to us, however, is that there is another address that changes what script you trigger, located at $2339. This byte is responsible for the shop menu and which one you open (the menu for buying items, the menu for selling items, and the menu for buying clothing gear & badges). It is usually set to 02 for the EU version and 00 for the US version, and after you talk to a shop NPC the game sets it to one of these values, depending on which shop you enter and if you want to buy/sell.
Byte valueShop menu entered
01Item shop (selling menu)
03Item shop (buying menu)
07Badge shop (Beanbean Town)
0FBadge shop (Little Fungitown)
One reason why this byte is useful for us is that we can actually enter all of these menus from room 4 in Teehee Valley, but the main reason that makes it especially useful is because of this line inside of the game's code, which looks like this after being simplified:
03002339 = 03002339 & 0xee;
The game takes the value at $2339 and ands it with 0xEE, and this process is looped however many times you close out of a script. Then, the game runs this code with the result:
addr_02339 = (addr_0220C + 0x12d);
  if ((addr_02339 & 1) != 0) {
    FUN_08027740(addr_0220C);
    FUN_080254b6();
  }
  if ((addr_02339 & 0x10) != 0) {
    FUN_08028160(addr_0220C);
    FUN_080254b6();
  }
  if ((addr_02339 & 0x20) != 0) {
    FUN_08028f08(addr_0220C);
    FUN_080254b6();
  }
The first check is for the shop menu script, whether or not it's the script that is active. After this check is done it sets bit 0 if it is active, then it ands it with 0xEE once you close out of the shop and then bit 0 is removed. The second check is for whether or not this script is active, and if it is, it sets bit 4. The third check is for whether or not the script for the credits sequence is active. If it is, it sets bit 5. Past 0x20, the majority of values will yield us a credits warp, and since bit 0 is always removed no matter what script you close, this means that the conditions for a credits warp to happen would be to set any value that has bit 5 set but not bit 4. So now, all we have left to do is figure out which process is writing to here.
MLSS Any% TAS out! (link)MLSS All Bosses TAS out! (link)MLSS Glitchless TAS out! (link)
Potato
He/Him
Editor, Player (158)
Joined: 3/7/2020
Posts: 53
Location: Mars
This document contains all the useful information that we have found so far.
MLSS Any% TAS out! (link)MLSS All Bosses TAS out! (link)MLSS Glitchless TAS out! (link)
Editor, Expert player (2323)
Joined: 5/15/2007
Posts: 3899
Location: Germany
I explored the possibility of savegame corruption. General info Checksum is 1 byte at $0016 (SRAM) for file 1, $0016+0x6F8 for file 2, $0016+0x6F8*2 for file 3. The checksum is the sum all bytes at $0010 ~ $0013 and $0018 ~ $0707. (Add 0x06F8 for file 2 and 0x06F8*2 for file 3) When saving a file, at the very start, checksum is written to $0016 and then all the values are written over the previous savegame. When booting the game, the game checks if the checksum is indeed the sum of all bytes inside the savegame, otherwise the savegame is invalid and will be treated as empty. If you hard-reset in the middle of saving and the sum of all bytes still matches the checksum, the savegame will be treated as valid. Demonstration bk2 input file My luascript can show savegame values and checksum, but it is very old. I only managed to make v0.11 r4 of my script run in Bizhawk 1.13.2 (mGBA core) and had to modify the script so the "auto apply checksum" feature would run every frame while the client is paused, rather than "every second or so". https://tasvideos.org/UserFiles/Info/638628517930104241 https://youtu.be/mzqw3qauXBA This is from a bare-bones playthrough which used the luascript's "run event" feature to directly go to Little Fungitown. I gave myself 256 items and 0 coins. At the beginning of the movie, I save the game, then go to sell my items. When saving, I did a bit of trial and error, since things like Mario and Luigi's pixel position are saved, too, and can mess with the checksum calculation... First, I save and see what checksum the game writes to the savegame at $0016 (SRAM) at the beginning of the saving procedure, then I repeat (saving at the same positioning) and let my script's modified "auto-apply checksum" feature run. At the frame the coins are written to the savegame, I check if the new calculated checksum matches the previous checksum. If not, I try to save at a different positioning and repeat the above steps. If yes, success - I repeat without the "auto-apply checksum" feature and hard-reset at the frame the coins are written. The savegame will show up in the file select screen. The movie demonstrates that I gained coins but kept my items. Possible uses In theory this could be used for: - Advancing in the game and reset flags later (blocks could be hit again, events could take place again, etc.) - You could gain stats while staying at current level - Visiting test rooms 0x00 and 0x01 (US or EU version only) - Visiting room 0x00 to trigger the opening cutscene (JP only) but game soft-locks after the cutscene. - You can set your pants and badges to 0, which makes it so you can select glitched pants or badges in your inventory. Possibly applies for coffee items, too. I did not explore hard-resetting while copying a savegame yet. But in theory, some shenanigans are possible. E.g. - Save in slot 1 in room A - Copy slot 1 to slot 2 - Continue and save to slot 1 in room B - Delete slot 1 (hard-reset at the beginning of the procedure to avoid actually setting everything to 0) - Copy slot 2 to 1 and hard-reset - You are now in room A with things accomplished from slot 2. (I was thinking about this as a timesaver to go to Hoohoo Mountain Base during the endgame quicker, but it looks unlikely and slow.) I had no success when deleting a savegame. Even with the "auto-apply checksum" feature, savegame would not show up... For speedrun purposes, since room id gets wiped first, it would not be useful since room id 0 is intro cutscene (JP) or test room (US/EU). Order of values in savegames While saving, values are written from top to bottom in chunks. Roughtly speaking, at the very top is the room id, followed by Mario and Luigi's position and "who is active" flag, then stats (first the experience, then the level, then the stats), then money( + all types of mushrooms, nuts and super nuts - all in the same frame) then rest of items, then flags (who learned what move, which blocks you hit in each room etc.). The ingame time is saved at the very end. Subframes? I shall mention that in theory, you could reset at subframes so you have more precision when to interrupt the saving procedure. But I have no experience with this. Maybe you can come out with new values if you reset in the middle of saving a value (such as in the middle of the CPU instruction). For example, resetting while the value for the room id gets written to come out with a new room id. (Room 30, 455, 478 and 479 are good for reaching the ending cinematics.)

1727562722