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

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

?? wl_act1.c

?? Wolf 3D official source code.
?? C
?? 第 1 頁 / 共 2 頁
字號:
		if (player->tilex == tilex)
		{
			if ( ((player->y+MINDIST) >>TILESHIFT) == tiley )
				return;
			if ( ((player->y-MINDIST) >>TILESHIFT) == tiley )
				return;
		}
		check = actorat[tilex][tiley-1];
		if (check && ((check->y+MINDIST) >> TILESHIFT) == tiley )
			return;
		check = actorat[tilex][tiley+1];
		if (check && ((check->y-MINDIST) >> TILESHIFT) == tiley )
			return;
	}


//
// play door sound if in a connected area
//
	area = *(mapsegs[0] + farmapylookup[doorobjlist[door].tiley]
			+doorobjlist[door].tilex)-AREATILE;
	if (areabyplayer[area])
	{
		PlaySoundLocTile(CLOSEDOORSND,doorobjlist[door].tilex,doorobjlist[door].tiley);	// JAB
	}

	doorobjlist[door].action = dr_closing;
//
// make the door space solid
//
	(unsigned)actorat[tilex][tiley]
		= door | 0x80;
}



/*
=====================
=
= OperateDoor
=
= The player wants to change the door's direction
=
=====================
*/

void OperateDoor (int door)
{
	int	lock;

	lock = doorobjlist[door].lock;
	if (lock >= dr_lock1 && lock <= dr_lock4)
	{
		if ( ! (gamestate.keys & (1 << (lock-dr_lock1) ) ) )
		{
			SD_PlaySound (NOWAYSND);		// locked
			return;
		}
	}

	switch (doorobjlist[door].action)
	{
	case dr_closed:
	case dr_closing:
		OpenDoor (door);
		break;
	case dr_open:
	case dr_opening:
		CloseDoor (door);
		break;
	}
}


//===========================================================================

/*
===============
=
= DoorOpen
=
= Close the door after three seconds
=
===============
*/

void DoorOpen (int door)
{
	if ( (doorobjlist[door].ticcount += tics) >= OPENTICS)
		CloseDoor (door);
}



/*
===============
=
= DoorOpening
=
===============
*/

void DoorOpening (int door)
{
	int		area1,area2;
	unsigned	far	*map;
	long	position;

	position = doorposition[door];
	if (!position)
	{
	//
	// door is just starting to open, so connect the areas
	//
		map = mapsegs[0] + farmapylookup[doorobjlist[door].tiley]
			+doorobjlist[door].tilex;

		if (doorobjlist[door].vertical)
		{
			area1 =	*(map+1);
			area2 =	*(map-1);
		}
		else
		{
			area1 =	*(map-mapwidth);
			area2 =	*(map+mapwidth);
		}
		area1 -= AREATILE;
		area2 -= AREATILE;
		areaconnect[area1][area2]++;
		areaconnect[area2][area1]++;
		ConnectAreas ();
		if (areabyplayer[area1])
		{
			PlaySoundLocTile(OPENDOORSND,doorobjlist[door].tilex,doorobjlist[door].tiley);	// JAB
		}
	}

//
// slide the door by an adaptive amount
//
	position += tics<<10;
	if (position >= 0xffff)
	{
	//
	// door is all the way open
	//
		position = 0xffff;
		doorobjlist[door].ticcount = 0;
		doorobjlist[door].action = dr_open;
		actorat[doorobjlist[door].tilex][doorobjlist[door].tiley] = 0;
	}

	doorposition[door] = position;
}


/*
===============
=
= DoorClosing
=
===============
*/

