- Joined: 26 Jan 2013
- Posts: 5
|
Storing and displaying sprites
Posted: Sat Jan 26, 2013 11:49 pm
|
I recently started to learn assembly and have gotten stuck on what kind of format can be used to store the layout of the tiles comprising the sprite and how to display them.
My current idea for storage is to have a table (one for each sprite, listing frames for that sprite) that points to another table which contains the layout information. I feel that this is very chunky and probably not the way to go about this.
Here is what I was trying:
sprite0_S:
.dw sprite0_frame0_InfoTable
sprite0_E:
sprite0_frame0_InfoTable:
.db sprite0_frame0_Tiles_E - sprite0_frame0_Tiles_S ;Sprite tile count
.dw sprite0_frame0_YOffsets ;Pointer to tile Y-offset list
.dw sprite0_frame0_XOffsets ;Pointer to tile X-offset list
.dw sprite0_frame0_Tiles_S ;Pointer to sprite pattern index list
sprite0_frame0_Tiles_S:
.db $00, $01, $02, $03, $04, $05 ;Pattern index list
sprite0_frame0_Tiles_E:
;Offset lists
;Each byte defines the pixel offset of each tile from the top-left corner of the sprite
;A 2x3 tile rectangle, for example...
sprite0_frame0_XOffsets:
;Columns
; 0 1
.db 0, 8 ;Row 0
.db 0, 8 ; 1
.db 0, 8 ; 2
sprite0_frame0_YOffsets:
;Columns
; 0 1
.db 0, 0 ;Row 0
.db 8, 8 ; 1
.db 16, 16 ; 2
When it comes to displaying a sprite using this, I am at a complete loss. I tried to write something to use it, but never got anywhere because I ran out of registers after the first few lines of code. :)
Any advice or new approaches would be much welcomed.
|
- Site Admin
- Joined: 19 Oct 1999
- Posts: 14983
- Location: London
|
Posted: Sun Jan 27, 2013 1:15 am
|
It seems reasonable. I'd pack x, y, index together and use a sentinel to terminate, rather than separate tables - or something closer to the VRAM layout for fast copying. An alternative is to have a fixed layout and animate the underlying tiles.
|
- Joined: 26 Jan 2013
- Posts: 5
|
Posted: Sun Jan 27, 2013 2:59 am
|
Maxim wrote I'd pack x, y, index together and use a sentinel to terminate, rather than separate tables - or something closer to the VRAM layout for fast copying.
I just tried that out. It's much simpler and now it works.
Thanks!
|