Language…
10 users online: GiraffeKiller, Idontcare, Isikoro,  JupiHornet, JX444444, Kusrry, Moronsky, orka-bln, underway, WONIU - Guests: 63 - Bots: 229
Users: 66,329 (2,270 active)
Latest user: kauma

SMB3 Status Bar v1.51 [released]

Patch

f

would require me to either upload 8 palettes at level end every frame, or disable sprites from being affected

will try the latter (though i thought they already weren't affected? hmm)



anyways, EXPECT A C3 RELEASE WOOOOOO
i totally forgot about this thread

RELEASE HERE


can keep bugtesting if needed
forgot to mention a while ago that i updated the patch (and hence the download links here dont work...)

new download. all i did was change the irq routine to start an hdma midscreen (on the dma channel, so there's no conflicts with other hdma) rather than run multiple irqs. as a result, the item box item might look cutoff in zsnes (haven't checked)
just a heads up: there may or may not be a new version coming

the current version requires 2 oam slots, one for the item box item and another for the masking sprite behind it that hides every other sprite (with the help of the window that covers nearly the entire status bar)

the new version requires "0" oam slots. yes, "zero"

it writes to oam manually during the status bar's irq, uploading the item box item and setting every other sprite's high x so they go offscreen (and masking the left 8px of the status bar in case sprites show up there)

this method thus frees up the 2 oam slots that were being used, and technically allows for other sprites to safely show up in the status bar region without wasting any slots (if you want to put a mario head in there for example, or maybe a minimap)


the only? downside (aka the reason i havent released) is that any lag will cause sprites to flicker (evident on level end, but also when many sprites are onscreen). im still trying to determine & solve this issue. i assume it's because NMI will skip the OAM update if lag occurs. if this issue goes unresolved, then there's no point in a new release

if people are willing to help/debug, i'll post the WIP
i guess people arent interested...

fixed the issue anyways. here's a WIP:

http://pastebin.com/1ZAYG2j5


any feature requests, bugs, questions, etc, report now pls #thp{^_^}
Did you include the palette-freeing code (so that you don't need to have the status bar palette as part of the normal level palette)? I don't know if this was already a feature of the patch; I've never used it.

----------------

I'm working on a hack! Check it out here. Progress: 64/95 levels.
was already a feature of the patch (alongside complete isolation from the standard layer 3 tilemap)
How about allow adding custom counters; like the super status har patch, where the bytes are formatted like this: NNNNNNNN YXPPCCTT.
Give thanks to RPG hacker for working on Asar.
custom counters are supported "if you know what youre doing"

i may make it easier though


one thing i was considering is uploading the status bar tilemap to the beginning of SP1 rather than the middle of LG1. this will free up layer 3 GFX space (the status bar already uses a lot), and there's no need to manually restore the graphics at $6000 since SMW already writes mario's shenanigans there every frame.

it may require actual free ram though (current version doesnt need free ram, it reuses the status bar tilemap ram), as well as a few more lines of f-blank
good news: no freeram will be required, unless $0AF6 is dangerous to use in normal levels. $0EF9 now holds the status bar palette, and empty ram

bad news: glitched mario gfx on lag (see pic below, except only during lag). JUST

"bad" news: zsnes incompatibility returns:




will keep testing and improving, looking for opinions on zsnes support (if any)
Quote
zsnes incompatibility returns

sweet
(no joke LOL)


I guess it could be nice to have an option to decide where to upload the space if people really want ZSNES compatibility/get annoyed by glitched graphics.
i think it's best we kill zsnes once and for all


anyways here's a WIP featuring the tilemap location change (i fixed the lag issue, and shortened the f-blank by 1 scanline):

http://pastebin.com/NizTDRYG
http://pastebin.com/ixCjWvcR

again, any feature requests, bugs, questions, etc appreciated


edit: apparently i forgot i was using a fastrom, so the status bar is cutoff by 1 scanline on a nonfastrom. will do some more optimizations and stuff (and maybe add official sa1 support since that'll help a bunch)

edit2: updated link with optimized version (RIP readable IRQ)
the default patch gives you 4 layer 3 palettes and 1 sprite (isolated from standard CGRAM/OAM). the 4 palettes are used up by the status bar and the sprite is the item box item.

in optimizing IRQ, ive created enough time for one of the following:

1. have 4 extra palettes, no extra sprites
2. have 3 extra palettes, 1 extra sprite
3. have 2 extra palettes, 2 extra sprites
4. have 1 extra palette, 3 extra sprites
5. have no extra palettes, 4 extra sprites

as "extras", they are unused by the default smb3 status bar, meaning you can use them for your own custom counters and effects


which means this is probably the last major upgrade, as i'll be focusing on making the patch more user-friendly and customizable. stay tuned
so for custom counters, i basically just have a counters.asm where you throw in your code. is that fine? the status bar routine will JSL to this file when it ends, so you can overwrite tiles that have already been written for whatever reason. it's basically literally the "status bar drawn" hijack from the latest uberasm (so you cant actually use uberasm's)

you can also write to the palette and OAM. here's all the stuff you can write to (this is all the stuff that gets uploaded during IRQ):

Code
;GENERAL INFORMATION
;
;TILES
;  $0AF6-$0B15 = 1st row
;  $0B16-$0B35 = 2nd row
;  $0B36-$0B55 = 3rd row
;  $0B56-$0B75 = 4th row
;PROPERTIES (YXPCCCTT)
;  $0B76-$0B95 = 1st row
;  $0B96-$0BB5 = 2nd row
;  $0BB6-$0BD5 = 3rd row
;  $0BD6-$0BF5 = 4th row
;PALETTES (4 COLORS EACH)
;  $1BA3-$1BAA = palette 0
;  $1BAB-$1BB2 = palette 1
;  $1BB3-$1BBA = palette 2
;  $1BBB-$1BC2 = palette 3
;  $1BC3-$1BCA = palette 4 (if !Extra_Setting <= 3)
;  $1BCB-$1BD2 = palette 5 (if !Extra_Setting <= 2)
;  $1BD3-$1BDA = palette 6 (if !Extra_Setting <= 1)
;  $1BDB-$1BE2 = palette 7 (if !Extra_Setting = 0)
;OAM
;  $0EFC-$0EFF = item box item
;  $0F00-$0F03 = extra sprite 1 (if !Extra_Setting >= 1)
;  $0F04-$0F07 = extra sprite 2 (if !Extra_Setting >= 2)
;  $0F08-$0F0B = extra sprite 3 (if !Extra_Setting >= 3)
;  $0F0C-$0F0F = extra sprite 4 (if !Extra_Setting = 4)
;OAM HIGH TABLE (NOTE: STATUS BAR SPRITES ARE THE LAST SPRITES IN OAM)
;  $0F00-$0F1F if !Extra_Setting = 0
;  $0F04-$0F23 if !Extra_Setting = 1
;  $0F08-$0F27 if !Extra_Setting = 2
;  $0F0C-$0F2B if !Extra_Setting = 3
;  $0F10-$0F2F if !Extra_Setting = 4
;
;LIMITATIONS
;  the top 3 pixels of the tilemap are blocked by f-blank
;  the left 8 pixels are masked for sprites; they cant show up there


more info on the !Extra_Setting define:

Code
;for below:
;0 = 4 extra palettes on palette 1, no extra sprites
;1 = 3 extra palettes on palette 1, 1 extra sprite
;2 = 2 extra palettes on palette 1, 2 extra sprites
;3 = 1 extra palette on palette 1, 3 extra sprites
;4 = no extra palettes on palette 1, 4 extra sprites
;default is setting 2

!Extra_Setting = 2
finally added sa-1 support, and submitted the update to the site. download before it gets rejected

reminder that zsnes is no longer supported
in case you didnt notice, the patch was accepted \o/ keep posting bugs or whatever here


im currently backporting stuff to the minimalist status bars, since theyre a bit outdated by now. however, one thing i'm itching to attempt is to upload the tilemap to the nonvisisble part of the layer 1/2 tilemap, rather than to $6000. Less troublesome, but also more difficult since the upload destination would have to change when the layer y-position changes. i may or may not consider using the technique in the smb3 status bar, depends on how successful i am
'Scuse me girl, but whenever I patch this to an unclean ROM, the top left corner of the status bar has zeroes for some reason. And why change the MARIO, nos., and COURSE CLEAR text?
My Mode 0 guide.

My Discord server. It has a lot of archived ASM stuff, so check that out!

Originally posted by DaSpongeBobMan
'Scuse me girl, but whenever I patch this to an unclean ROM, the top left corner of the status bar has zeroes for some reason.

how unclean? (aka what else do you have patched. also pic would be nice)
did you follow the instructions in the readme?

Quote
And why change the MARIO, nos., and COURSE CLEAR text?

the status bar GFX overwrite the first couple layer 3 GFX (numbers and text), so i have to use the ones from the second page
Originally posted by Ladida
im currently backporting stuff to the minimalist status bars, since theyre a bit outdated by now. however, one thing i'm itching to attempt is to upload the tilemap to the nonvisisble part of the layer 1/2 tilemap, rather than to $6000. Less troublesome, but also more difficult since the upload destination would have to change when the layer y-position changes. i may or may not consider using the technique in the smb3 status bar, depends on how successful i am

just an update on this: initial testing of the technique has been proven to be successful. by using both layers 1 and 2, you can technically have a 4-line status bar tilemap (aka smb3 status bar) exist by essentially taking up 0 space in VRAM (so far ive only tested 2-line for the minimalist status bars, but there's no reason 4-line wont work)

the problem with writing to mario's GFX is that it'll only work if the status bar is a bottom one (smb3), since mario will not show up later during screen rendering, and NMI which occurs soon afterwards reuploads mario's GFX. a top status bar would require reuploading mario's GFX during the fblank between the status bar and main screen rendering... yeah. also, if lag occurs, some weird shenanigans happen with mario

by uploading the tilemap to the nonvisible parts of the layer tilemaps, there's no need to worry about reuploading the parts that have been overwritten, because they're offscreen so their appearance doesnt matter (and layer updates will fix them later, and by then we're writing to a different offscreen section)

one "drawback": smkd's vram patch is required. also, zsnes compatibility returns


as i mentioned, i'll consider implementing this technique into the smb3 status bar. but it will definitely be in the minimalist status bars, meaning they will finally actually be isolated from the layer 3 tilemap
Originally posted by Ladida
Originally posted by Ladida
im currently backporting stuff to the minimalist status bars, since theyre a bit outdated by now. however, one thing i'm itching to attempt is to upload the tilemap to the nonvisisble part of the layer 1/2 tilemap, rather than to $6000. Less troublesome, but also more difficult since the upload destination would have to change when the layer y-position changes. i may or may not consider using the technique in the smb3 status bar, depends on how successful i am

just an update on this: initial testing of the technique has been proven to be successful. by using both layers 1 and 2, you can technically have a 4-line status bar tilemap (aka smb3 status bar) exist by essentially taking up 0 space in VRAM (so far ive only tested 2-line for the minimalist status bars, but there's no reason 4-line wont work)

the problem with writing to mario's GFX is that it'll only work if the status bar is a bottom one (smb3), since mario will not show up later during screen rendering, and NMI which occurs soon afterwards reuploads mario's GFX. a top status bar would require reuploading mario's GFX during the fblank between the status bar and main screen rendering... yeah. also, if lag occurs, some weird shenanigans happen with mario

by uploading the tilemap to the nonvisible parts of the layer tilemaps, there's no need to worry about reuploading the parts that have been overwritten, because they're offscreen so their appearance doesnt matter (and layer updates will fix them later, and by then we're writing to a different offscreen section)

one "drawback": smkd's vram patch is required. also, zsnes compatibility returns


as i mentioned, i'll consider implementing this technique into the smb3 status bar. but it will definitely be in the minimalist status bars, meaning they will finally actually be isolated from the layer 3 tilemap

One question: Why does it have to overwrite vanilla layer 3, even though it's dynamic? And maybe the SMB3 status bar glitches out because I used ZSNES for testing first

e: Why make it incompatible with ZSNES?
My Mode 0 guide.

My Discord server. It has a lot of archived ASM stuff, so check that out!

Patch