⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hong_sprite.cpp

📁 网络游戏龙族 完整的登陆器 C++ 源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		sub		dx,word ptr lx;
		sub		esi,edx;
		mov		cx,dx;
		
		cmp		dx,word ptr rx;	//new
		jle		jmp_0000;		//"
		mov		cx,word ptr rx;	//"
xxxxxxx1:
jmp_0000:					//"
		
		//************ move	data ***********
		shr		cx,1;//*********************************************************
		or		cx,cx;
		jz		exit_movedata1;
loop_TR1:
		lodsw
			and		ax,111101111011110b;
		and		word ptr [edi],111101111011110b;
		add		ax,[edi];
		shr		ax,1;
		mov		[edi],ax;
		add		edi,2;
		loop	loop_TR1;
exit_movedata1:
		
		cmp		dx,word ptr rx;	//new		
		jle		exit_while1;	//"
		mov		eax,edx;		//"
		sub		ax,word ptr rx;	//"
		add		esi,eax;		//new
		
exit_while1:	//end while(*stmp != 0xffff)*/
exit_if1:	//end if(lx)
		
		
loop_while2:	
		cmp		word ptr[esi],0xffff;
		jz		exit_while2;
		
		lodsw;
		add		edi,eax;	//dtmp+=*stmp
		add		dx,ax;		//j+=*stmp
		
		lodsw;
		mov		cx,ax;		//l=k=*stmp
		mov		word ptr l,ax;
		
		add		ax,dx;
		cmp		ax,word ptr rx;
		jle		exit_if0;
		cmp		dx,word ptr rx;
		jg		exit_if0;
		//mov		ax,cx;
		mov		cx,word ptr rx;
		sub		cx,dx;
exit_if0:
		cmp		dx,word ptr rx;
		jg		else_if;
		
		add		dx,word ptr l;	//j+=l;
		sub		word ptr l,cx;	//l-k;
		
		//************ move	data ***********
		shr		cx,1;//*********************************************************
		or		cx,cx;
		jz		exit_movedata2;
loop_TR2:
		lodsw
			and		ax,111101111011110b;
		and		word ptr [edi],111101111011110b;
		add		ax,[edi];
		shr		ax,1;
		mov		[edi],ax;
		add		edi,2;
		loop	loop_TR2;
exit_movedata2:
		
		mov		ax,word ptr l;
		add		esi,eax;
		jmp		loop_while2;
		
else_if:
		mov		ax,word ptr l;
		add		esi,eax;
ext_loop:
		cmp		word ptr[esi],0xffff;
		jz		ext;
		add		esi,2;
		lodsw
			add		esi,eax;
		jmp		ext_loop;
ext:
		
exit_while2:
		add		esi,2;
		
		mov		ax, wDxSize;
		add		dword ptr Dtmp,eax;
		dec		bx;
		jmp		loop_for1;
exit_for1:
		
		pop		es;
	};
}
void PutCmprsImgNOTClipingHBlend555(int x, int y, int yl, LPVOID Stmp, LPVOID dest)
{
	DWORD	j;
	LPVOID	Dtmp = (LPVOID)((char *)dest + y * dDxSize + (x * 2 ));
	
	j = yl;
	_asm{
		push	es;
		
		push	ds;
		pop		es;
		
		mov		edx,Dtmp;
		mov		esi,Stmp;
		
		mov		ebx,j;
		
		xor		eax,eax;
		xor		ecx,ecx;
		
		or		ebx,ebx;	// if(SY==0)
		jz		exit_1;
loop_1:
		mov		edi,edx;
		
loop_2:	
		cmp		word ptr[esi],0xffff;
		jz		exit_2;
		
		mov		ax,[esi];
		add		edi,eax;	//0 skip
		
		mov		cx,[esi+2];	//load data num
		add		esi,4;
		shr		ecx,1;
		
loop_TR:
		mov		eax,[esi];
		mov		ebx,[edi];
		shr		eax,2;
		and		eax,001100011000110b;
		and		ebx,111101111011110b;
		
		add		eax,ebx;
		
		shr		eax,1;
		mov		[edi],ax;
		add		esi,2;
		add		edi,2;
		loop	loop_TR;
		
		jmp		loop_2;
exit_2:
		add		esi,2;
		
		add		edx,dDxSize;
		dec		j;
		jnz		loop_1;
exit_1:
		pop		es;
	};
}



