亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cbshadow.cpp

?? 赤壁之戰的游戲源代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/////////////////////
//	CBShadow.cpp	:	v0012
//	Written by		:	Liu Gang
//	Compiler		:	Microsoft Visual C++ 4.0 & DirectX
//	Library			:	DDraw.Lib
//  Copyright		:	WayAhead Software Co.Ltd.	1996-1997
//	v0010			:	Feb.10.1997
//	v0011			:	Mar.28.1997, changed SHADOW_sItem to SHADOW_psItem
//	v0012			:	May.2.1997, make Drawall() faster if need not to draw the whole screen
/////////////////////
// implementation file
// shadow functions
// 包括對陰影和雨雪等特殊效果的操作
/////////////////////
// 

/////////////////////
#include "stdafx.h"
#include "assert.h"
#include "DDCompo.h"

#include "CBShadow.h"
#include "CBDraw.h"
#include "CBMap.h"

#include "CBMini.h"	// 與縮略圖有關
/////////////////////

// from CBDraw.cpp
extern RECT DRAW_rcClient;
extern POINT DRAW_ptScreenOffset;
extern RECT DRAW_rcScreen;

// from CBMap.cpp
extern	POINT MAP_ptSenser[2][MAP_SENSER_MAX][8*MAP_SENSER_MAX];
extern	int	  MAP_nLocationNum[4];
extern	int   MAP_nDrawNum[4];

// other map surfaces, in CBDraw.cpp
extern class	CDDSurface	DRAW_sOtherMap[MAP_OTHER_NUM];
/////////////////////

/////////////////////
// global control
// 雖然Disable,SHADOW_sBack和SHADOW_psItem都是要申請的
BOOL SHADOW_bEnable = TRUE;

// array for second layer of shadow
char	cMap_shadowEx [MAP_DATA_WIDTH][MAP_DATA_HEIGHT]; //lwc計錄是否貼陰影;

// shadow surface
class CDDSurface SHADOW_sBack, *SHADOW_psItem;
BOOL SHADOW_bCreated = FALSE;
/////////////////////

/////////////////////
// local functions
inline RECT SHADOW_GetShadowRect( int nCol, int nRow );
inline void SHADOW_DrawItem( int nX, int nY, int nDraw, CONST RECT *prcCut );
/////////////////////

/////////////////////
// load shadow surfaces
// return :	TRUE if successful
BOOL SHADOW_Load()
{
#ifdef	_DEBUG
	if( SHADOW_bCreated )
	{
		ErrorMessage( hwndGame, SHADOW_ERROR_ID+0, "Shadow surfaces have been created!" );
		return FALSE;
	}
#endif

	// load shadow background surface
	// same size as client area
	// do not has color key , in video memory
	if( !SHADOW_sBack.Create( DRAW_rcClient.right-DRAW_rcClient.left, 
						DRAW_rcClient.bottom-DRAW_rcClient.top, FALSE, TRUE ) )
	{
		OutputDebugString( "SHADOW_Load: Cannot create back surface in video memory!\n" );
		if( !SHADOW_sBack.Create( DRAW_rcClient.right-DRAW_rcClient.left, 
							DRAW_rcClient.bottom-DRAW_rcClient.top, FALSE, FALSE ) )
		{
			ErrorMessage( hwndGame, SHADOW_ERROR_ID+1, "Cannot create shadow background surface!" );
			return FALSE;
		}
	}
	// set color key seperately
	SHADOW_sBack.SetColorKeyPAL( 83 );	// red is color key
	SHADOW_sBack.Erase( 0 );// BLACK, RGB(0,0,0)//lwc

	// load shadow source image file
	// color key, system memory
	//if( !SHADOW_sItem.LoadBitmap( filename, TRUE, FALSE ) )
	SHADOW_psItem = &DRAW_sOtherMap[6];
	if( SHADOW_psItem == NULL || SHADOW_psItem->GetSurface() == NULL )
	{
		ErrorMessage( hwndGame, SHADOW_ERROR_ID+2, "Cannot create shadow item surface!" );
		return FALSE;
	}
	SHADOW_psItem->SetColorKeyDEF();
	SHADOW_bCreated = TRUE;

	return TRUE;
}

