not really an "update"; more of a complete rewrite. though tbh the code is just as crappy. young ladida is rolling in his grave
obviously, this is now compatible with sa-1, and sram/bwram+. that was kinda the whole point of this update. actually... i think sram/bwram+ is now required. not sure. timer definitely breaks if you dont use it
theres also support for lunar magic's 2 extra secret exits (i think... i havent actually tested it). kind of a last-minute inclusion, because i actually had no clue LM did that because i dont follow the smw hacking scene anymore
if you currently have the old status screen in your rom and want to update, you have to port to a new rom, because this patch is completely incompatible with the old one. theoretically, this one will take precedence over the old one (due to how this version works), but you dont want old dumb code in your rom
AMK is required, and since AMK fucking sucks, i included a patch.asm to replace the one in AMK's /asm/SNES/ folder. without it, custom music wont work on the menu. blame AMK, not me (long story short: AMK offers no way to remotely run its SPC upload; it does JML JML instead of JSL RTL)
note note NOTE that this thing is beta. id like if yall could help me debug, make suggestions, check accuracy to sma2, maybe look through the code and point out stupid stuff (NO BULLY), whatever. after that i'll submit it to the patches section for round 2 of beta testing
thanks btw to LadiesMan for the new song port! included with the patch.
by default, it will behave and look as close to sma2's status screen as possible. the old patch took a lot of liberties, but this one less so
differences from SMA2:
menu itself is bigger. because snes has a bigger screen
menu takes longer to load and unload. because snes<->spc communication is done with a stupid handshaking routine via 4 (four) 8-bit i/o ports
support for more than 1 secret exit, only because LM does it
no support for showing which player beat which level. if the level was beat, itll show a C (the old patch did this too). it wont show whether mario or luigi did it. thatd require extra hijacks at level end and a whole extra ram/sram table, which is out-of-scope for this patch. someone else with more interest can implement it
when youre standing on a pipe (or any level thats not in the world tables), itll display the first world (in smw, thatd be yoshi's island) instead of the "current" world. the old patch did this as well. pipes are technically level 0, and i assign level 0 to YI within the patch. in sma2, they showed up within their proper world (but didnt match any level within the world). fixing this would require way too much work. i could just pull the last level from $13BF, but thatll contain dumb values if you didnt come from a level (ex: title screen, intro level). so yeah
sma2 showed how many exits mario/luigi each got. i didnt implement that; instead showing lives and coins and score for the current player (again: ... the old patch did this too)
the name list itself is not VWF. SMA2 used sprites for the level names so it was able to do VWF; main reason being the GBA screen is shorter width-wise so they had to condense spaces. snes has a plenty wide screen to fit both the level name and the 4 exit icons + yoshi coin icon (though they are kinda squished admittedly)
minor alignment stuff, due to aforementioned VWF
i added a blank space above the top name bar, to account for potential CRT masking
the yoshi coin that appears when you collect all yoshi coins doesnt sparkle. I'm debating whether to implement it. the sparkle graphics are included, but the main issue is that its pseudorandom, and thus near impossible to accurately replicate
in sma2, theres an internal level timer that counts up (in levels with a time limit), and when you complete the level (or die) its then added to the global timer. however, sma2 caps the in-level timer at 59m:xxs:xxf, meaning spending more than 59min in a level wont do anything special. this patch does not implement this cap, because the timer code increments the global timer directly in-level; there is no separate level timer. fixing this is trivial, but like... yeah, nah
when you defeat bowser in sma2, the timer stops, peach stops crying, and all _exits_ are revealed (but not levels/names), so effectively all worlds get revealed. since by default, bowser's level is technically unbeatable and triggers no save, i left this behavior out. you instead have the option to trigger the timer stop/happy peach by setting the high bit of !timer+8. the all-exits-revealing is very tricky to do with the code i have, so unfortunately (for now) i cant do it
extra stuff disabled by default (these are all defines in the patch):
warping enabled from the beginning, instead of having to clear all exits
autosave when exiting the menu (either by normal exit or warping). itll just run smw's save routine (and by extension, sram/bwram+)
custom banner palettes per world. since the banners (left side) are just full gfx, you can have a custom image per world instead of the boring "W 1"!
dash "-" for empty icons instead of... well... empty icons. the japanese version of SMA2 does this, and it cost me nothing to implement
note that this version displays (by default) 3 less levels than the old patch, due to the CRT padding and HDMA spacing between the level names (old: 20, new: 17). this is still more than SMA2's max (12)
graphics, tilemaps, palettes, etc are all external and thus editable (with limitations)
note that you are able to edit the tilemaps (given that theyre just binary files), but atm there is no good snes tilemap editor. the best one that im aware of (racing stripe) only supports zsnes ZST savestates. i myself made the default tilemaps in a hex editor. dont ask me how to make a custom tilemap. again: i made the tilemaps in a hex editor. yes, its bullshit. but theres nothing i can do about it.
the snes tilemap format is simple anyways. for each tile, there are 2 bytes:
tile being a value from 0-FF, and property being the same. property is further subdivided in binary as such:
Y = yflip
X = xflip
P = priority
CCC = palette
TT = page (technically: high 2 bits of tile #)
tiles are 8x8 by default (8 pixels x 8 pixels). one line of tiles (from left side of screen to right) is 32 tiles. after that, you are on the next row of 8x8 tiles. snes screen is 28 rows. a full tilemap screen is 32 rows. 32x32=1024. after 1024 tiles, you move on to the next tilemap screen, if there is one (maps can be 32x32 tiles, 32x64 tiles, 64x32 tiles, or 64x64 tiles. this patch has layer 2 at 32x32 and layers 1 and 3 at 64x32)
BOI! Looks like we finally got a new update for the SMA2 Status Screen for for EIGHT straight years. With the support for SA-1 and SRAM/BWRAM+, I bet if people would like to use it in bajillion hacks...
About time XD. If I knew it woulda taken you 4+ weeks to get a beta build, I would requested this right after v1 of the hack when I started v2 XD (tho not sure you woulda taken it then). This looks promising, I hope to see a stable version soon!
Awesome! I don't really have much of a cohesive project right now to use this in, but I've used the old patch in the past and I loved it. I'll heavily consider integrating it whenever I have an opportunity for it again (I was wary about the older patch because well, it was old). Thanks for make
updated the zip. just a bunch of misc bugfixes, optimizations, code cleanup, etc. i dont know what exactly changed... tho i do know that the timer was fixed (tens and ones place in the minutes were swapped) and the blinking name now uses the vram buffer used by the counters. i hadnt set up the vram buffer initially, so the blinking name was using a hacky hdma scanline swap. the buffer is waaay clunkier but will work nicely if you decide to use a full 8px font
im considering including some alternate menu designs like i did with the smb3 status bar patch. stay tuned!
new update (same link). 2 major changes (plus many minor ones):
1. sram-plus/bwram-plus is now required
2. official unofficial bigow support!
"bigow" is Ragey's More overworld levels and events patch which works alongside a Lunar Magic feature to expand the number of levels and events you can use on the overworld. since you can have up to 16 custom worlds in the status menu patch, assuming 16 levels each (right under the max per world), thats 256 levels! which bigow will cover.
getting bigow to work with sram-plus/bwram-plus is a bit tricky though. add an RTS at $00A195, then expand the length of $1EA2 to $013E in the tables file. then, under the defaults, put this instead of the zeros:
!a = 0
while !a < 256
!a #= !a+1
additionally, bigow must be patched after sram/bwram+. if you ever change the sram tables, bigow needs to be repatched after
obviously, bigow (and the corresponding LM feature) is optional. so if youre not interested, then just ignore all of the above
if youre using bigow, the yoshi coin table is at $010D so back up the 32 bytes there. if youre not using bigow, then its at $1F2F (12 bytes)
and also back up the 9 timer bytes (which i put at 7F9FB0 though you can move it to wherever)
in udder news, the counters.asm file now has an init and a main section. you can now change the scroll rate easily (powers of 2 only). you can disable the use of the "nocompleted" and "speciallevel" tables and handle the stuff in lunar magic's ow editor (with limitations)
note that i dont do much testing because i lack time. thus i dont guarantee any of the above works properly atm. so please test away!
new update. i dont think anything really changed other than me adding a readme plus minor fixes and stuff. this is also the release candidate; if theres no other glaring issues or etc, then I'll go ahead and submit this to the patches section
edit: OH, one of the changes i made is that the !worldpalettes define (and thus the worldpalettes.bin file) can now affect the color of the list as well. and !hdmaspace works properly now, but i'm still locking it behind the disclaimer because it does require gfx/tilemap modifications if its not the default setting