Tip: Bad things to do in the title demo: Enter a door or a pipe, activate a P-switch or a star, complete the level, hit a message block, or die. These will either glitch the music, or force the player into an endlessly looping title level until they reset the game.
UberASM is a patch designed to be the successor of levelASM and OWASM. UberASM provides users with more hijacks and options, as well as making it easier for advanced ASMers to give users code that wouldn't work in ordinary levelASM. UberASM is designed to be fairly modular, and can be tweaked to suit the needs of the user.
Important hijacks supported by this patch are as follows:
*) Gamemode init/main - Adds code that runs prior to normal game mode execution. Init will run only once, every frame after main will run. This hijack also allows implementation of custom game modes.
*) Global hijack code - Will always run once at the start of EVERY frame.
*) Level init/main - Provides the original levelASM, but with the added ability to write to OAM mirror correctly.
*) NMI hijack - Provides a hijack in NMI to allow code that must run in V-Blank to run, some as graphics uploading.
*) OW init/main - Provides the functionality of OWASM with less confusion.
*) Sprite hijack - This is a special hijack which lets sprite upload a pointer to RAM to execute at the start of a frame.
*) Statusbar hijacks - Code that will run before and after SMW's status bar code, handy for custom statusbar tweaks.
See the README.txt for basic usage and upgrading from levelASM instructions.
This version fixes an incompatibility with a bunch of other patches.
This version corrects two bugs, see readme for details.
GHB's update: added sa-1 support.
2015/12/25 update: fix the gamemode error also fixed new game mode crashes.
2016/01/13: actually fixed some gamemode return address (again).
2016/06/15: actually fixed some gamemode return address (... ... once again). address in question is in hijacks/gamemode.asm line 16
RPG Hacker: added a "status bar drawn" hijack that is executed AFTER SMW's status bar instead of before.
You mean as in a late "level main"? That could work.
Alternatively, the original status bar hijack could be refactored to run at the end of the status bar routine instead. After all, the original idea behind that hijack was to allow the status bar to be tweaked, which is rather limited in functionality with the current version of uberASM (v1.1.1). The only reason I didn't do that is because I wasn't sure of all the implications that could have on version compatibility. As it currently stands, though, the current statusbar_code hijack is barely any different from a gamemode main or level main hijack, since it doesn't allow you to overwrite any status bar data those hijacks don't let you overwrite already, anyways, so in its current form, that hijack is mostly useless.
Changing sound effects and Mario's palette sounds useful enough to also warrant a late main hijack, though.
I think this feature is too specific.
so I suggest to add a late version of main label instead.
it hijack $00A5E8 because this address has been finished almost process.
it can change status bar, mute SFX, and change mario palette from $7E0D82.
This version adds a "status bar drawn" hijack that is executed AFTER SMW's status bar instead of before. This gives you even more flexibility over status bar tweaks, since you can overwrite status bar values previously written by SMW's own status bar code, which allows you to overwrite things such as the timer, Yoshi coins, the score counter etc. The only place this would have previously been possible was in the NMI hijack, which would of course have come at the cost of precious NMI time. I considered replacing the original status bar hijack with this, but decided against it, since I'm not sure what caveats that would have in regards to compatibility with previous versions of the patch.
With the regular "status bar" hijack, you get something like this:
With the "status bar drawn" hijack, you get something like this:
This can be useful if you want to hide parts of the status bar in certain levels or use a specialized status bar for just a single level.