void DoorClosing (int door)
{
	int		area1,area2,move;
	unsigned	far	*map;
	long	position;
	int		tilex,tiley;

	tilex = doorobjlist[door].tilex;
	tiley = doorobjlist[door].tiley;

	if ( ((unsigned)actorat[tilex][tiley] != (door | 0x80))
	|| (player->tilex == tilex && player->tiley == tiley) )
	{			// something got inside the door
		OpenDoor (door);
		return;
	};

	position = doorposition[door];

//
// slide the door by an adaptive amount
//
	position -= tics<<10;
	if (position <= 0)
	{
	//
	// door is closed all the way, so disconnect the areas
	//
		position = 0;

		doorobjlist[door].action = dr_closed;

		map = mapsegs[0] + farmapylookup[doorobjlist[door].tiley]
			+doorobjlist[door].tilex;

		if (doorobjlist[door].vertical)
		{
			area1 =	*(map+1);
			area2 =	*(map-1);
		}
		else
		{
			area1 =	*(map-mapwidth);
			area2 =	*(map+mapwidth);
		}
		area1 -= AREATILE;
		area2 -= AREATILE;
		areaconnect[area1][area2]--;
		areaconnect[area2][area1]--;

		ConnectAreas ();
	}

	doorposition[door] = position;
}




/*
=====================
=
= MoveDoors
=
= Called from PlayLoop
=
=====================
*/

void MoveDoors (void)
{
	int		door;

	if (gamestate.victoryflag)		// don't move door during victory sequence
		return;

	for (door = 0 ; door < doornum ; door++)
		switch (doorobjlist[door].action)
		{
		case dr_open:
			DoorOpen (door);
			break;

		case dr_opening:
			DoorOpening(door);
			break;

		case dr_closing:
			DoorClosing(door);
			break;
		}
}


/*
=============================================================================

						PUSHABLE WALLS

=============================================================================
*/

unsigned	pwallstate;
unsigned	pwallpos;			// amount a pushable wall has been moved (0-63)
unsigned	pwallx,pwally;
int			pwalldir;

/*
===============
=
= PushWall
=
===============
*/

void PushWall (int checkx, int checky, int dir)
{
	int		oldtile;

	if (pwallstate)
	  return;


	oldtile = tilemap[checkx][checky];
	if (!oldtile)
		return;

	switch (dir)
	{
	case di_north:
		if (actorat[checkx][checky-1])
		{
			SD_PlaySound (NOWAYSND);
			return;
		}
		(unsigned)actorat[checkx][checky-1] =
		tilemap[checkx][checky-1] = oldtile;
		break;

	case di_east:
		if (actorat[checkx+1][checky])
		{
			SD_PlaySound (NOWAYSND);
			return;
		}
		(unsigned)actorat[checkx+1][checky] =
		tilemap[checkx+1][checky] = oldtile;
		break;

	case di_south:
		if (actorat[checkx][checky+1])
		{
			SD_PlaySound (NOWAYSND);
			return;
		}
		(unsigned)actorat[checkx][checky+1] =
		tilemap[checkx][checky+1] = oldtile;
		break;

	case di_west:
		if (actorat[checkx-1][checky])
		{
			SD_PlaySound (NOWAYSND);
			return;
		}
		(unsigned)actorat[checkx-1][checky] =
		tilemap[checkx-1][checky] = oldtile;
		break;
	}

	gamestate.secretcount++;
	pwallx = checkx;
	pwally = checky;
	pwalldir = dir;
	pwallstate = 1;
	pwallpos = 0;
	tilemap[pwallx][pwally] |= 0xc0;
	*(mapsegs[1]+farmapylookup[pwally]+pwallx) = 0;	// remove P tile info

	SD_PlaySound (PUSHWALLSND);
}



/*
=================
=
= MovePWalls
=
=================
*/

