void RotateSprite8x8(unsigned char *sprite, void *dest, long degclockwise) { short posx=-4; short posy=-4; char *destspr=dest; short xrotated=0,yrotated=0; for(;posy<=4;posy++) { if(posy) { for(posx=-4;posx<=4;posx++) { if(posx) { if(sprite[posy] & (posx>0 ? (16>>posx) : (8<<-posx))) { xrotated=posx*cos(degclockwise) - posy * sin(degclockwise); yrotated=posx*sin(degclockwise) + posy * cos(degclockwise); *(destspr+(yrotated<0 ? yrotated+4 : yrotated+3)) |= xrotated?(xrotated>0?(16>>xrotated):(8<<-xrotated)):0; } } } } } }