Sprite shadow creating routines


void CreateSpriteIShadow8_R(register short height asm("%d0"),register unsigned char* src0 asm("%a0"),register unsigned char* src1 asm("%a1"),unsigned char* mask, unsigned char* dest0, unsigned char* dest1) __attribute__((__stkparm__));

void CreateSpriteIShadow16_R(register short height asm("%d0"),register unsigned short* src0 asm("%a0"),register unsigned short* src1 asm("%a1"),unsigned short* mask, unsigned short* dest0, unsigned short* dest1) __attribute__((__stkparm__));

void CreateSpriteIShadow32_R(register short height asm("%d0"),register unsigned long* src0 asm("%a0"),register unsigned long* src1 asm("%a1"),unsigned long* mask, unsigned long* dest0, unsigned long* dest1) __attribute__((__stkparm__));

void CreateSpriteIShadowX8_R(register short height asm("%d0"),register short bytewidth asm("%d1"),register unsigned char* src0 asm("%a0"),register unsigned char* src1 asm("%a1"),unsigned char* mask, unsigned char* dest0, unsigned char* dest1) __attribute__((__stkparm__));

void CreateSpriteShadow8_R(register short height asm("%d0"),register unsigned char* src0 asm("%a0"),register unsigned char* src1 asm("%a1"),unsigned char* mask, unsigned char* dest0, unsigned char* dest1) __attribute__((__stkparm__));

void CreateSpriteShadow16_R(register short height asm("%d0"),register unsigned short* src0 asm("%a0"),register unsigned short* src1 asm("%a1"),unsigned short* mask, unsigned short* dest0, unsigned short* dest1) __attribute__((__stkparm__));

void CreateSpriteShadow32_R(register short height asm("%d0"),register unsigned long* src0 asm("%a0"),register unsigned long* src1 asm("%a1"),unsigned long* mask, unsigned long* dest0, unsigned long* dest1) __attribute__((__stkparm__));

void CreateSpriteShadowX8_R(register short height asm("%d0"),register short bytewidth asm("%d1"),register unsigned char* src0 asm("%a0"),register unsigned char* src1 asm("%a1"),unsigned char* mask, unsigned char* dest0, unsigned char* dest1) __attribute__((__stkparm__));

void CreateISpriteIShadow8_R(register short height asm("%d0"),register unsigned char* src asm("%a0"),register unsigned char* dest asm("%a1"));

void CreateISpriteIShadow16_R(register short height asm("%d0"),register unsigned short* src asm("%a0"),register unsigned short* dest asm("%a1"));

void CreateISpriteIShadow32_R(register short height asm("%d0"),register unsigned long* src asm("%a0"),register unsigned long* dest asm("%a1"));

void CreateISpriteShadow8_R(register short height asm("%d0"),register unsigned char* src asm("%a0"),register unsigned char* dest asm("%a1"));

void CreateISpriteShadow16_R(register short height asm("%d0"),register unsigned short* src asm("%a0"),register unsigned short* dest asm("%a1"));

void CreateISpriteShadow32_R(register short height asm("%d0"),register unsigned long* src asm("%a0"),register unsigned long* dest asm("%a1"));


CreateSpriteShadowX_R: use sprite pointed to by src0 and src1 and mask pointed to by mask to create a shadowed sprite (colors are "increased": white -> lightgray, lightgray -> darkgray, darkgray -> black, black -> black), stored in dest0 and dest1.
CreateISpriteShadowX_R: use sprite pointed to by masked interlaced sprite src to create a shadowed sprite (colors are "increased": white -> lightgray, lightgray -> darkgray, darkgray -> black, black -> black), stored in masked interlaced sprite dest.
CreateSpriteIShadowX_R: use sprite pointed to by src0 and src1 and mask pointed to by mask to create a shadowed sprite (colors are "decreased": white -> white, lightgray -> white, darkgray -> lightgray, black -> darkgray), stored in dest0 and dest1.
CreateISpriteIShadowX_R: use sprite pointed to by masked interlaced sprite src to create a shadowed sprite (colors are "decreased": white -> white, lightgray -> white, darkgray -> lightgray, black -> darkgray), stored in masked interlaced sprite dest.
The interlaced sprite format is as follows:
These routines provide a convenient way to use shadowed sprites with best run-time performance and lowest size: use Create(I)Sprite(I)ShadowX_R to create shadowed sprites once at startup time (instead of embedding shadowed sprites in your program) and then use OR or MASK routines to display these shadowed sprites.
Starting from 2.00 Beta 4, Create(I)Sprite(I)ShadowX_R remain the only routines dealing with SHADOW and ISHADOW mode: Gray(Clip)SpriteX_(I)SHADOW(2)_R were slow, made maintaining ExtGraph even more complicated and mostly useless thanks to Create(I)Sprite(I)ShadowX_R routines.