Sprites: Difference between revisions
mNo edit summary |
mNo edit summary |
||
Line 13: | Line 13: | ||
== Limitations == | == Limitations == | ||
Even if the VRAM has space for 448 sprites, only 384 can be displayed per frame ( | *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 384 can be displayed per frame (without [[sprite multiplexing]] tricks). | |||
Contrary to common belief, sprites can't be zoomed. They can only be shrinken. | *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. | ||
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). | 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). | ||
*$80000 tiles can be addressed (19 bits, 64MiB of graphics), if more tiles are needed then the sprites graphics need to be bankswitched. | |||
== Graphics format == | == Graphics format == | ||
Sprite tiles are 16x16 pixels, in 4BPP, 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. | |||
= Sprite control banks = | = Sprite control banks = | ||
Line 29: | Line 30: | ||
[[File:Vrammap.png|right|frame|test]] | [[File:Vrammap.png|right|frame|test]] | ||
There are 4 Sprite Control Banks located in VRAM: SCB1 | 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. | They respectively start at adresses $0000, $8000, $8200 and $8400. They aren't mirrored in any way. | ||
== SCB1: Tilemaps == | == SCB1 ($0000~$6FFF): Tilemaps == | ||
SCB1 is | SCB1 is used to store the tilemaps and tile attributes of each sprite (space for 448 sprites) | ||
(Note that the $7000~$7FFF is used by the [[Fix layer]]). | |||
Each sprite has a 64 words table, organized as linear up to down tile/attributes pairs. This means even locations are the tile numbers, and odd ones are attributes. | 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. | ||
{{16BitRegister|Tile number LSBs|16}} | {{16BitRegister|Tile number LSBs|16}} | ||
{{16BitRegister|[[Palettes|Palette]]|8|?|1|Tile number MSBs|3|3bit [[Auto animation|Auto-anim]]|1|2bit [[Auto animation|Auto-anim]]|1|Vertical flip|1|Horizontal flip|1}} | {{16BitRegister|[[Palettes|Palette]]|8|?|1|Tile number MSBs|3|3bit [[Auto animation|Auto-anim]]|1|2bit [[Auto animation|Auto-anim]]|1|Vertical flip|1|Horizontal flip|1}} | ||
Line 45: | Line 46: | ||
Autoanim bit priorities ? | Autoanim bit priorities ? | ||
== SCB2: Shrinking coefficients == | == SCB2 ($8000~$81FF): Shrinking coefficients == | ||
SCB2 is | SCB2 is used to specify the shrinking coefficients of each sprite. | ||
The lower byte is the vertical shrinking. $FF is full size. | The lower byte is the vertical shrinking. $FF is full size. | ||
The lower nibble of the upper byte (bits 8 to 11) is the horizontal shrinking. $F is full size. | The lower nibble of the upper byte (bits 8 to 11) is the horizontal shrinking. $F is full size. | ||
Line 55: | Line 56: | ||
Default value: $0FFF | Default value: $0FFF | ||
== SCB3: | == SCB3 ($8200~$83FF): vertical positions == | ||
SCB3 is | 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. | The actual position is 496-Y, from the top border of the screen. | ||
{{16BitRegister|Y position|9|[[Sticky bit]]|1|?|1|Sprite size|5}} | {{16BitRegister|Y position|9|[[Sticky bit]]|1|?|1|Sprite size|5}} | ||
== SCB4: | == SCB4 ($8400~$85FF): horizontal positions == | ||
SCB4 is $ | SCB4 is $used to specify the sprite's X position. | ||
The actual position is from the left border of the screen. | The actual position is from the left border of the screen. | ||
Revision as of 13:15, 31 May 2011
"Sprites" as defined by SNK
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 in 4 bits per pixel (128 bytes per tile). Each tile can then use up to 15 colors, one index being used as transparency.
Sprites are vertical strips of tiles, with a fixed width of 1 tile (16 pixels), 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 bypass their width limitation and 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 384 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).
- $80000 tiles can be addressed (19 bits, 64MiB 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
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 (space for 448 sprites)
(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 MSBs | 3bit Auto-anim | 2bit Auto-anim | Vertical flip | Horizontal flip |
Autoanim bit priorities ?
SCB2 ($8000~$81FF): Shrinking coefficients
SCB2 is used to specify the shrinking coefficients of each sprite. The lower byte is the vertical shrinking. $FF is full size. The lower nibble of the upper byte (bits 8 to 11) 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 | Horizontal | Vertical |
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.
Bit | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Def | Y position | Sticky bit | ? | Sprite size |
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 | . |