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

📄 hong_sprite.cpp

📁 网络游戏龙族 完整的登陆器 C++ 源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		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;
		xor		edx,edx;
		mov		ax,[esi];
		mov		dx,[edi];
		
		cmp		ax, dx
			jz		skip_same_color_
			
			ror		eax,11;
		shl		ax,10;
		rol		eax,6;
		shl		ax,5;
		rol		eax,5;
		
		
		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;
		
skip_same_color_:
		
		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 PutCmprsImgNOTClipingBlendDifer565(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;
		xor		edx,edx;
		mov		ax,[esi];
		mov		dx,[edi];
		
		cmp		ax, dx
			jz		skip_same_color_
			
			ror		eax,11;
		
		shl		ax,10;
		rol		eax,6;
		shl		ax,5;
		rol		eax,5;
		
		
		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;
		
skip_same_color_:
		
		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 PutCmprsImgClipingBlendDifer555(
									 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;
		xor		edx,edx;
		
		mov		ax,[esi];
		mov		dx,[edi];
		
		cmp		ax, dx
			jz		skip_same_color_
			
			ror		eax,10;
		shl		ax,11;
		rol		eax,5;
		shl		ax,6;
		rol		eax,5;
		
		
		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;
		
skip_same_color_:
		
		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 PutCmprsImgNOTClipingBlendDifer555(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;
		xor		edx,edx;
		
		mov		ax,[esi];
		mov		dx,[edi];
		
		cmp		ax, dx
			jz		skip_same_color_
			
			ror		eax,10;
		shl		ax,11;
		rol		eax,5;
		shl		ax,6;
		rol		eax,5;
		
		
		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;
		
skip_same_color_:
		
		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 PutCmprsImgClipingAdd565(
							  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		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		ebx, by;		//
		or		ebx,ebx;
		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		dx,ax;	//j+=*stmp		// add		edx,eax;	//j+=*stmp  001216 KHS
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:
		movzx	eax,word ptr[esi];
		ror		eax,11;			//
		shl		ax,10;			//
		rol		eax,6;			//
		shl		ax,5;			
		rol		eax,5;			
		
		movzx	edx,word ptr[edi];
		ror		edx,11;			//
		shl		dx,10;			//
		rol		edx,6;			//
		shl		dx,5;			
		rol		edx,5;			
		
		imul	eax,alpha;
		shr		eax,4;
		and		eax,0x07e1fc3f;	//
		add		eax,edx;
		
		xor		edx,edx;
		mov		dl,al;
		mov		bx,word ptr[offset AddTableB + edx*2];	//
		shr		eax,10;
		mov		dl,al;
		or		bx,word ptr[offset AddTableG + edx*2];
		shr		eax,11;
		mov		dl,al;
		or		bx,word ptr[offset AddTableR + edx*2];	//
		
		mov		[edi],bx;
		
		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;
		mov		ax,[esi+2];		//movzx	eax,[esi+2]; 001216 KHS
		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 PutCmprsImgNOTClipingAdd565(int x, int y, int yl, LPVOID Stmp, LPVOID dest,  DWORD alpha)
{
	static	DWORD	ttt = 0;
	DWORD	j;
	LPVOID	Dtmp = (LPVOID)((char *)dest + y * dDxSize + (x * 2));
	
	j = yl;
	_asm{
		mov		al,0xff
			
			movsx	eax,al;
		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
		
	

⌨️ 快捷键说明

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