Day 17 - The Sprite Attribute Byte



The What?


	The Sprite Attribute Byte (SAB) is the third (of 4bytes) byte that you write
to OAM (SPR-RAM). This byte controls several (4) things including:

    Bits 0-1: 2 Bits of the sprites colors. Will be discussed at a later time.
    Bits 2-4: UNUSED.
    Bit #5: 0 = Sprite in front or 1 = Sprite in back of BG.
    Bit #6: 1 = Flip horizontally.
    Bit #7: 1 = Flip vertically.

See's see how to do this!

Gettin' Goin'

When I demonstrate each bit (with code peices) I'll give 2 pieces, of code, one for the $2003/$2004 method and one for the Sprite#-BYTE (DMA) method. To flip a sprite horizontally, you just need to set bit #6 of the special byte of OAM data (the third byte written). Assuming you have your special byte in A (you have to, to be able to do bit operations & math): eor #%01000000 ; will toggle bit #6 in A. sta $2004 ; this assumes that you already entered 2 bytes to $2004 Now the DMA method: lda Sprite1_S eor #%01000000 sta Sprite1_S ; need to store it back so next time the correct thing happens. sta $2004 As you see, it's not much different. To flip a sprite vertically, you need to toggle bit #7 of the special byte.

Gettin' Goin'

Putting sprites behind backgrounds is always cool if you do it right, like the Warp Whisle (Whistle?) in Super Mario Bros. 3 ((c)1988? Nintendo, wow I was 1 year old in 1988...) you have to get BEHIND the background and make to the end of the stage to get the whisle, remember that? Well, Bit #5 of the special byte is probably how that was done. Just make Bit #5 a 1 to have your sprite be drawn under/behind the background. Example of toggling bit #5: eor #%00100000 That will toggle bit #5, so you can use that instead of the eor in the previous code.

One Last Thing

Remember that you can always toggle more than one bit at a time.

This Day In Review

Hopefully I'll get around to talking about color attributes tomorrow. (Bits 0-1 of special byte and the BG Attribute Tables). Hope you liked this!, -Mike H a.k.a GbaGuy P.S. Could someone email me to tell me if this works or not, please?
Intro - Day 18