// release shadow surfaces
void SHADOW_Release()
{
#ifdef	_DEBUG
	if( !SHADOW_bCreated )
	{
		ErrorMessage( hwndGame, SHADOW_ERROR_ID+10, "Try to release shadow surfaces before load them!" );
		return;
	}
#endif

	SHADOW_sBack.Release();
//	SHADOW_sItem.Release();
	SHADOW_bCreated = FALSE;
}

void SHADOW_Clear()
{
	memset( cMap_shadowEx, 0, sizeof( char )*MAP_DATA_WIDTH*MAP_DATA_HEIGHT ); //清空
}
/////////////////////

/////////////////////
RECT SHADOW_GetShadowRect( int nCol, int nRow )
{
	int left, top;
	RECT rect;
	
	top = nRow*(MAP_Lib.szItem.cy>>1);
	if( (nRow&1) == 0 )
	{
		left = nCol*MAP_Lib.szItem.cx;
	}
	else
	{
		left = nCol*MAP_Lib.szItem.cx+(MAP_Lib.szItem.cx>>1);
	}

	// re-adjust coords
	left -= DRAW_ptScreenOffset.x;
	top -= DRAW_ptScreenOffset.y;
	
	rect.left = left, rect.top = top, 
	rect.right = left+MAP_Lib.szItem.cx, 
	rect.bottom = top + MAP_Lib.szItem.cy;

	return rect;
}

