It's the time again, huh? Happy C3!
Since, as usual, I have a lot to talk about this C3, I'll quickly run through all the stuff I'm showcasing so those of you that don't want to climb the mountain of text ahead won't have to.
-----------------------------------------------
SMAS+W Disassembly
Full disassembly of all 5 games, 3.5 more than the last time I showed it off.
-----------------------------------------------
Super Mario Bros. 3 (standalone, SNES)
Imagine if Nintendo released SMB3 by itself on the SNES. That's what this is. Apply this patch to the USA version of SMAS+W.
-----------------------------------------------
VWF Dialogues Patch V1.3
RPG Hacker's patch, but updated with a huge number of new features, many ported over from Mario & Yoshi's Strange Quests.
-----------------------------------------------
Various SMAS SMB3 Patches
Some IPS patches I converted to .asm format, all set to work with SMAS, SMAS+W, and the above standalone SNES SMB3.
Also includes a level and overworld inserting patch as well as an ending editor patch I made myself.
-----------------------------------------------
Bonus: My Super Mario Maker 2 courses
Yoshi's Run Through the Desert
ID: 9R2-3D2-TTF
King of the Jungle
ID: MN6-FWC-NYG
Boom Boom: Psychological Horror
ID: RSY-03F-S0G
Bowser Loves Seesaws!
ID: R24-38C-DYF
The Perfect Throw
ID: LPT-632-TDG
Nekos in Nooks
ID: VYW-DJH-7HG
Multiverse Cavern
ID: G35-N9X-D0G
-----------------------------------------------
Alright, now for the mountain of explanation text. Get that mountain climbing gear ready!
Regarding the disassembly, I've been quiet about it outside my Discord server, but I've been hard at work with this disassembly for the past 6 months. There's been a lot of big changes to the disassembly, such as the fact that all 5 games have been disassembled, not just SMW and SMB3. The SMAS portion has also been nearly fully isolated and documented, outside of a few RAM addresses that are missing labels.
The SMB3 portion of the disassembly in particular is something I'd like to draw attention to, because not only has it been fully disassembled, but I've also made it possible to assemble it by itself. Now, I'm not talking about assembling SMAS+W with just SMB3 (which you can certainly do with my disassembly), I mean assemble it as if it was a fully functioning SMB3 ROM for the SNES. I basically took SMB3 out of SMAS+W and got it working on its own with little sacrifice. To do this, I had to add in my own code in order to recreate certain functionalities that are normally handled outside of SMB3, like the file select, ability to erase files, changing what the B button does, selecting the starting world, etc.. I also went further and did things like shifting everything towards bank 00, porting over some non-essential things like the splash screen to make this ROM feel more authentic, and doing my best to keep the original code intact.
If you're interested in hacking SMAS SMB3, then this standalone ROM gives you slightly more than 3 MB* worth of space to work with with no sacrifices. In addition, everything in banks 01-0A is positioned identically to what was in banks 21-2A, so any .asm patches you have that hijack that area can easily be converted. However, the only downside, in terms of features, of using this ROM over SMAS+W is that I had to cut one of the save files. I wasn't sure how I would handle the erase file option on the file select menu, so I had to use the screen space that otherwise would have been for file 4 for selecting the erase file function. This might not be a huge deal though, since 3 save files is plenty.
To help get you started, I converted a few IPS patches to .asm format to use with this version of SMB3. I technically did these as a request for SMW_Hacker17 from the SMWCentral Discord, hence why I have this random selection of converted patches, but I figured I'd show them off as well. However, I also included a patch for inserting levels/overworld data and a patch that lets you editor some aspects of the ending, both of which were made by me.
Also, I'd like to point out that I want to give this treatment to the other SMAS+W games. I didn't have the time to get the other games working as a standalone ROM, but since SMB3 is working, getting the other ones working should be fairly easy. Also, I'd like to thank SMW_Hacker17 for helping me test out the standalone SNES SMB3 ROM.
As for the main SMAS+W disassembly, it was a lot of work disassembling all the games. I encountered quite a few bugs along the way, and I thought I'd share some of the more interesting ones:
Behold, the legendary red frog suit!
(This is actually small Mario with incorrect graphics. SMB3 stores the frog suit and small Mario graphics together).
SMBLL on the Atari 2600
(Note: This image was resized to half size, since this crash actually managed to enable psuedo-hires mode).
Luigi is so strong, he managed to pull the universe inside out!
Luigi is feeling really shy during the ending.
I guess I won't be raiding this pyramid then...
So, I tried to play SMB2, but I can't because there is no floor.
This isn't a bug with my disassembly, but something I noticed while working on SMB1. The collision here doesn't actually match up with the graphics!
Ever wonder what the minus world was like in SMAS SMB1? Here you go. Note that this required me to remove a check that prevents the world number from exceeding 8.
*SMB3 is 1 MB in size, but bank 1F is completely unused.
-----------------------------------------------
Regarding the VWF Dialogues patch, I decided to update this patch recently. Here is the changelog:
A lot of the above changes are things I coded into MYSQ, and enable some really powerful functions. For example, MessageASM allows you to run custom code on a per message basis. This allows you to run your own custom scripts for messages that can run every frame regardless of what the text box is doing. You can also use what I call "text macros", where you define a string of text/commands, and can call it using just 3 bytes. So for example, instead of typing out "Princess Peach" each time you use that string, you can convert it into a text macro and then display that 14 byte string using a 3 byte command each time it's needed. This will allow you to save ROM space and improve consistency with your key terms. There is also the text pointer modification feature where you can press start to change the text pointer. It's meant for allowing the player to quickly close a text box, but can be set to do other things if necessary.
Anyway, here are a couple examples of what can be done with some of the new features:
Custom menus that can be scrolled through without waiting for the text to finish displaying.
Name Entry Screen, using MessageASM to handle the cursor controls and command $EB to disable the normal end of text box behavior.
Face portraits and auto-display current speaker's name at the start of the current text box. Both functions are synced to update when the text box is cleared.
This is from DPBOX's hack that he is showing off this C3
Also, big thanks to DPBOX for helping me test out this patch! Part of the reason I updated this patch was because a hack he's been working on needed some of these new features, so it was kind of a back and forth trade of helping each other out.
-----------------------------------------------
As for the Mario Maker 2 levels, seeing as how the game just came out, I figured I'd share my level codes. (Although I was going to do this even before I realized the C3 theme would be Mario Maker 2 ).
-----------------------------------------------
And that about covers it for my C3 thread. I hope you guys liked it!
My Hacks:
Mario's Strange Quest V1.6
Yoshi's Strange Quest V1.3 / V1.3.1 Beta 4.6
Mario & Yoshi's Strange Quests (2/10/2023 Build)
Other stuff:
My SMW/SMAS/SMAS+W disassembly
Yoshifanatic's Discord Server: A place for fans of my stuff and/or Yoshi to chat with others.
Since, as usual, I have a lot to talk about this C3, I'll quickly run through all the stuff I'm showcasing so those of you that don't want to climb the mountain of text ahead won't have to.
-----------------------------------------------
SMAS+W Disassembly
Full disassembly of all 5 games, 3.5 more than the last time I showed it off.
-----------------------------------------------
Super Mario Bros. 3 (standalone, SNES)
Imagine if Nintendo released SMB3 by itself on the SNES. That's what this is. Apply this patch to the USA version of SMAS+W.
-----------------------------------------------
VWF Dialogues Patch V1.3
RPG Hacker's patch, but updated with a huge number of new features, many ported over from Mario & Yoshi's Strange Quests.
-----------------------------------------------
Various SMAS SMB3 Patches
Some IPS patches I converted to .asm format, all set to work with SMAS, SMAS+W, and the above standalone SNES SMB3.
Also includes a level and overworld inserting patch as well as an ending editor patch I made myself.
-----------------------------------------------
Bonus: My Super Mario Maker 2 courses
Yoshi's Run Through the Desert
ID: 9R2-3D2-TTF
King of the Jungle
ID: MN6-FWC-NYG
Boom Boom: Psychological Horror
ID: RSY-03F-S0G
Bowser Loves Seesaws!
ID: R24-38C-DYF
The Perfect Throw
ID: LPT-632-TDG
Nekos in Nooks
ID: VYW-DJH-7HG
Multiverse Cavern
ID: G35-N9X-D0G
-----------------------------------------------
Alright, now for the mountain of explanation text. Get that mountain climbing gear ready!
Regarding the disassembly, I've been quiet about it outside my Discord server, but I've been hard at work with this disassembly for the past 6 months. There's been a lot of big changes to the disassembly, such as the fact that all 5 games have been disassembled, not just SMW and SMB3. The SMAS portion has also been nearly fully isolated and documented, outside of a few RAM addresses that are missing labels.
The SMB3 portion of the disassembly in particular is something I'd like to draw attention to, because not only has it been fully disassembled, but I've also made it possible to assemble it by itself. Now, I'm not talking about assembling SMAS+W with just SMB3 (which you can certainly do with my disassembly), I mean assemble it as if it was a fully functioning SMB3 ROM for the SNES. I basically took SMB3 out of SMAS+W and got it working on its own with little sacrifice. To do this, I had to add in my own code in order to recreate certain functionalities that are normally handled outside of SMB3, like the file select, ability to erase files, changing what the B button does, selecting the starting world, etc.. I also went further and did things like shifting everything towards bank 00, porting over some non-essential things like the splash screen to make this ROM feel more authentic, and doing my best to keep the original code intact.
If you're interested in hacking SMAS SMB3, then this standalone ROM gives you slightly more than 3 MB* worth of space to work with with no sacrifices. In addition, everything in banks 01-0A is positioned identically to what was in banks 21-2A, so any .asm patches you have that hijack that area can easily be converted. However, the only downside, in terms of features, of using this ROM over SMAS+W is that I had to cut one of the save files. I wasn't sure how I would handle the erase file option on the file select menu, so I had to use the screen space that otherwise would have been for file 4 for selecting the erase file function. This might not be a huge deal though, since 3 save files is plenty.
To help get you started, I converted a few IPS patches to .asm format to use with this version of SMB3. I technically did these as a request for SMW_Hacker17 from the SMWCentral Discord, hence why I have this random selection of converted patches, but I figured I'd show them off as well. However, I also included a patch for inserting levels/overworld data and a patch that lets you editor some aspects of the ending, both of which were made by me.
Also, I'd like to point out that I want to give this treatment to the other SMAS+W games. I didn't have the time to get the other games working as a standalone ROM, but since SMB3 is working, getting the other ones working should be fairly easy. Also, I'd like to thank SMW_Hacker17 for helping me test out the standalone SNES SMB3 ROM.
As for the main SMAS+W disassembly, it was a lot of work disassembling all the games. I encountered quite a few bugs along the way, and I thought I'd share some of the more interesting ones:
Behold, the legendary red frog suit!
(This is actually small Mario with incorrect graphics. SMB3 stores the frog suit and small Mario graphics together).
SMBLL on the Atari 2600
(Note: This image was resized to half size, since this crash actually managed to enable psuedo-hires mode).
Luigi is so strong, he managed to pull the universe inside out!
Luigi is feeling really shy during the ending.
I guess I won't be raiding this pyramid then...
So, I tried to play SMB2, but I can't because there is no floor.
This isn't a bug with my disassembly, but something I noticed while working on SMB1. The collision here doesn't actually match up with the graphics!
Ever wonder what the minus world was like in SMAS SMB1? Here you go. Note that this required me to remove a check that prevents the world number from exceeding 8.
*SMB3 is 1 MB in size, but bank 1F is completely unused.
-----------------------------------------------
Regarding the VWF Dialogues patch, I decided to update this patch recently. Here is the changelog:
Originally posted by VWF Dialogues Manual
- Fixed message 7F's pointer so it no longer points to message 8F.
- Fixed an oversight where various aspects of layer 3 (transparency, priority, main/subscreen status) were not being preserved.
- Added MessageASM functionality to allow one to run custom code on a per-message basis.
- Added the ability to modify the text pointer using the start button.
- Added a text macro system, allowing one to define strings of text/commands to be called at any time in a message.
- Added an extra step to message initialization that initializes all the VWF variables on message load, not just on title screen load.
- Added command byte $EB that forces a textbox to freeze until something modifies the text pointer.
- Added command bytes $E8 and $E7 for the text macro system and that act like a JSR and RTS to the textbox system, respectively.
- Added several useful routines that can be called from within messages, such as a text buffering routine.
- Made it so that the textbox will be forced to close when the screen fades out. The fadeout will also be delayed until the textbox closes.
- Added some functionality that enables the textbox to close if another message is being set to display
- Changed the hijack location for initializing the VWF RAM on the title screen from $0086E2 to $0096B4, because the former location was very questionable.
- Fixed the incompatibility with Vitor Vilela's SA-1 Pack Patch V1.30.
- Changed the %nextbank macro to allow specifying the freespace command to use.
- Adjusted the $EF command to work with secondary entrances $0200-$1FFF, levels using Lunar Magic 3.00 custom level dimensions, and layer 2 horizontal levels.
- Added a RAM flag that indicates that the text box has just been cleared.
- Made the default message display an error message.
- Cut RAM usage in half by optimizing how the text tiles are buffered.
- Several small code optimizations.
- Fixed an oversight where various aspects of layer 3 (transparency, priority, main/subscreen status) were not being preserved.
- Added MessageASM functionality to allow one to run custom code on a per-message basis.
- Added the ability to modify the text pointer using the start button.
- Added a text macro system, allowing one to define strings of text/commands to be called at any time in a message.
- Added an extra step to message initialization that initializes all the VWF variables on message load, not just on title screen load.
- Added command byte $EB that forces a textbox to freeze until something modifies the text pointer.
- Added command bytes $E8 and $E7 for the text macro system and that act like a JSR and RTS to the textbox system, respectively.
- Added several useful routines that can be called from within messages, such as a text buffering routine.
- Made it so that the textbox will be forced to close when the screen fades out. The fadeout will also be delayed until the textbox closes.
- Added some functionality that enables the textbox to close if another message is being set to display
- Changed the hijack location for initializing the VWF RAM on the title screen from $0086E2 to $0096B4, because the former location was very questionable.
- Fixed the incompatibility with Vitor Vilela's SA-1 Pack Patch V1.30.
- Changed the %nextbank macro to allow specifying the freespace command to use.
- Adjusted the $EF command to work with secondary entrances $0200-$1FFF, levels using Lunar Magic 3.00 custom level dimensions, and layer 2 horizontal levels.
- Added a RAM flag that indicates that the text box has just been cleared.
- Made the default message display an error message.
- Cut RAM usage in half by optimizing how the text tiles are buffered.
- Several small code optimizations.
A lot of the above changes are things I coded into MYSQ, and enable some really powerful functions. For example, MessageASM allows you to run custom code on a per message basis. This allows you to run your own custom scripts for messages that can run every frame regardless of what the text box is doing. You can also use what I call "text macros", where you define a string of text/commands, and can call it using just 3 bytes. So for example, instead of typing out "Princess Peach" each time you use that string, you can convert it into a text macro and then display that 14 byte string using a 3 byte command each time it's needed. This will allow you to save ROM space and improve consistency with your key terms. There is also the text pointer modification feature where you can press start to change the text pointer. It's meant for allowing the player to quickly close a text box, but can be set to do other things if necessary.
Anyway, here are a couple examples of what can be done with some of the new features:
Custom menus that can be scrolled through without waiting for the text to finish displaying.
Name Entry Screen, using MessageASM to handle the cursor controls and command $EB to disable the normal end of text box behavior.
Face portraits and auto-display current speaker's name at the start of the current text box. Both functions are synced to update when the text box is cleared.
This is from DPBOX's hack that he is showing off this C3
Also, big thanks to DPBOX for helping me test out this patch! Part of the reason I updated this patch was because a hack he's been working on needed some of these new features, so it was kind of a back and forth trade of helping each other out.
-----------------------------------------------
As for the Mario Maker 2 levels, seeing as how the game just came out, I figured I'd share my level codes. (Although I was going to do this even before I realized the C3 theme would be Mario Maker 2 ).
-----------------------------------------------
And that about covers it for my C3 thread. I hope you guys liked it!
My Hacks:
Mario's Strange Quest V1.6
Yoshi's Strange Quest V1.3 / V1.3.1 Beta 4.6
Mario & Yoshi's Strange Quests (2/10/2023 Build)
Other stuff:
My SMW/SMAS/SMAS+W disassembly
Yoshifanatic's Discord Server: A place for fans of my stuff and/or Yoshi to chat with others.