void PutCmprsImgClipingBlend565(
								int x, int y, LPVOID Stmp, LPVOID dest, int lx, int rx, int ty, int by, DWORD alpha)
{
	int		l;
	LPVOID	Dtmp = (LPVOID)((char *)dest + y * wDxSize + (x * 2 ));
	
	_asm{
		mov		ecx,rx;
		shl		ecx,1;
		mov		rx,ecx;
		
		mov		ecx,lx;
		shl		ecx,1;
		mov		lx,ecx;
	}
	
	_asm{
		push	es;
		
		push	ds;
		pop		es;
		
		xor		eax,eax;
		mov		ebx,alpha;
		
		mov		esi,Stmp;
		
		mov		ecx,ty;
		or		ecx,ecx;
		jz		exit_1;
loop_1:
		cmp		word ptr[esi],0xffff;
		jz		exit_xxxx;
		mov		ax,[esi+2]
			add		esi,4;
		add		esi,eax;
		jmp		loop_1;
exit_xxxx:
		add		esi,2;
		loop	loop_1;
exit_1:
	}	
	_asm{
		mov		eax, by;		//
		or		eax,eax;
		jz		exit_for1;
loop_for1:
		xor		edx,edx;
		mov		edi,Dtmp;
		test	lx,0xffff;			//if(lx)
		jz		exit_if1;
loop_while1:
		cmp		word ptr[esi],0xffff;	//while(*stmp != 0xffff)
		jz		exit_while1;			//
		add		dx,[esi];
		cmp		edx,lx;		//if(j>lx)
		jle		jmp_if1;			//
		sub		edx,lx;		//j-=lx
		add		edi,edx;			//dtmp+=j
		jmp		jmp_0416;//****************************************************
		
jmp_if1:///////////////////////////////////////
		mov		ax,[esi + 2];
		add		esi,4;
		add		edx,eax;
		add		esi,eax;	//
		cmp		edx,lx;		//
		jle		loop_while1;
		sub		edx,lx;
		sub		esi,edx;
		mov		eax,edx;
		xor		edx,edx;
		jmp		jmp_0429;		//4.29
exit_while1:	//end while(*stmp != 0xffff)*/
exit_if1:	//end if(lx)
		
loop_while2:	
		cmp		word ptr[esi],0xffff;
		jz		exit_while2;
		
		movzx	eax,word ptr[esi];
		add		edi,eax;	//dtmp+=*stmp
		add		edx,eax;	//j+=*stmp
jmp_0416:
		mov		ax,[esi + 2];
		add		esi,4;
jmp_0429:
		mov		ecx,eax;		//l=k=*stmp
		mov		l,eax;
		
		add		eax,edx;
		cmp		eax, rx;
		jle		exit_if0;
		cmp		edx, rx;
		jg		exit_if0;
		mov		ecx, rx;
		sub		ecx,edx;
exit_if0:
		cmp		edx, rx;
		jg		else_if;
		
		add		edx, l;			//j+=l;
		sub		l,ecx;			//l-k;
		or		ecx,ecx;
		jz		jmp_kkk;
		
		shr		ecx,1;		//move DATA
		push	edx;
loop_alpha:
		xor		eax,eax;
		mov		ax,[esi];
		ror		eax,11;
		xor		edx,edx;
		shl		ax,10;
		rol		eax,6;
		shl		ax,5;
		rol		eax,5;
		
		mov		dx,[edi];
		ror		edx,11;
		shl		dx,10;
		rol		edx,6;
		shl		dx,5;
		rol		edx,5;
		
		imul	eax,ebx;
		shr		eax,5;
		and		eax,0x03e0fc1f;
		add		eax,edx;
		imul	edx,ebx;
		shr		edx,5;
		and		eax,0x03e0fc1f;
		
		sub		eax,edx;
		
		ror		eax,5;
		shr		ax,5;
		ror		eax,6;
		shr		ax,10;
		rol		eax,11;
		
		mov		[edi],ax;
		
		add		edi,2;
		add		esi,2;
		loop	loop_alpha;
		pop		edx;
		
jmp_kkk:
		add		esi,l;
		jmp		loop_while2;
		
else_if:
		add		esi,l;
ext_loop:
		cmp		word ptr[esi],0xffff;
		jz		ext;
		movzx	eax,[esi+2];
		add		esi,4;
		add		esi,eax;
		jmp		ext_loop;
ext:
		
exit_while2:
		mov		eax, dDxSize;
		add		esi,2;
		add		dword ptr Dtmp,eax;
		dec		dword ptr by;	//for(i=0;i<by;i++)
		jnz		loop_for1;	//
exit_for1:
		
		pop		es;
	};
}
void PutCmprsImgNOTClipingBlend565(int x, int y, int yl, LPVOID Stmp, LPVOID dest, DWORD alpha)
{
	DWORD	j;
	LPVOID	Dtmp = (LPVOID)((char *)dest + y * dDxSize + (x * 2 ));
	
	j = yl;
	
	_asm{
		push	es;
		
		push	ds;
		pop		es;
		
		mov		esi,Stmp;
		
		mov		ebx,alpha;
		
		inc		j;
		
		xor		eax,eax;
		xor		ecx,ecx;
loop_1:
		dec		j
			jz		exit_1;  //if(SY==0)
		mov		edi,Dtmp;
		
loop_2:	
		cmp		word ptr[esi],0xffff;
		jz		exit_2;
		
		xor		eax,eax;
		mov		ax,[esi];
		add		edi,eax;	//0 skip
		
		mov		cx,[esi+2];	//load data num
		add		esi,4;
		
		shr		ecx,1;
		
loop_alpha:
		xor		eax,eax;
		mov		ax,[esi];
		ror		eax,11;
		xor		edx,edx;
		shl		ax,10;
		rol		eax,6;
		shl		ax,5;
		rol		eax,5;
		
		mov		dx,[edi];
		ror		edx,11;
		shl		dx,10;
		rol		edx,6;
		shl		dx,5;
		rol		edx,5;
		
		imul	eax,ebx;
		shr		eax,5;
		and		eax,0x03e0fc1f;
		add		eax,edx;
		imul	edx,ebx;
		shr		edx,5;
		and		eax,0x03e0fc1f;
		
		sub		eax,edx;
		
		ror		eax,5;
		shr		ax,5;
		ror		eax,6;
		shr		ax,10;
		rol		eax,11;
		
		mov		[edi],ax;
		
		add		edi,2;
		add		esi,2;
		loop	loop_alpha;
		
		jmp		loop_2;
exit_2:
		add		esi,2;
		
		mov		eax,Dtmp;
		add		eax,dDxSize;
		mov		Dtmp,eax;
		jmp		loop_1;
exit_1:
		pop		es;
	};	
}		

