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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? p_spec.c

?? 魔法師傳奇源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
//**************************************************************************//**//** p_spec.c : Heretic 2 : Raven Software, Corp.//**//** $RCSfile: p_spec.c,v $//** $Revision: 1.67 $//** $Date: 96/01/06 18:37:33 $//** $Author: bgokey $//**//**************************************************************************// HEADER FILES ------------------------------------------------------------#include "h2def.h"#include "p_local.h"#include "soundst.h"// MACROS ------------------------------------------------------------------#define MAX_TAGGED_LINES 64// TYPES -------------------------------------------------------------------// EXTERNAL FUNCTION PROTOTYPES --------------------------------------------// PUBLIC FUNCTION PROTOTYPES ----------------------------------------------// PRIVATE FUNCTION PROTOTYPES ---------------------------------------------static boolean CheckedLockedDoor(mobj_t *mo, byte lock);// EXTERNAL DATA DECLARATIONS ----------------------------------------------// PUBLIC DATA DEFINITIONS -------------------------------------------------int *TerrainTypes;struct{	char *name;	int type;} TerrainTypeDefs[] ={	{ "X_005", FLOOR_WATER },	{ "X_001", FLOOR_LAVA },	{ "X_009", FLOOR_SLUDGE },	{ "F_033", FLOOR_ICE },	{ "END", -1 }};// PRIVATE DATA DEFINITIONS ------------------------------------------------static struct{	line_t *line;	int lineTag;} TaggedLines[MAX_TAGGED_LINES];static int TaggedLineCount;mobj_t LavaInflictor;// CODE --------------------------------------------------------------------//==========================================================================//// P_InitLava////==========================================================================void P_InitLava(void){	memset(&LavaInflictor, 0, sizeof(mobj_t));	LavaInflictor.type = MT_CIRCLEFLAME;	LavaInflictor.flags2 = MF2_FIREDAMAGE|MF2_NODMGTHRUST;}//==========================================================================//// P_InitTerrainTypes////==========================================================================void P_InitTerrainTypes(void){	int i;	int lump;	int size;	size = (numflats+1)*sizeof(int);	TerrainTypes = Z_Malloc(size, PU_STATIC, 0);	memset(TerrainTypes, 0, size);	for(i = 0; TerrainTypeDefs[i].type != -1; i++)	{		lump = W_CheckNumForName(TerrainTypeDefs[i].name);		if(lump != -1)		{			TerrainTypes[lump-firstflat] = TerrainTypeDefs[i].type;		}	}}//==========================================================================//// getSide//// Will return a side_t* given the number of the current sector, the// line number, and the side (0/1) that you want.////==========================================================================/*side_t *getSide(int currentSector, int line, int side){	return &sides[ (sectors[currentSector].lines[line])->sidenum[side] ];}*///==========================================================================//// getSector//// Will return a sector_t* given the number of the current sector, the// line number, and the side (0/1) that you want.////==========================================================================/*sector_t *getSector(int currentSector, int line, int side){	return sides[ (sectors[currentSector].lines[line])->sidenum[side] ].sector;}*///==========================================================================//// twoSided//// Given the sector number and the line number, will tell you whether// the line is two-sided or not.////==========================================================================/*int     twoSided(int sector, int line){	return (sectors[sector].lines[line])->flags & ML_TWOSIDED;}*///==================================================================////      Return sector_t * of sector next to current. NULL if not two-sided line////==================================================================sector_t *getNextSector(line_t *line,sector_t *sec){	if (!(line->flags & ML_TWOSIDED))		return NULL;	if (line->frontsector == sec)		return line->backsector;	return line->frontsector;}//==================================================================////      FIND LOWEST FLOOR HEIGHT IN SURROUNDING SECTORS////==================================================================fixed_t P_FindLowestFloorSurrounding(sector_t *sec){	int                     i;	line_t          *check;	sector_t        *other;	fixed_t         floor = sec->floorheight;	for (i=0 ;i < sec->linecount ; i++)	{		check = sec->lines[i];		other = getNextSector(check,sec);		if (!other)			continue;		if (other->floorheight < floor)			floor = other->floorheight;	}	return floor;}//==================================================================////      FIND HIGHEST FLOOR HEIGHT IN SURROUNDING SECTORS////==================================================================fixed_t P_FindHighestFloorSurrounding(sector_t *sec){	int                     i;	line_t          *check;	sector_t        *other;	fixed_t         floor = -500*FRACUNIT;	for (i=0 ;i < sec->linecount ; i++)	{		check = sec->lines[i];		other = getNextSector(check,sec);		if (!other)			continue;		if (other->floorheight > floor)			floor = other->floorheight;	}	return floor;}//==================================================================////      FIND NEXT HIGHEST FLOOR IN SURROUNDING SECTORS////==================================================================fixed_t P_FindNextHighestFloor(sector_t *sec,int currentheight){	int                     i;	int                     h;	int                     min;	line_t          *check;	sector_t        *other;	fixed_t         height = currentheight;	fixed_t         heightlist[20];         // 20 adjoining sectors max!	for (i =0,h = 0 ;i < sec->linecount ; i++)	{		check = sec->lines[i];		other = getNextSector(check,sec);		if (!other)			continue;		if (other->floorheight > height)			heightlist[h++] = other->floorheight;	}	//	// Find lowest height in list	//	min = heightlist[0];	for (i = 1;i < h;i++)		if (heightlist[i] < min)			min = heightlist[i];	return min;}//==================================================================////      FIND LOWEST CEILING IN THE SURROUNDING SECTORS////==================================================================fixed_t P_FindLowestCeilingSurrounding(sector_t *sec){	int                     i;	line_t          *check;	sector_t        *other;	fixed_t         height = MAXINT;	for (i=0 ;i < sec->linecount ; i++)	{		check = sec->lines[i];		other = getNextSector(check,sec);		if (!other)			continue;		if (other->ceilingheight < height)			height = other->ceilingheight;	}	return height;}//==================================================================////      FIND HIGHEST CEILING IN THE SURROUNDING SECTORS////==================================================================fixed_t P_FindHighestCeilingSurrounding(sector_t *sec){	int     i;	line_t  *check;	sector_t        *other;	fixed_t height = 0;	for (i=0 ;i < sec->linecount ; i++)	{		check = sec->lines[i];		other = getNextSector(check,sec);		if (!other)			continue;		if (other->ceilingheight > height)			height = other->ceilingheight;	}	return height;}//==================================================================////      RETURN NEXT SECTOR # THAT LINE TAG REFERS TO////==================================================================/*int     P_FindSectorFromLineTag(line_t  *line,int start){	int     i;	for (i=start+1;i<numsectors;i++)		if (sectors[i].tag == line->arg1)			return i;	return -1;}*///=========================================================================//// P_FindSectorFromTag////=========================================================================int P_FindSectorFromTag(int tag, int start){	int i;		for(i = start+1; i < numsectors; i++)	{		if(sectors[i].tag == tag)		{			return i;		}	}	return -1;}//==================================================================////      Find minimum light from an adjacent sector////==================================================================/*int     P_FindMinSurroundingLight(sector_t *sector,int max){	int                     i;	int                     min;	line_t          *line;	sector_t        *check;	min = max;	for (i=0 ; i < sector->linecount ; i++)	{		line = sector->lines[i];		check = getNextSector(line,sector);		if (!check)			continue;		if (check->lightlevel < min)			min = check->lightlevel;	}	return min;}*///=========================================================================//// EV_SectorSoundChange////=========================================================================boolean EV_SectorSoundChange(byte *args){	int secNum;	boolean rtn;	if(!args[0])	{		return false;	}	secNum = -1;	rtn = false;	while((secNum = P_FindSectorFromTag(args[0], secNum)) >= 0)	{		sectors[secNum].seqType = args[1];		rtn = true;	}	return rtn;}//============================================================================//// CheckedLockedDoor////============================================================================static boolean CheckedLockedDoor(mobj_t *mo, byte lock){	extern char *TextKeyMessages[11];	char LockedBuffer[80];	if(!mo->player)	{		return false;	}	if(!lock)	{			return true;	}	if(!(mo->player->keys&(1<<(lock-1))))	{		sprintf(LockedBuffer, "YOU NEED THE %s\n", 			TextKeyMessages[lock-1]);		P_SetMessage(mo->player, LockedBuffer, true);		S_StartSound(mo, SFX_DOOR_LOCKED);		return false;	}	return true;}//==========================================================================//// EV_LineSearchForPuzzleItem////==========================================================================boolean EV_LineSearchForPuzzleItem(line_t *line, byte *args, mobj_t *mo){	player_t *player;	int i;	artitype_t type,arti;	if (!mo) return false;	player = mo->player;	if (!player) return false;	// Search player's inventory for puzzle items	for (i=0; i<player->artifactCount; i++)	{		arti = player->inventory[i].type;		type = arti - arti_firstpuzzitem;		if (type < 0) continue;		if (type == line->arg1)		{			// A puzzle item was found for the line			if (P_UseArtifact(player, arti))			{				// A puzzle item was found for the line				P_PlayerRemoveArtifact(player, i);				if(player == &players[consoleplayer])				{					if(arti < arti_firstpuzzitem)					{						S_StartSound(NULL, SFX_ARTIFACT_USE);					}					else					{						S_StartSound(NULL, SFX_PUZZLE_SUCCESS);					}					ArtifactFlash = 4;				}				return true;			}		}	}	return false;}/*==============================================================================							EVENTSEvents are operations triggered by using, crossing, or shooting special lines, or by timed thinkers==============================================================================*///============================================================================//// P_ExecuteLineSpecial////============================================================================boolean P_ExecuteLineSpecial(int special, byte *args, line_t *line, int side,	mobj_t *mo){	boolean buttonSuccess;	buttonSuccess = false;	switch(special)	{		case 1: // Poly Start Line			break;		case 2: // Poly Rotate Left			buttonSuccess = EV_RotatePoly(line, args, 1, false);			break;		case 3: // Poly Rotate Right			buttonSuccess = EV_RotatePoly(line, args, -1, false);			break;		case 4: // Poly Move			buttonSuccess = EV_MovePoly(line, args, false, false);			break;		case 5: // Poly Explicit Line:  Only used in initialization			break;		case 6: // Poly Move Times 8			buttonSuccess = EV_MovePoly(line, args, true, false);			break;		case 7: // Poly Door Swing			buttonSuccess = EV_OpenPolyDoor(line, args, PODOOR_SWING);			break;		case 8: // Poly Door Slide			buttonSuccess = EV_OpenPolyDoor(line, args, PODOOR_SLIDE);			break;		case 10: // Door Close			buttonSuccess = EV_DoDoor(line, args, DREV_CLOSE);			break;		case 11: // Door Open			if(!args[0])			{				buttonSuccess = EV_VerticalDoor(line, mo);			}			else			{				buttonSuccess = EV_DoDoor(line, args, DREV_OPEN);			}			break;		case 12: // Door Raise			if(!args[0])			{				buttonSuccess = EV_VerticalDoor(line, mo);			}			else			{				buttonSuccess = EV_DoDoor(line, args, DREV_NORMAL);			}			break;		case 13: // Door Locked_Raise			if(CheckedLockedDoor(mo, args[3]))			{				if(!args[0])				{					buttonSuccess = EV_VerticalDoor(line, mo);				}				else				{					buttonSuccess = EV_DoDoor(line, args, DREV_NORMAL);				}			}			break;		case 20: // Floor Lower by Value			buttonSuccess = EV_DoFloor(line, args, FLEV_LOWERFLOORBYVALUE);			break;		case 21: // Floor Lower to Lowest			buttonSuccess = EV_DoFloor(line, args, FLEV_LOWERFLOORTOLOWEST);			break;		case 22: // Floor Lower to Nearest			buttonSuccess = EV_DoFloor(line, args, FLEV_LOWERFLOOR);			break;		case 23: // Floor Raise by Value			buttonSuccess = EV_DoFloor(line, args, FLEV_RAISEFLOORBYVALUE);			break;		case 24: // Floor Raise to Highest			buttonSuccess = EV_DoFloor(line, args, FLEV_RAISEFLOOR);			break;		case 25: // Floor Raise to Nearest			buttonSuccess = EV_DoFloor(line, args, FLEV_RAISEFLOORTONEAREST);			break;		case 26: // Stairs Build Down Normal			buttonSuccess = EV_BuildStairs(line, args, -1, STAIRS_NORMAL);			break;		case 27: // Build Stairs Up Normal			buttonSuccess = EV_BuildStairs(line, args, 1, STAIRS_NORMAL);			break;		case 28: // Floor Raise and Crush			buttonSuccess = EV_DoFloor(line, args, FLEV_RAISEFLOORCRUSH);			break;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩成人综合在线一区二区| 日本欧美一区二区| 亚洲成人在线免费| 另类欧美日韩国产在线| 国产白丝精品91爽爽久久| 一本色道久久加勒比精品| 欧美精品一级二级| 国产亚洲自拍一区| 亚洲一区二区三区四区的| 黄色日韩三级电影| 91麻豆高清视频| 亚洲精品在线观看网站| 亚洲欧美一区二区三区国产精品 | 欧洲生活片亚洲生活在线观看| 欧美精品粉嫩高潮一区二区| 久久久久亚洲综合| 亚洲宅男天堂在线观看无病毒| 蜜臀av性久久久久蜜臀aⅴ流畅| 成人动漫一区二区| 日韩一区二区在线观看| 1024成人网色www| 韩日精品视频一区| 精品视频在线看| 国产精品人妖ts系列视频| 日韩精品福利网| 91丝袜美腿高跟国产极品老师| 精品va天堂亚洲国产| 一区二区三区中文字幕| 国产精品影视网| 欧美日韩国产另类一区| 亚洲欧洲成人自拍| 精品一区二区三区免费视频| 欧美午夜影院一区| 国产精品久久夜| 九色porny丨国产精品| 在线日韩一区二区| 国产精品美女www爽爽爽| 久久狠狠亚洲综合| 欧美高清性hdvideosex| 一区二区在线观看视频| 成人自拍视频在线| 亚洲精品一区二区三区香蕉| 亚洲成人自拍一区| 色综合久久综合网| 国产精品久久毛片av大全日韩| 久久精品国产99| 555www色欧美视频| 亚洲自拍都市欧美小说| 色婷婷久久综合| 亚洲图片欧美激情| 成人丝袜18视频在线观看| 精品av久久707| 精品一区二区免费看| 337p亚洲精品色噜噜噜| 日韩中文字幕区一区有砖一区| 色国产综合视频| 亚洲欧美日韩在线不卡| 不卡在线观看av| 国产精品久久久久天堂| 国产高清久久久| 国产欧美日韩不卡| 国产大陆亚洲精品国产| 久久午夜羞羞影院免费观看| 激情综合色丁香一区二区| 日韩免费观看高清完整版| 欧美aaaaa成人免费观看视频| 制服丝袜国产精品| 日本亚洲一区二区| 欧美一级片在线看| 蜜桃av一区二区三区电影| 91精品国产综合久久蜜臀| 日韩成人一级片| 91精品国产91热久久久做人人 | 日韩免费在线观看| 久久黄色级2电影| 久久新电视剧免费观看| 粉嫩绯色av一区二区在线观看| 久久久久高清精品| 成人在线视频一区| 《视频一区视频二区| 色婷婷久久久久swag精品| 一区二区三区鲁丝不卡| 欧美三级电影网| 裸体健美xxxx欧美裸体表演| 精品国产一二三区| 国产成人在线视频网站| 亚洲婷婷在线视频| 欧美视频完全免费看| 午夜精品久久久久久久99樱桃| 日韩网站在线看片你懂的| 国产一区欧美一区| 国产精品日韩成人| 欧美午夜电影网| 青青青爽久久午夜综合久久午夜| 26uuu亚洲| 不卡的看片网站| 亚洲一二三级电影| 欧美va天堂va视频va在线| 国产suv一区二区三区88区| 亚洲桃色在线一区| 欧美日本国产视频| 精品一区二区三区在线观看| 中文子幕无线码一区tr| 91国模大尺度私拍在线视频| 三级欧美韩日大片在线看| 久久影音资源网| 在线亚洲免费视频| 另类欧美日韩国产在线| 国产精品久久久久影视| 8x8x8国产精品| 成人深夜视频在线观看| 亚洲国产成人精品视频| 久久伊人中文字幕| 欧美综合欧美视频| 国产一区不卡精品| 亚洲专区一二三| 久久久久亚洲综合| 欧美色图片你懂的| 国产成人免费视| 视频一区在线播放| 中文字幕精品三区| 欧美乱熟臀69xxxxxx| 国产成人av电影在线| 亚洲成人先锋电影| 国产精品卡一卡二卡三| 欧美顶级少妇做爰| 91一区在线观看| 极品少妇xxxx精品少妇| 亚洲自拍偷拍麻豆| 久久久久久一级片| 5566中文字幕一区二区电影| 北条麻妃一区二区三区| 轻轻草成人在线| 亚洲综合色成人| 国产网站一区二区| 日韩三级视频在线观看| 一本色道久久加勒比精品| 久草精品在线观看| 亚洲成人av电影| 国产精品每日更新| 337p粉嫩大胆噜噜噜噜噜91av | 亚洲一区二区视频| 国产日韩欧美激情| 欧美一区二区三区四区视频 | 午夜精品久久久久久久久久久 | 欧美日韩一区视频| 成人免费视频app| 久久电影网电视剧免费观看| 亚洲一区二区三区四区不卡| 中文字幕一区二区三区视频 | 国产一区 二区 三区一级| 亚洲gay无套男同| 亚洲色图.com| 国产女人水真多18毛片18精品视频| 91精品国产乱码| 欧美另类z0zxhd电影| 日本乱人伦aⅴ精品| 国产91精品一区二区| 精一区二区三区| 秋霞午夜鲁丝一区二区老狼| 亚洲国产精品一区二区www在线| 国产精品天天摸av网| 久久午夜色播影院免费高清| 欧美一区二区三区爱爱| 欧美日韩一区在线观看| 欧美性生交片4| 日本精品视频一区二区| 99久久精品久久久久久清纯| 国产成人av福利| 成人综合婷婷国产精品久久 | 亚洲色图制服诱惑 | 在线区一区二视频| 日本精品裸体写真集在线观看| 91女神在线视频| av在线免费不卡| 不卡一区二区三区四区| av中文字幕亚洲| 91网站在线观看视频| 色婷婷av一区| 欧洲亚洲精品在线| 欧美视频在线不卡| 欧美丰满美乳xxx高潮www| 3751色影院一区二区三区| 日韩小视频在线观看专区| 日韩一区二区三区av| 精品日韩欧美在线| 精品国产一区二区三区不卡| 精品av综合导航| 中文字幕精品一区二区精品绿巨人| 欧美国产日韩亚洲一区| 国产精品久久久久天堂| 亚洲欧美日韩国产一区二区三区 | 欧美少妇性性性| 3atv在线一区二区三区| 日韩欧美的一区二区| 久久免费美女视频| 国产欧美一区二区精品婷婷| 欧美韩国日本不卡| 亚洲黄网站在线观看| 亚洲va韩国va欧美va|