gfx: . = transparent X = gfx 12345678 line A: ....XXX. line B: ...XXX.. line C: ..XXXXX. line D: .XXXXX.. compiled data: .startpoint = pixel 5 (skip starting copy routine in sprite data and on screen by 5 pixels) Line A: .copylength = 3 pixels .offset to next start point in source gfx = 4 + (sprite src data width - 1 sprite wide) Note: 4 comes from [1 pixel (remaining in line A) + 3 pixels (start of line B)] .offset to next start point on screen = 4 + (screenwidth - 1 sprite wide) Note: 4 pixels is same as above Line B: .copylength = 3 pixels .offset to next start point in source gfx = 4 + (sprite src data width - 1 sprite wide) Note: 4 comes from [2 pixels (remaining in line B) + 2 pixels (start of line C)] .offset to next start point on screen = 4 + (screenwidth - 1 sprite wide) Line C: .copylength = 5 pixels .offset in source = 2 + (sprite src width etc.etc.) .offset in screen = 2 + (screen width etc.) Line D: .copylength = 5 END you could speed it up even more by replacing the .copylength pixel bits into pointers that point to snippets of asm code that copy that specific number of pixels then just run the code each .copylength points too