static __inline void asm_cel_light_edge(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src); static __inline void asm_cel_light_square(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src); static __inline void asm_trans_light_cel_0_2(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src); static __inline void asm_trans_light_edge_0_2(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src); static __inline void asm_trans_light_square_0_2(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src); static __inline void asm_trans_light_cel_1_3(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src); static __inline void asm_trans_light_edge_1_3(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src); static __inline void asm_trans_light_square_1_3(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src); static __inline unsigned int asm_trans_light_mask(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src, unsigned int mask); static __inline void asm_cel_light_edge(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src) { unsigned char l = w >> 1; if ( w & 1 ) { dst[0] = tbl[src[0]]; src++; dst++; } if ( l & 1 ) { dst[0] = tbl[src[0]]; dst[1] = tbl[src[1]]; src += 2; dst += 2; } asm_cel_light_square(l >> 1, tbl, dst, src); } static __inline void asm_cel_light_square(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src) { for ( ; w; --w ) { dst[0] = tbl[src[0]]; dst[1] = tbl[src[1]]; dst[2] = tbl[src[2]]; dst[3] = tbl[src[3]]; src += 4; dst += 4; } } static __inline void asm_trans_light_cel_0_2(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src) { if ( !(w & 1) ) { asm_trans_light_edge_1_3(w >> 1, tbl, dst, src); } else { src++; dst++; asm_trans_light_edge_0_2(w >> 1, tbl, dst, src); } } static __inline void asm_trans_light_edge_0_2(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src) { unsigned char l = w >> 1; if ( w & 1 ) { dst[0] = tbl[src[0]]; src += 2; dst += 2; } if ( l ) { asm_trans_light_square_0_2(l, tbl, dst, src); } } static __inline void asm_trans_light_square_0_2(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src) { for ( ; w; --w ) { dst[0] = tbl[src[0]]; dst[2] = tbl[src[2]]; src += 4; dst += 4; } } static __inline void asm_trans_light_cel_1_3(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src) { if ( !(w & 1) ) { asm_trans_light_edge_0_2(w >> 1, tbl, dst, src); } else { dst[0] = tbl[src[0]]; src++; dst++; asm_trans_light_edge_1_3(w >> 1, tbl, dst, src); } } static __inline void asm_trans_light_edge_1_3(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src) { unsigned char l = w >> 1; if ( w & 1 ) { dst[1] = tbl[src[1]]; src += 2; dst += 2; } if ( l ) { asm_trans_light_square_1_3(l, tbl, dst, src); } } static __inline void asm_trans_light_square_1_3(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src) { for ( ; w; --w ) { dst[1] = tbl[src[1]]; dst[3] = tbl[src[3]]; src += 4; dst += 4; } } static __inline unsigned int asm_trans_light_mask(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src, unsigned int mask) { for ( ; w; --w, src++, dst++, mask *= 2 ) { if ( mask & 0x80000000 ) dst[0] = tbl[src[0]]; } return mask; }