for (i = 0; i < length; i += 0x80) { int y; for (y = 0; y < 0x10; y++) { DWORD dstData = 0; int x; dstData = newSprites[i+(y*8)] + (newSprites[i+1+(y*8)]<<8) + (newSprites[i+2+(y*8)]<<16) + (newSprites[i+3+(y*8)]<<24); for (x = 0; x < 8; x++) { if((dstData >> (x*4+3)) & 0x01) src[(i+0x43) | (y << 2)] |= (1 << x); if((dstData >> (x*4+2)) & 0x01) src[(i+0x41) | (y << 2)] |= (1 << x); if((dstData >> (x*4+1)) & 0x01) src[(i+0x42) | (y << 2)] |= (1 << x); if((dstData >> (x*4+0)) & 0x01) src[(i+0x40) | (y << 2)] |= (1 << x); } dstData = newSprites[i+4+(y*8)] + (newSprites[i+5+(y*8)]<<8) + (newSprites[i+6+(y*8)]<<16) + (newSprites[i+7+(y*8)]<<24); for (x = 0; x < 8; x++) { if((dstData >> (x*4+3)) & 0x01) src[(i+0x03) | (y << 2)] |= (1 << x); if((dstData >> (x*4+2)) & 0x01) src[(i+0x01) | (y << 2)] |= (1 << x); if((dstData >> (x*4+1)) & 0x01) src[(i+0x02) | (y << 2)] |= (1 << x); if((dstData >> (x*4+0)) & 0x01) src[(i+0x00) | (y << 2)] |= (1 << x); } } }