void MovePWalls (void)
{
	int		oldblock,oldtile;

	if (!pwallstate)
		return;

	oldblock = pwallstate/128;

	pwallstate += tics;

	if (pwallstate/128 != oldblock)
	{
	// block crossed into a new block
		oldtile = tilemap[pwallx][pwally] & 63;

		//
		// the tile can now be walked into
		//
		tilemap[pwallx][pwally] = 0;
		(unsigned)actorat[pwallx][pwally] = 0;
		*(mapsegs[0]+farmapylookup[pwally]+pwallx) = player->areanumber+AREATILE;

		//
		// see if it should be pushed farther
		//
		if (pwallstate>256)
		{
		//
		// the block has been pushed two tiles
		//
			pwallstate = 0;
			return;
		}
		else
		{
			switch (pwalldir)
			{
			case di_north:
				pwally--;
				if (actorat[pwallx][pwally-1])
				{
					pwallstate = 0;
					return;
				}
				(unsigned)actorat[pwallx][pwally-1] =
				tilemap[pwallx][pwally-1] = oldtile;
				break;

			case di_east:
				pwallx++;
				if (actorat[pwallx+1][pwally])
				{
					pwallstate = 0;
					return;
				}
				(unsigned)actorat[pwallx+1][pwally] =
				tilemap[pwallx+1][pwally] = oldtile;
				break;

			case di_south:
				pwally++;
				if (actorat[pwallx][pwally+1])
				{
					pwallstate = 0;
					return;
				}
				(unsigned)actorat[pwallx][pwally+1] =
				tilemap[pwallx][pwally+1] = oldtile;
				break;

			case di_west:
				pwallx--;
				if (actorat[pwallx-1][pwally])
				{
					pwallstate = 0;
					return;
				}
				(unsigned)actorat[pwallx-1][pwally] =
				tilemap[pwallx-1][pwally] = oldtile;
				break;
			}

			tilemap[pwallx][pwally] = oldtile | 0xc0;
		}
	}


	pwallpos = (pwallstate/2)&63;

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品欧美一区喷水| 亚洲午夜羞羞片| 久久蜜桃av一区二区天堂| 日韩欧美国产精品| 欧美一区二区精美| 欧美岛国在线观看| 日韩欧美一区二区免费| 一区二区三区在线高清| 国产精品人妖ts系列视频| 国产精品女上位| 国产精品视频一二三区| 国产精品国产精品国产专区不蜜 | 99精品国产一区二区三区不卡| 国产在线精品一区二区不卡了| 极品美女销魂一区二区三区| 国产一区二区精品久久99| 国产高清久久久久| 成人网在线播放| 97精品久久久午夜一区二区三区| 91麻豆自制传媒国产之光| 色88888久久久久久影院野外| 欧洲激情一区二区| 91精品国产91久久久久久一区二区 | 精品国产一区二区国模嫣然| 久久久久综合网| 欧美国产日韩a欧美在线观看| 综合在线观看色| 亚洲一级片在线观看| 欧美aaa在线| 成人性生交大片| 一本色道久久加勒比精品| 欧美日韩激情一区二区三区| 日韩午夜在线观看视频| 国产午夜精品美女毛片视频| 亚洲精品美国一| 丝瓜av网站精品一区二区| 久久电影网站中文字幕| 大尺度一区二区| 欧美色精品在线视频| 欧美va亚洲va| 亚洲特级片在线| 日本sm残虐另类| 成人一级黄色片| 欧美性大战xxxxx久久久| 欧美一二三四在线| 国产精品久久久久影视| 亚洲韩国精品一区| 国产在线视频精品一区| 色婷婷一区二区| 久久夜色精品一区| 日本道免费精品一区二区三区| 亚洲三级电影网站| 中文字幕免费不卡| 日韩av中文在线观看| 不卡区在线中文字幕| 欧美久久久久久久久| 国产农村妇女毛片精品久久麻豆 | 精品少妇一区二区三区在线视频| 26uuu亚洲| 91精品国产欧美一区二区| 久久这里只有精品视频网| 国产精品久久一级| 老鸭窝一区二区久久精品| 91美女在线看| 国产色婷婷亚洲99精品小说| 午夜私人影院久久久久| av在线一区二区| 精品国产区一区| 午夜精品久久久久影视| 成人av综合一区| 精品国产乱码久久久久久闺蜜 | 日本欧美肥老太交大片| heyzo一本久久综合| 日韩精品最新网址| 夜夜亚洲天天久久| 成人av免费观看| 精品国产成人在线影院| 亚洲成人av福利| 色综合久久中文综合久久牛| 国产亚洲精品中文字幕| 日本vs亚洲vs韩国一区三区二区| 色婷婷狠狠综合| 国产精品丝袜黑色高跟| 国产精品亚洲а∨天堂免在线| 日韩欧美精品在线| 婷婷六月综合网| 欧美日韩久久久| 一区二区欧美在线观看| 色综合天天做天天爱| 中文字幕av一区二区三区| 国产美女精品一区二区三区| 欧美不卡视频一区| 日本美女一区二区三区视频| 欧美三级韩国三级日本三斤 | 国产一区中文字幕| 欧美一级爆毛片| 欧美a一区二区| 欧美一级久久久| 美女在线视频一区| 777午夜精品免费视频| 婷婷久久综合九色国产成人| 欧美日韩在线直播| 亚洲电影欧美电影有声小说| 欧美伊人久久大香线蕉综合69 | 亚洲国产综合91精品麻豆| 91网上在线视频| 亚洲精选视频在线| 色一区在线观看| 亚洲无人区一区| 欧美日韩电影在线| 日日夜夜精品视频免费| 亚洲一区二区三区中文字幕在线 | 国产精品污网站| 韩国毛片一区二区三区| 久久伊人中文字幕| 粉嫩av一区二区三区粉嫩| 国产亚洲女人久久久久毛片| 成人av电影观看| 亚洲精品高清视频在线观看| 精品视频资源站| 偷拍一区二区三区| 欧美v日韩v国产v| 国产成人av一区| 18成人在线视频| 欧美日韩1234| 国产一区二区在线影院| 中文字幕精品—区二区四季| 91丨九色丨黑人外教| 亚洲午夜视频在线| 91麻豆精品国产自产在线| 精品中文av资源站在线观看| 久久久精品中文字幕麻豆发布| 成人av午夜影院| 亚洲国产精品久久久久秋霞影院 | 99精品视频一区| 亚洲精品视频观看| 欧美精品九九99久久| 国产毛片精品一区| 亚洲三级在线看| 欧美精品日韩一区| 国产福利91精品一区二区三区| 亚洲男人的天堂av| 欧美一级理论片| av在线不卡电影| 视频在线观看国产精品| 久久久亚洲午夜电影| 日本道色综合久久| 久久97超碰国产精品超碰| 亚洲欧洲av在线| 日韩免费视频一区| www.视频一区| 久久99热这里只有精品| 国产精品私房写真福利视频| 欧美日韩高清一区二区三区| 国产91精品露脸国语对白| 亚洲高清在线视频| 欧美国产日韩精品免费观看| 欧美日韩不卡一区| zzijzzij亚洲日本少妇熟睡| 青娱乐精品视频在线| 亚洲精品中文字幕在线观看| 日韩欧美高清在线| 日本精品裸体写真集在线观看| 国产尤物一区二区在线| 亚洲成人tv网| 国产精品久久毛片a| 精品免费国产二区三区 | 国产亚洲精品aa| 欧美日韩亚洲另类| 成人的网站免费观看| 看国产成人h片视频| 亚洲午夜激情av| 亚洲人成亚洲人成在线观看图片| 欧美不卡一区二区三区四区| 欧美日韩一区二区三区四区| 久久久久国产精品厨房| 91麻豆精品国产91久久久久久久久 | 亚洲午夜av在线| 国产精品视频在线看| 精品久久久久久久久久久久包黑料 | 国产女人aaa级久久久级| 日韩欧美在线网站| 欧美视频一区在线观看| 91在线播放网址| 成人午夜视频在线| 久久99九九99精品| 日韩精品91亚洲二区在线观看| 亚洲蜜臀av乱码久久精品蜜桃| 国产欧美一区二区精品性色超碰 | 亚洲啪啪综合av一区二区三区| 久久久不卡影院| 欧美精品一区二区三区久久久| 欧美理论电影在线| 欧美性色综合网| 色婷婷激情综合| 在线免费观看一区| 91色.com| 色婷婷精品久久二区二区蜜臀av| 99久久久精品免费观看国产蜜| 成人精品一区二区三区中文字幕|