void SHADOW_DrawItem( int nX, int nY, int nDraw, CONST RECT *prcCut )
{
	if (nDraw ==2) return;  //lwc
	if( SHADOW_bEnable == FALSE )	return;	// if disable shadow, do nothing
#ifdef	_DEBUG
	if( nDraw > 9 || nDraw < 0 )  
		OutputDebugString( "SHADOW_DrawItem Error: Input index error, out of range!\n" );
#endif

	RECT rect;

	RECT rcCutS, rcCutSOld;
	rcCutSOld = SHADOW_GetShadowRect( nX, nY );
	if( IntersectRect( &rcCutS, &rcCutSOld, prcCut ) )
	{
		POINT ptTLOff, ptRBOff;
		ptTLOff.x = rcCutSOld.left - rcCutS.left;
		ptTLOff.y = rcCutSOld.top - rcCutS.top;
		ptRBOff.x = rcCutSOld.right - rcCutS.right;
		ptRBOff.y = rcCutSOld.bottom - rcCutS.bottom;

		// calc source position and size
		rect.left = 0-ptTLOff.x;
		rect.right = (rcCutSOld.right - rcCutSOld.left) - ptRBOff.x;
		rect.top = nDraw*(rcCutSOld.bottom - rcCutSOld.top) - ptTLOff.y;
		rect.bottom = (nDraw+1)*(rcCutSOld.bottom - rcCutSOld.top) - ptRBOff.y;

		// draw
		POINT ptDest;
		ptDest.x = rcCutS.left-DRAW_rcClient.left, ptDest.y = rcCutS.top-DRAW_rcClient.top;
		LPDIRECTDRAWSURFACE2 psurSrc = SHADOW_psItem->GetSurface();
		LPDIRECTDRAWSURFACE2 psurDest = SHADOW_sBack.GetSurface();
		DD_BltSurface( ptDest, psurDest, &rect, psurSrc, DDBLTFAST_SRCCOLORKEY );
	}
}
//存在
void SHADOW_existent(int nX,int nY,int nRange)
{
	int i,j;
	WORD codeR;
	struct MAP_REGION_CODE_STRUCT stctR;
	int bOdd;
	int nDrawX, nDrawY;

	// draw current position
	nDrawX = nX, nDrawY = nY;
	if (cMap_shadowEx[nDrawX][nDrawY]==0)
	{
		codeR = MAP_GetRegionData( nDrawX, nDrawY );
		MAP_RegionDeCode( codeR, &stctR );  

		stctR.nShadowEx = 0 ;///nVal;//lwc
		SHADOW_DrawItem( nDrawX, nDrawY, 0, &DRAW_rcClient );//lwc

		// 縮略圖
		MINI_SetGroundData( nDrawX, nDrawY, 0 );

		codeR = MAP_RegionEnCode( stctR );
		MAP_SetRegionData( nDrawX, nDrawY, codeR );   //lwc
	}
	Assert( cMap_shadowEx[nDrawX][nDrawY]>=0 );
	cMap_shadowEx[nDrawX][nDrawY]++;//

	bOdd = nY&1;
	for( i=0; i< nRange; i++ )//lwc < 改==
	for( j=0; j< ((i+1)<<3); j++ )
	{
		nDrawX = nX + MAP_ptSenser[bOdd][i][j].x;
		nDrawY = nY + MAP_ptSenser[bOdd][i][j].y;
		if( nDrawX < 0 || nDrawX >= MAP_Lib.szNum.cx)	continue;
		if( nDrawY < 0 || nDrawY >= MAP_Lib.szNum.cy)	continue;

		////////////////////////////////////////////////////////
		//lwc新的透明陰影
        if( i != nRange-1)
        {//貼透明陰影
			if (cMap_shadowEx[nDrawX][nDrawY]==0)
			{
				codeR = MAP_GetRegionData( nDrawX, nDrawY );
				MAP_RegionDeCode( codeR, &stctR );  

				stctR.nShadowEx = 0 ;///nVal;//lwc
				SHADOW_DrawItem( nDrawX, nDrawY, 0, &DRAW_rcClient );//lwc

				// 縮略圖
				MINI_SetGroundData( nDrawX, nDrawY, 0 );

				codeR = MAP_RegionEnCode( stctR );
				MAP_SetRegionData( nDrawX, nDrawY, codeR );   //lwc
			}
			Assert( cMap_shadowEx[nDrawX][nDrawY]>=0 );
	        cMap_shadowEx[nDrawX][nDrawY]++;//
		}
		else
		{   
            if (cMap_shadowEx[nDrawX][nDrawY]==0)
            {
				codeR = MAP_GetRegionData( nDrawX, nDrawY );
				MAP_RegionDeCode( codeR, &stctR );  

                stctR.nShadowEx=1;//lwc
                SHADOW_DrawItem( nDrawX, nDrawY, stctR.nShadowEx, &DRAW_rcClient ); //lwc

				// 縮略圖
				MINI_SetGroundData( nDrawX, nDrawY, 0 );

				codeR = MAP_RegionEnCode( stctR );
				MAP_SetRegionData( nDrawX, nDrawY, codeR );   //lwc
            }
		}
		//lwc新的透明陰影
		////////////////////////////////////////////////////////
	}// End of for(i)

}
//死亡
void SHADOW_death (int nX,int nY,int nRange)
{
	int i,j;
	WORD codeR;
	struct MAP_REGION_CODE_STRUCT stctR;
	int bOdd;
	int nDrawX, nDrawY;

	// draw current position
	nDrawX = nX, nDrawY = nY;
	cMap_shadowEx[nDrawX][nDrawY]--;//
	Assert( cMap_shadowEx[nDrawX][nDrawY]>=0 );
	if (cMap_shadowEx[nDrawX][nDrawY]==0)
	{
		codeR = MAP_GetRegionData( nDrawX, nDrawY );
		MAP_RegionDeCode( codeR, &stctR );  

		stctR.nShadowEx = 1 ;///nVal;//lwc
		SHADOW_DrawItem( nDrawX, nDrawY, 1, &DRAW_rcClient );//lwc

		codeR = MAP_RegionEnCode( stctR );
		MAP_SetRegionData( nDrawX, nDrawY, codeR );   //lwc
	}

	bOdd = nY&1;
	for( i=0; i< nRange; i++ )
	for( j=0; j< ((i+1)<<3); j++ )
	{
		nDrawX = nX + MAP_ptSenser[bOdd][i][j].x;//相對于
		nDrawY = nY + MAP_ptSenser[bOdd][i][j].y;
		if( nDrawX < 0 || nDrawX >= MAP_Lib.szNum.cx)	continue;
		if( nDrawY < 0 || nDrawY >= MAP_Lib.szNum.cy)	continue;

		////////////////////////////////////////////////////////
		//lwc舊的透明陰影
		if( i != nRange-1)
		{
			cMap_shadowEx[nDrawX][nDrawY]--;
			Assert( cMap_shadowEx[nDrawX][nDrawY]>=0 );
			if (cMap_shadowEx[nDrawX][nDrawY]==0)
			{
				codeR = MAP_GetRegionData( nDrawX, nDrawY );
				MAP_RegionDeCode( codeR, &stctR );  

				stctR.nShadowEx = 1;//lwc
				SHADOW_DrawItem( nDrawX, nDrawY, 1, &DRAW_rcClient ); //lwc

				codeR = MAP_RegionEnCode( stctR );
				MAP_SetRegionData( nDrawX, nDrawY, codeR );   //lwc

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品888| 国产真实精品久久二三区| 在线观看日韩电影| 一区二区免费在线播放| 成人国产精品免费| 91麻豆精品国产91久久久更新时间 | 7777精品伊人久久久大香线蕉超级流畅| 亚洲三级电影网站| 本田岬高潮一区二区三区| 国产视频一区在线观看| 国产精品一区二区在线播放| 久久一区二区三区国产精品| 蜜臀av一级做a爰片久久| 欧美www视频| 国产精品亚洲成人| 国产精品私房写真福利视频| 国产91色综合久久免费分享| 中文字幕一区二区三区精华液 | 一区二区激情视频| 91精品国产综合久久久久久久久久| 五月激情综合婷婷| 国产精品久久久久久久久动漫 | 亚洲色图.com| 欧美视频在线播放| 免费人成在线不卡| 精品久久久三级丝袜| 不卡一区在线观看| 一区二区三区精品在线| 日本福利一区二区| 久久精品国产久精国产| 久久久久久久综合狠狠综合| 91啦中文在线观看| 三级久久三级久久久| 国产亚洲欧美激情| 欧美亚洲综合一区| 国产91富婆露脸刺激对白| 天堂精品中文字幕在线| 欧美国产禁国产网站cc| 日本电影欧美片| 极品少妇xxxx精品少妇偷拍 | 亚洲高清视频在线| 精品乱人伦小说| 91福利资源站| 国产成人亚洲综合a∨婷婷| 亚洲美女屁股眼交3| 国产人妖乱国产精品人妖| 欧美日韩国产一级二级| 不卡的电影网站| 日产欧产美韩系列久久99| 国产精品另类一区| 欧美在线色视频| 91首页免费视频| 不卡一区二区中文字幕| 成人自拍视频在线| 午夜精品久久久久久久| 国产精品传媒入口麻豆| 欧美一区二区日韩| 欧美性猛交xxxx黑人交| 国产成人亚洲综合a∨猫咪| 午夜不卡av免费| 亚洲成人av一区二区三区| 亚洲高清免费一级二级三级| 一区二区三区精品视频在线| 欧美激情一区二区三区不卡| 精品久久人人做人人爰| 国产成人鲁色资源国产91色综| 看片网站欧美日韩| 九色porny丨国产精品| 日本不卡一区二区| 亚洲.国产.中文慕字在线| 精品乱人伦一区二区三区| 日韩一区二区三区精品视频| 欧美福利视频一区| 欧美一二三区精品| 精品国产一区二区三区忘忧草| 精品伦理精品一区| 久久一留热品黄| 综合久久给合久久狠狠狠97色| 亚洲福利视频一区| 国产乱子伦视频一区二区三区| av中文字幕在线不卡| 欧美日韩免费观看一区二区三区 | 欧美色图12p| 国产女主播在线一区二区| 日韩成人一级片| 麻豆一区二区在线| 久久国产人妖系列| 99国产精品国产精品毛片| 欧美视频一区在线| 久久久久国产精品麻豆ai换脸| 亚洲精品国产第一综合99久久 | 欧美成人a∨高清免费观看| 亚洲免费视频中文字幕| 国产精品一区二区在线播放| 欧美电影一区二区| www激情久久| 日韩国产精品久久| 一本大道av一区二区在线播放| 精品国产乱码久久久久久蜜臀| 亚洲一卡二卡三卡四卡| 91成人在线免费观看| 中文字幕色av一区二区三区| 国产一二三精品| 久久午夜色播影院免费高清| 麻豆国产一区二区| 日韩欧美国产综合一区| 亚洲高清免费观看高清完整版在线观看| 成人性生交大片| 国产日韩欧美在线一区| 久久99久久99| 欧美一区二区三区色| 美女国产一区二区三区| 欧美一区二区三区的| 精品亚洲国产成人av制服丝袜| 欧美成人猛片aaaaaaa| 亚洲成人免费观看| 欧美日韩视频在线第一区 | 男女激情视频一区| 欧美日本韩国一区二区三区视频| 亚洲综合丝袜美腿| 4438x成人网最大色成网站| 精品一区二区三区视频在线观看| 精品少妇一区二区三区视频免付费| 天堂久久一区二区三区| 欧美精品精品一区| 欧美在线免费播放| 亚洲影院在线观看| 欧美变态口味重另类| 高清成人免费视频| 亚洲女同女同女同女同女同69| 99热精品国产| 日韩电影免费一区| 中文字幕一区二区三区在线观看 | 欧美三级资源在线| 久久国产综合精品| 国产精品久久久久影院老司| av亚洲精华国产精华精华| 亚洲午夜精品网| 欧美成人一区二区| 懂色av一区二区夜夜嗨| 亚洲精品免费在线播放| 91麻豆精品国产91久久久| 国产sm精品调教视频网站| 国产精品欧美极品| 777a∨成人精品桃花网| 99综合电影在线视频| 蜜桃传媒麻豆第一区在线观看| 亚洲欧洲精品成人久久奇米网| 在线播放视频一区| 91丨porny丨在线| 国产精品1区2区| 免费欧美在线视频| 亚洲高清免费在线| 中文字幕亚洲一区二区av在线| 欧美精品高清视频| 国产福利视频一区二区三区| 日本成人在线不卡视频| 亚洲视频在线观看三级| 久久综合九色综合久久久精品综合| 欧美日韩国产高清一区二区| 一本大道av一区二区在线播放| 精品亚洲porn| 亚洲成a人片在线不卡一二三区| 亚洲国产高清aⅴ视频| 日韩美女视频一区二区在线观看| 欧美精品在线一区二区三区| 欧美午夜电影在线播放| 欧美午夜精品一区| 欧美日韩精品免费观看视频| 一本一道久久a久久精品| 91精品91久久久中77777| 色婷婷精品久久二区二区蜜臂av | 99r精品视频| 成人福利视频在线看| 成人听书哪个软件好| 粉嫩高潮美女一区二区三区| 国产精品一区二区视频| 成人动漫一区二区三区| www.成人网.com| 91亚洲国产成人精品一区二区三 | 国产精品麻豆欧美日韩ww| 国产日产精品一区| 亚洲欧美日韩人成在线播放| 一区二区三区.www| 久久精品国产**网站演员| 国产福利一区二区三区视频在线| 国产一区二区福利视频| www.欧美.com| 欧美日韩成人综合| 2023国产精华国产精品| 欧美高清在线一区| 亚洲一区二区视频在线观看| 一区二区三区产品免费精品久久75 | 日本高清不卡视频| 91 com成人网| 国产欧美日韩中文久久| 亚洲午夜精品在线| 国产主播一区二区| 色婷婷久久久久swag精品| 欧美老人xxxx18|