I thieved a piece of code from the CPC forums to use in the draw routine. It checks for transparent pixels in the sprite frame and doesn't draw them. It works really well, and I actually know what's going on in the code (in theory), but there are still some blue pixels around the edge of the sprite that it seems to have missed and they are still showing. The picture below shows what's happening:
It seems to be skipping over a horizontal pixel byte, because it looks like it's every second byte that is being checked when it reaches the actual player pixels. I'm sure that one Mode 0 pixel is one byte, but it looks like it's taking it as two per byte.
This is the code I'm using. As always, many thanks in advance!
Code: Select all
DRAW2SCREEN:		
		ld a,(SPRITE_HEIGHT)			; Load sprite height value to 'a'
		ld b,a					; Height (LINES)
Spritenextline:
	push hl
		ld a,(SPRITE_WIDTH)			; Width (BYTES)
		ld c,a					; Bytes per line
	SpriteNextByte:
		ld a,(de)        			; Read sprite pixels	
		inc de            			; Update sprite pixel pointer	
		or a            			; Zero (i.e. fully transparent?)
		jr z,NO_MASK    			; If yes, then skip
		ld (hl),a        			; If no, then write byte to screen
	NO_MASK:
		inc hl           			; Increase destination (Screen) Address
		dec c 					; Repeat for next byte
		jr nz,SpriteNextByte
	pop hl
		call GetNextLine			; Scr Next Line (Alter HL to move down a line)
		djnz SpriteNextLine			; Repeat for next line
		
RET
 
														