Sprites: Difference between revisions

From NeoGeo Development Wiki
Jump to navigation Jump to search
m (10 revisions: Import from wikkii)
 
m (Small correction about the sprite size)
Line 21: Line 21:
== Graphics format ==
== Graphics format ==


Sprite tiles are 16x16 pixels, in a 4BPP planar format, handled as 8x8 tiles by the [[GPU]]. See [[sprite graphics format]].
Sprite tiles are 16x16 pixels in a 4BPP planar format, handled as 8x8 tiles by the [[GPU]]. See [[sprite graphics format]].


A sprite tile is 128 bytes.
A sprite tile is 128 bytes.
Line 33: Line 33:


== SCB1 ($0000~$6FFF): Tilemaps ==
== SCB1 ($0000~$6FFF): Tilemaps ==
SCB1 is used to store the tilemaps and tile attributes of each sprite (space for 448 sprites)
SCB1 is used to store the tilemaps and tile attributes of each sprite (only 380 can be used, even if there's space for 448)


(Note that the $7000~$7FFF is used by the [[Fix layer]]).
(Note that the $7000~$7FFF is used by the [[Fix layer]]).
Line 60: Line 60:
The actual position is 496-Y, from the top border of the screen.
The actual position is 496-Y, from the top border of the screen.


{{16BitRegister|Y position|9|[[Sticky bit]]|1|?|1|Sprite size|5}}
Sprite size of 33 does what exactly ?
 
{{16BitRegister|Y position|9|[[Sticky bit]]|1||Sprite size|6}}


== SCB4 ($8400~$85FF): horizontal positions ==
== SCB4 ($8400~$85FF): horizontal positions ==
Line 67: Line 69:
The actual position is from the left border of the screen.
The actual position is from the left border of the screen.


{{16BitRegister|X position|9|.|7}}
{{16BitRegister|X position|9| |7}}


[[Category:Video system]]
[[Category:Video system]]

Revision as of 12:02, 27 June 2011

"Sprites" as defined by SNK

File:Mutnatsprite.png
Structure of a grouped sprite.

Sprites on the NeoGeo aren't like those on other systems.

They're made of tiles (sometimes called characters) coming from the C ROMs, or from the .SPR files on the NeoGeo CD. Those tiles are always 16x16 pixels in size and can contain 15 colors (one color index is used for transparency).

Sprites are vertical strips of tiles, with a fixed width of 1 tile (16 pixels), and an adjustable height (up to 32 tiles, 512 pixels). Each sprite has its own tilemap, defining which tile number goes in which place. Sprites can be stuck together horizontally to make huge moveable objects.

Limitations

  • No more than 96 sprites can be rendered by scanline. Any others will be ignored.
  • Even if the VRAM has space for 448 sprites, only 381 can be displayed per frame (without sprite multiplexing tricks).
  • Contrary to common belief, sprites can't be zoomed. They can only be shrinken. Graphics for sprites then have to made to the biggest size needed.

A lot of games contain pre-stretched graphics for sprites which are seen scaled down most of the time (logos in title screens for example).

  • $100000 tiles can be addressed (20 bits, 128MiB of graphics), if more tiles are needed then the sprites graphics need to be bankswitched.

Graphics format

Sprite tiles are 16x16 pixels in a 4BPP planar format, handled as 8x8 tiles by the GPU. See sprite graphics format.

A sprite tile is 128 bytes.

Sprite control banks

test

There are 4 Sprite Control Banks located in VRAM: SCB1 to SCB4. They respectively start at adresses $0000, $8000, $8200 and $8400. They aren't mirrored in any way.

SCB1 ($0000~$6FFF): Tilemaps

SCB1 is used to store the tilemaps and tile attributes of each sprite (only 380 can be used, even if there's space for 448)

(Note that the $7000~$7FFF is used by the Fix layer).

Each sprite has a 64 words table, organized as a linear up to down tile/attributes pairs. This means even locations are the tile numbers, and odd ones are attributes.

Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Def Tile number LSBs
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Def Palette Tile number MSBs3bit Auto-anim2bit Auto-animVertical flipHorizontal flip

The 8-frame auto animation bit has priority over the 4-frame one.

SCB2 ($8000~$81FF): Shrinking coefficients

SCB2 is used to specify the shrinking values of each sprite. The lower byte is the vertical shrinking. $FF is full size. The lower nibble of the upper byte is the horizontal shrinking. $F is full size.

Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Def HorizontalVertical

Default value: $0FFF

SCB3 ($8200~$83FF): vertical positions

SCB3 is used to specify the sprites's Y position, its link mode (Sticky bit) and its size (height in tiles). The actual position is 496-Y, from the top border of the screen.

Sprite size of 33 does what exactly ?

Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Def Y position Sticky bit6

SCB4 ($8400~$85FF): horizontal positions

SCB4 is $used to specify the sprite's X position. The actual position is from the left border of the screen.

Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Def X position