All pastes #339138 Raw Edit

Tyler

public c v1 · immutable
·published 2007-02-03 21:53 UTC
rendered paste body
void ClipSpriteX8_ORnew(short x, short y, short h, unsigned char *sprite, short bytewidth, unsigned char *dest){	unsigned short bit_r, bit_l, spr_jump;	unsigned short i, j;	short skip_row, x_row, first_byte;	unsigned char clipped;		// No bytewidth may exceed 30	//if (bytewidth > 30)	//	return;		// Return if will never see	if (x <= -(bytewidth << 3) || y <= -h || x > 239 || y > 127)		return;		// Clip Y axis	if (y < 0)	{		h += y; // Change h to new height		sprite -= (bytewidth * y); // Walk sprite pointer down to clip		y = 0; // Set to 0	}	if (y > (128 - h))		h -= (y - 120); // Change H		// Clip X Axis Bytes	spr_jump = 0;	while (x < -7)	{		x += 8;		sprite++;		spr_jump++;		bytewidth--;	}	while ((x + (bytewidth << 3)) > 247)	{		spr_jump++;		bytewidth--;	}		// Calculate	first_byte = (y * 30) + (x >> 3);	bit_r = x & 7;	bit_l = 8 - bit_r;	dest += first_byte;	skip_row = 30 - bytewidth;	FontSetSys(F_4x6);	printf("x: %d, y: %d, bit_r: %d, bit_l: %d, first_byte: %d, spr_jump: %d\n", x,y, bit_r, bit_l, first_byte, spr_jump);	for(i=0; i<(unsigned short)h; i++)	{		x_row = x;		for(j=0; j<(unsigned short)bytewidth; j++)		{						// Clip X			if (x_row < 0)			{				clipped = *sprite << -x_row;				clipped >>= -x_row;			}			else if (x_row > 232)			{				clipped = *sprite >> (x_row - 232);				clipped <<= (x_row - 232);			}			else				clipped = *sprite;						// OR Sprite Now			*dest |= clipped >> bit_r;			if (bit_r)				*(dest + 1) |= clipped << bit_l;						// Walk Pointers			sprite++; // Walk Sprite Pointer			dest++; // Dest Walk Pointer			x_row += 8; // Onto next byte		}		dest += skip_row; // Walk Dest Pointer to next row		sprite += spr_jump; // Walk Sprite Pointer to new row	}}