亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
欧美精品丝袜中出| 国产精品九色蝌蚪自拍| 色综合中文字幕国产 | 成人黄色在线看| 亚洲图片欧美视频| 精品欧美乱码久久久久久| 色综合久久久久综合体 | 久久久精品中文字幕麻豆发布| 91香蕉视频污| 国产剧情在线观看一区二区| 亚洲一区二区三区中文字幕| 久久免费的精品国产v∧| 欧美日韩精品系列| 99久久精品情趣| 高清久久久久久| 精久久久久久久久久久| 亚洲成人精品一区二区| 国产欧美va欧美不卡在线| 91超碰这里只有精品国产| 97精品国产露脸对白| 国内外成人在线| 亚洲国产另类av| 亚洲精品va在线观看| 亚洲欧美在线高清| 中文字幕精品一区二区三区精品| 2024国产精品视频| 欧美一区二区在线视频| 欧美日韩亚洲另类| 91麻豆国产精品久久| 色综合色狠狠天天综合色| av一区二区三区黑人| 国产suv精品一区二区三区| 国产麻豆欧美日韩一区| 黑人精品欧美一区二区蜜桃| 久久精品72免费观看| 精品在线你懂的| 九九在线精品视频| 国产乱一区二区| 国产成人精品一区二区三区四区| 国产另类ts人妖一区二区| 国产精品自拍一区| 99re8在线精品视频免费播放| 99久久夜色精品国产网站| 色偷偷久久人人79超碰人人澡| 色综合天天狠狠| 在线播放欧美女士性生活| 精品理论电影在线| 久久精品人人做人人爽人人| 国产精品久久久久aaaa| 亚洲色图都市小说| 亚洲一区二区av在线| 日韩av午夜在线观看| 国产另类ts人妖一区二区| av成人动漫在线观看| 欧美日韩国产小视频在线观看| 日韩午夜激情电影| 国产精品美女久久久久久久久久久| 国产精品久久夜| 视频一区二区欧美| 福利电影一区二区三区| 欧洲一区二区三区在线| 欧美电影精品一区二区| 亚洲人成在线观看一区二区| 奇米色一区二区| 国产精品亚洲第一| 国产成人亚洲精品青草天美| 91视频91自| 精品国产制服丝袜高跟| 亚洲欧美区自拍先锋| 极品少妇一区二区| 日本电影亚洲天堂一区| 久久众筹精品私拍模特| 亚洲一区二区欧美| 国产91综合一区在线观看| 欧美三区免费完整视频在线观看| 久久精品亚洲麻豆av一区二区| 精品一区二区三区不卡| 91蝌蚪porny| 国产精品入口麻豆九色| 久久99精品久久久久久国产越南 | 亚洲动漫第一页| av电影天堂一区二区在线观看| 精品国精品国产| 麻豆中文一区二区| 91精品国产综合久久国产大片| 国产欧美精品日韩区二区麻豆天美| 亚洲v日本v欧美v久久精品| zzijzzij亚洲日本少妇熟睡| 国产婷婷精品av在线| 久久国产夜色精品鲁鲁99| 欧美日韩第一区日日骚| 亚洲天堂久久久久久久| 国内精品伊人久久久久av一坑| 777奇米四色成人影色区| 亚洲国产cao| 欧美亚洲综合一区| 亚洲电影第三页| 欧美三级视频在线观看| 亚洲国产精品久久久男人的天堂| www.亚洲免费av| 亚洲色大成网站www久久九九| 91视视频在线直接观看在线看网页在线看| 国产农村妇女毛片精品久久麻豆| 国产传媒久久文化传媒| 中文字幕第一区| 91黄色免费看| 视频一区视频二区中文字幕| 日韩一区二区免费视频| 激情丁香综合五月| 日本一区二区综合亚洲| 99久久综合99久久综合网站| 亚洲一区二区在线播放相泽| 欧美美女视频在线观看| 亚洲成在线观看| 欧美影片第一页| 久久99精品国产91久久来源| 久久综合网色—综合色88| 99久久免费视频.com| 亚洲国产精品人人做人人爽| 亚洲精品在线免费观看视频| 成人午夜精品一区二区三区| 亚洲综合激情网| 日韩免费高清电影| 成人久久18免费网站麻豆| 舔着乳尖日韩一区| 国产校园另类小说区| 欧美日韩不卡视频| 国产99精品国产| 亚洲一二三专区| 国产欧美一区二区精品婷婷 | 一区二区高清视频在线观看| 欧美一区二区精美| 91黄色免费网站| 成人一区二区三区视频在线观看 | 亚洲三级久久久| 欧美成人精品3d动漫h| 91视频一区二区| 丁香一区二区三区| 青青草国产精品亚洲专区无| 亚洲欧美日韩中文字幕一区二区三区| 在线看国产一区| 成熟亚洲日本毛茸茸凸凹| 视频一区视频二区中文| 国产精品久久久久aaaa| 制服丝袜国产精品| 91在线云播放| 亚洲一区二区三区影院| 国产欧美一区二区精品性| 制服丝袜中文字幕亚洲| 91免费国产在线| 国产jizzjizz一区二区| 久久se这里有精品| 美女尤物国产一区| 三级久久三级久久| 亚洲婷婷综合色高清在线| 国产精品人成在线观看免费| 亚洲成人动漫av| 亚洲六月丁香色婷婷综合久久| 国产精品美女久久久久久久| 久久综合色播五月| 欧美一区二区三区喷汁尤物| 欧美精品日日鲁夜夜添| 色欧美片视频在线观看| av网站一区二区三区| 福利91精品一区二区三区| 丁香啪啪综合成人亚洲小说| 波多野结衣一区二区三区| av亚洲精华国产精华精华| 97久久精品人人做人人爽50路| 色综合夜色一区| 欧美日韩一级黄| 日韩欧美一级精品久久| 精品国产91洋老外米糕| 欧美日韩1234| 国产拍欧美日韩视频二区| 亚洲精品视频一区二区| 日韩黄色一级片| 国产精品自拍网站| 国产综合久久久久久鬼色| 顶级嫩模精品视频在线看| 色av成人天堂桃色av| 欧美一区二区三区日韩视频| 国产欧美1区2区3区| 亚洲地区一二三色| 丁香另类激情小说| 制服丝袜日韩国产| 日韩美女精品在线| 久久国产综合精品| 91国内精品野花午夜精品| 欧美电影免费观看高清完整版在 | 欧美视频一区二区| 久久久久久夜精品精品免费| 亚洲国产另类av| 国产精一区二区三区| 欧美在线制服丝袜| 国产精品色婷婷| 国产精品中文字幕日韩精品| 日本韩国欧美一区二区三区| 久久噜噜亚洲综合| 免费人成精品欧美精品|