void PutCmprsImgClipingBlend555(
								int x, int y, LPVOID Stmp, LPVOID dest, int lx, int rx, int ty, int by, DWORD alpha)
{
	int		l;
	LPVOID	Dtmp = (LPVOID)((char *)dest + y * wDxSize + (x * 2 ));
	
	_asm{
		mov		ecx,rx;
		shl		ecx,1;
		mov		rx,ecx;
		
		mov		ecx,lx;
		shl		ecx,1;
		mov		lx,ecx;
	}
	
	_asm{
		push	es;
		
		push	ds;
		pop		es;
		
		xor		eax,eax;
		mov		ebx,alpha;
		
		mov		esi,Stmp;
		
		mov		ecx,ty;
		or		ecx,ecx;
		jz		exit_1;
loop_1:
		cmp		word ptr[esi],0xffff;
		jz		exit_xxxx;
		mov		ax,[esi+2]
			add		esi,4;
		add		esi,eax;
		jmp		loop_1;
exit_xxxx:
		add		esi,2;
		loop	loop_1;
exit_1:
	}	
	_asm{
		mov		eax, by;		//
		or		eax,eax;
		jz		exit_for1;
loop_for1:
		xor		edx,edx;
		mov		edi,Dtmp;
		test	lx,0xffff;			//if(lx)
		jz		exit_if1;
loop_while1:
		cmp		word ptr[esi],0xffff;	//while(*stmp != 0xffff)
		jz		exit_while1;			//
		add		dx,[esi];
		cmp		edx,lx;		//if(j>lx)
		jle		jmp_if1;			//
		sub		edx,lx;		//j-=lx
		add		edi,edx;			//dtmp+=j
		jmp		jmp_0416;//****************************************************
		
jmp_if1:///////////////////////////////////////
		mov		ax,[esi + 2];
		add		esi,4;
		add		edx,eax;
		add		esi,eax;	//
		cmp		edx,lx;		//
		jle		loop_while1;
		sub		edx,lx;
		sub		esi,edx;
		mov		eax,edx;
		xor		edx,edx;
		jmp		jmp_0429;		//4.29
exit_while1:	//end while(*stmp != 0xffff)*/
exit_if1:	//end if(lx)
		
loop_while2:	
		cmp		word ptr[esi],0xffff;
		jz		exit_while2;
		
		movzx	eax,word ptr[esi];
		add		edi,eax;	//dtmp+=*stmp
		add		edx,eax;	//j+=*stmp
jmp_0416:
		mov		ax,[esi + 2];
		add		esi,4;
jmp_0429:
		mov		ecx,eax;		//l=k=*stmp
		mov		l,eax;
		
		add		eax,edx;
		cmp		eax, rx;
		jle		exit_if0;
		cmp		edx, rx;
		jg		exit_if0;
		mov		ecx, rx;
		sub		ecx,edx;
exit_if0:
		cmp		edx, rx;
		jg		else_if;
		
		add		edx, l;			//j+=l;
		sub		l,ecx;			//l-k;
		or		ecx,ecx;
		jz		jmp_kkk;
		
		shr		ecx,1;		//move DATA
		push	edx;
loop_alpha:
		xor		eax,eax;
		mov		ax,[esi];
		ror		eax,10;
		xor		edx,edx;
		shl		ax,11;
		rol		eax,5;
		shl		ax,6;
		rol		eax,5;
		
		mov		dx,[edi];
		ror		edx,10;
		shl		dx,11;
		rol		edx,5;
		shl		dx,6;
		rol		edx,5;
		
		imul	eax,ebx;
		shr		eax,5;
		and		eax,0x07e0fc1f;
		add		eax,edx;
		imul	edx,ebx;
		shr		edx,5;
		and		eax,0x07e0fc1f;
		
		sub		eax,edx;
		
		ror		eax,5;
		shr		ax,6;
		ror		eax,5;
		shr		ax,11;
		rol		eax,10;
		
		mov		[edi],ax;
		
		add		edi,2;
		add		esi,2;
		loop	loop_alpha;
		pop		edx;
		
jmp_kkk:
		add		esi,l;
		jmp		loop_while2;
		
else_if:
		add		esi,l;
ext_loop:
		cmp		word ptr[esi],0xffff;
		jz		ext;
		movzx	eax,[esi+2];
		add		esi,4;
		add		esi,eax;
		jmp		ext_loop;
ext:
		
exit_while2:
		mov		eax, dDxSize;
		add		esi,2;
		add		dword ptr Dtmp,eax;
		dec		dword ptr by;	//for(i=0;i<by;i++)
		jnz		loop_for1;	//
exit_for1:
		
		pop		es;
	};
}
void PutCmprsImgNOTClipingBlend555(int x, int y, int yl, LPVOID Stmp, LPVOID dest, DWORD alpha)
{
	DWORD	j;
	LPVOID	Dtmp = (LPVOID)((char *)dest + y * dDxSize + (x * 2 ));
	
	j = yl;
	
	_asm{
		push	es;
		
		push	ds;
		pop		es;
		
		mov		esi,Stmp;
		
		mov		ebx,alpha;
		
		inc		j;
		
		xor		eax,eax;
		xor		ecx,ecx;
loop_1:
		dec		j
			jz		exit_1;  //if(SY==0)
		mov		edi,Dtmp;
		
loop_2:	
		cmp		word ptr[esi],0xffff;
		jz		exit_2;
		
		xor		eax,eax;
		mov		ax,[esi];
		add		edi,eax;	//0 skip
		
		mov		cx,[esi+2];	//load data num
		add		esi,4;
		
		shr		ecx,1;
		
loop_alpha:
		xor		eax,eax;
		mov		ax,[esi];
		ror		eax,10;
		xor		edx,edx;
		shl		ax,11;
		rol		eax,5;
		shl		ax,6;
		rol		eax,5;
		
		mov		dx,[edi];
		ror		edx,10;
		shl		dx,11;
		rol		edx,5;
		shl		dx,6;
		rol		edx,5;
		
		imul	eax,ebx;
		shr		eax,5;
		and		eax,0x03e0fc1f;
		add		eax,edx;
		imul	edx,ebx;
		shr		edx,5;
		and		eax,0x03e0fc1f;
		
		sub		eax,edx;
		
		ror		eax,5;
		shr		ax,6;
		ror		eax,5;
		shr		ax,11;
		rol		eax,10;
		
		mov		[edi],ax;
		
		add		edi,2;
		add		esi,2;
		loop	loop_alpha;
		
		jmp		loop_2;
exit_2:
		add		esi,2;
		
		mov		eax,Dtmp;
		add		eax,dDxSize;
		mov		Dtmp,eax;
		jmp		loop_1;
exit_1:
		pop		es;
	};	
}		
////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////


void PutCmprsImgClipingBlendDifer565(
									 int x, int y, LPVOID Stmp, LPVOID dest, int lx, int rx, int ty, int by, DWORD alpha)
{
	int		l;
	LPVOID	Dtmp = (LPVOID)((char *)dest + y * wDxSize + (x * 2 ));
	
	_asm{
		mov		ecx,rx;
		shl		ecx,1;
		mov		rx,ecx;
		
		mov		ecx,lx;
		shl		ecx,1;
		mov		lx,ecx;
	}
	
	_asm{
		push	es;
		
		push	ds;
		pop		es;
		
		xor		eax,eax;
		mov		ebx,alpha;
		
		mov		esi,Stmp;
		
		mov		ecx,ty;
		or		ecx,ecx;
		jz		exit_1;
loop_1:
		cmp		word ptr[esi],0xffff;
		jz		exit_xxxx;
		mov		ax,[esi+2]
			add		esi,4;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -