亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
成人夜色视频网站在线观看| 国产一区二区三区观看| 欧美日韩一卡二卡三卡| 亚洲妇熟xx妇色黄| www日韩大片| 91黄色免费版| 国产福利一区二区三区视频| 亚洲成人在线网站| 国产精品免费网站在线观看| 日韩精品中文字幕一区二区三区| 欧美日韩日日骚| 日本道色综合久久| 国产一区二区三区香蕉| 亚洲高清视频在线| 一区二区三区在线免费观看| 国产欧美日韩在线观看| 精品入口麻豆88视频| 欧美伦理电影网| 欧美在线视频不卡| 成人午夜视频免费看| 床上的激情91.| 国产传媒欧美日韩成人| 美女视频网站久久| 亚洲欧美日韩一区二区 | 久久人人爽爽爽人久久久| 欧美一级二级在线观看| 日韩一区二区三区精品视频| 7777精品伊人久久久大香线蕉经典版下载| 一本到不卡免费一区二区| 国产69精品久久99不卡| 大陆成人av片| 91毛片在线观看| 成人午夜私人影院| 欧美亚洲综合久久| 在线播放中文一区| 欧美日本一区二区| 精品欧美一区二区三区精品久久| 日韩视频一区在线观看| 欧美电影一区二区| 久久天天做天天爱综合色| 国产亚洲欧美在线| 亚洲柠檬福利资源导航| 亚洲在线观看免费| 奇米777欧美一区二区| 成人亚洲一区二区一| 色伊人久久综合中文字幕| 欧美丝袜第三区| 久久久亚洲综合| 依依成人综合视频| 蜜桃免费网站一区二区三区| 久久66热偷产精品| 不卡的电视剧免费网站有什么| 91麻豆免费观看| 日韩亚洲欧美高清| 中文字幕第一区第二区| 天天综合网 天天综合色| 本田岬高潮一区二区三区| 69p69国产精品| 综合久久一区二区三区| 奇米777欧美一区二区| 91免费观看视频| 国产精品私房写真福利视频| 免费观看日韩av| 欧美剧在线免费观看网站 | 免费高清在线一区| 国内精品伊人久久久久av一坑| 色婷婷久久一区二区三区麻豆| 日本一区二区免费在线| 奇米色一区二区三区四区| 欧美日韩国产另类不卡| 亚洲三级小视频| 丝袜诱惑制服诱惑色一区在线观看 | 国产精品久久久久国产精品日日| 天天操天天综合网| 制服.丝袜.亚洲.中文.综合| 亚洲在线中文字幕| 欧美性生交片4| 秋霞电影一区二区| 欧美mv日韩mv国产网站app| 日本在线不卡视频| 欧美精品一区二区三| 国产自产高清不卡| 中文字幕第一页久久| 99精品在线观看视频| 夜夜精品视频一区二区 | 久久99精品久久久久久| 国产欧美中文在线| 一本一道久久a久久精品综合蜜臀| 亚洲一区在线播放| 精品1区2区在线观看| 不卡在线视频中文字幕| 亚洲自拍偷拍图区| 日韩一卡二卡三卡四卡| 国产成人aaa| 亚洲图片欧美色图| 久久精品视频免费| 色综合欧美在线视频区| 麻豆成人免费电影| 国产精品免费观看视频| 在线播放国产精品二区一二区四区| 日韩在线观看一区二区| 欧美激情一区二区三区四区| 欧美日韩一区精品| 成人性生交大片免费看在线播放| 午夜成人在线视频| 国产精品国产三级国产a| 欧美丝袜丝交足nylons图片| 首页欧美精品中文字幕| 日韩一区欧美二区| 奇米色一区二区| 国产一区不卡在线| 国产精一品亚洲二区在线视频| 韩国女主播一区| 波多野结衣中文字幕一区二区三区| 国产福利不卡视频| 成人精品国产福利| 91网址在线看| 国产激情一区二区三区四区| 五月天中文字幕一区二区| 亚洲视频狠狠干| 欧美激情一区二区在线| 久久久不卡网国产精品一区| 欧美videos中文字幕| 欧美岛国在线观看| 欧美不卡视频一区| 国产区在线观看成人精品| 精品理论电影在线观看 | 欧美国产成人精品| 欧美国产日韩一二三区| 中文字幕视频一区| 国产精品毛片久久久久久久| 中文字幕精品在线不卡| 国产精品美女久久久久aⅴ| 国产精品久久久久久妇女6080| 欧美国产综合一区二区| 亚洲精选视频在线| 亚洲成a人v欧美综合天堂| 免费成人在线播放| 成人污污视频在线观看| 欧美欧美午夜aⅴ在线观看| 欧美日韩精品一区二区三区四区 | 天天色综合成人网| 国产欧美日韩精品一区| 欧美性生活大片视频| 欧美另类高清zo欧美| thepron国产精品| caoporm超碰国产精品| 欧美在线观看视频在线| 日韩午夜电影av| 亚洲欧美中日韩| 国内精品免费**视频| 91理论电影在线观看| 欧美一二三区在线观看| 亚洲天堂免费在线观看视频| 蜜桃视频在线观看一区二区| www.日韩av| 久久免费看少妇高潮| 亚洲成av人片在线| av在线不卡电影| 国产三级精品在线| 日韩在线一区二区| 欧美系列一区二区| 日韩一区日韩二区| 久久99久久久久| 欧美久久一二区| 亚洲精品成人少妇| 91伊人久久大香线蕉| 久久综合九色综合欧美98| 日韩精品免费专区| 在线观看国产91| 亚洲制服欧美中文字幕中文字幕| 丁香激情综合五月| 国产午夜亚洲精品羞羞网站| 国精产品一区一区三区mba视频| 在线不卡中文字幕| 日本成人在线视频网站| 91精品麻豆日日躁夜夜躁| 亚洲电影一区二区三区| 色屁屁一区二区| 性久久久久久久| 欧美一级日韩免费不卡| 久久av老司机精品网站导航| 欧美精品一区二区精品网| 久久99日本精品| 日本一区二区视频在线| 99在线热播精品免费| 亚洲欧洲中文日韩久久av乱码| 欧美又粗又大又爽| 亚洲高清一区二区三区| 精品日韩在线一区| caoporn国产一区二区| 亚洲国产日韩av| 久久亚洲一级片| 99精品在线免费| 日本亚洲一区二区| 国产喷白浆一区二区三区| 99麻豆久久久国产精品免费优播| 一区二区三区免费在线观看| 欧美疯狂做受xxxx富婆| 成人午夜伦理影院|