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

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

?? p_mobj.c

?? 魔法師傳奇源代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
//**************************************************************************//**//** p_mobj.c : Heretic 2 : Raven Software, Corp.//**//** $RCSfile: p_mobj.c,v $//** $Revision: 1.133 $//** $Date: 96/01/12 12:31:43 $//** $Author: bgokey $//**//**************************************************************************// HEADER FILES ------------------------------------------------------------#include "h2def.h"#include "p_local.h"#include "sounds.h"#include "soundst.h"// MACROS ------------------------------------------------------------------#define MAX_TID_COUNT 200// TYPES -------------------------------------------------------------------// EXTERNAL FUNCTION PROTOTYPES --------------------------------------------void G_PlayerReborn(int player);void P_MarkAsLeaving(mobj_t *corpse);// PUBLIC FUNCTION PROTOTYPES ----------------------------------------------void P_SpawnMapThing(mapthing_t *mthing);// PRIVATE FUNCTION PROTOTYPES ---------------------------------------------static void PlayerLandedOnThing(mobj_t *mo, mobj_t *onmobj);// EXTERNAL DATA DECLARATIONS ----------------------------------------------extern mobj_t LavaInflictor;// PUBLIC DATA DEFINITIONS -------------------------------------------------mobjtype_t PuffType;mobj_t *MissileMobj;fixed_t FloatBobOffsets[64] ={	0, 51389, 102283, 152192,	200636, 247147, 291278, 332604,	370727, 405280, 435929, 462380,	484378, 501712, 514213, 521763,	524287, 521763, 514213, 501712,	484378, 462380, 435929, 405280,	370727, 332604, 291278, 247147,	200636, 152192, 102283, 51389,	-1, -51390, -102284, -152193,	-200637, -247148, -291279, -332605,	-370728, -405281, -435930, -462381,	-484380, -501713, -514215, -521764,	-524288, -521764, -514214, -501713,	-484379, -462381, -435930, -405280,	-370728, -332605, -291279, -247148,	-200637, -152193, -102284, -51389};// PRIVATE DATA DEFINITIONS ------------------------------------------------static int TIDList[MAX_TID_COUNT+1]; // +1 for termination markerstatic mobj_t *TIDMobj[MAX_TID_COUNT];// CODE --------------------------------------------------------------------//==========================================================================//// P_SetMobjState//// Returns true if the mobj is still present.////==========================================================================boolean P_SetMobjState(mobj_t *mobj, statenum_t state){	state_t *st;	if(state == S_NULL)	{ // Remove mobj		mobj->state = S_NULL;		P_RemoveMobj(mobj);		return(false);	}	st = &states[state];	mobj->state = st;	mobj->tics = st->tics;	mobj->sprite = st->sprite;	mobj->frame = st->frame;	if(st->action)	{ // Call action function		st->action(mobj);	}	return(true);}//==========================================================================//// P_SetMobjStateNF//// Same as P_SetMobjState, but does not call the state function.////==========================================================================boolean P_SetMobjStateNF(mobj_t *mobj, statenum_t state){	state_t *st;	if(state == S_NULL)	{ // Remove mobj		mobj->state = S_NULL;		P_RemoveMobj(mobj);		return(false);	}	st = &states[state];	mobj->state = st;	mobj->tics = st->tics;	mobj->sprite = st->sprite;	mobj->frame = st->frame;	return(true);}//----------------------------------------------------------------------------//// PROC P_ExplodeMissile////----------------------------------------------------------------------------void P_ExplodeMissile(mobj_t *mo){	mo->momx = mo->momy = mo->momz = 0;	P_SetMobjState(mo, mobjinfo[mo->type].deathstate);	//mo->tics -= P_Random()&3;	mo->flags &= ~MF_MISSILE;	switch(mo->type)	{		case MT_SORCBALL1:		case MT_SORCBALL2:		case MT_SORCBALL3:			S_StartSound(NULL, SFX_SORCERER_BIGBALLEXPLODE);			break;		case MT_SORCFX1:			S_StartSound(NULL, SFX_SORCERER_HEADSCREAM);			break;		default:			if(mo->info->deathsound)			{				S_StartSound(mo, mo->info->deathsound);			}			break;	}}//----------------------------------------------------------------------------//// PROC P_FloorBounceMissile////----------------------------------------------------------------------------void P_FloorBounceMissile(mobj_t *mo){	if(P_HitFloor(mo) >= FLOOR_LIQUID)	{		switch(mo->type)		{			case MT_SORCFX1:			case MT_SORCBALL1:			case MT_SORCBALL2:			case MT_SORCBALL3:				break;			default:				P_RemoveMobj(mo);				return;		}	}	switch(mo->type)	{		case MT_SORCFX1:			mo->momz = -mo->momz;		// no energy absorbed			break;		case MT_SGSHARD1:		case MT_SGSHARD2:		case MT_SGSHARD3:		case MT_SGSHARD4:		case MT_SGSHARD5:		case MT_SGSHARD6:		case MT_SGSHARD7:		case MT_SGSHARD8:		case MT_SGSHARD9:		case MT_SGSHARD0:			mo->momz = FixedMul(mo->momz, -0.3*FRACUNIT);			if(abs(mo->momz) < (FRACUNIT/2))			{				P_SetMobjState(mo, S_NULL);				return;			}			break;		default:			mo->momz = FixedMul(mo->momz, -0.7*FRACUNIT);			break;	}	mo->momx = 2*mo->momx/3;	mo->momy = 2*mo->momy/3;	if(mo->info->seesound)	{		switch(mo->type)		{			case MT_SORCBALL1:			case MT_SORCBALL2:			case MT_SORCBALL3:				if (!mo->args[0]) S_StartSound(mo, mo->info->seesound);				break;			default:				S_StartSound(mo, mo->info->seesound);				break;		}		S_StartSound(mo, mo->info->seesound);	}//	P_SetMobjState(mo, mobjinfo[mo->type].deathstate);}//----------------------------------------------------------------------------//// PROC P_ThrustMobj////----------------------------------------------------------------------------void P_ThrustMobj(mobj_t *mo, angle_t angle, fixed_t move){	angle >>= ANGLETOFINESHIFT;	mo->momx += FixedMul(move, finecosine[angle]);	mo->momy += FixedMul(move, finesine[angle]);}//----------------------------------------------------------------------------//// FUNC P_FaceMobj//// Returns 1 if 'source' needs to turn clockwise, or 0 if 'source' needs// to turn counter clockwise.  'delta' is set to the amount 'source'// needs to turn.////----------------------------------------------------------------------------int P_FaceMobj(mobj_t *source, mobj_t *target, angle_t *delta){	angle_t diff;	angle_t angle1;	angle_t angle2;	angle1 = source->angle;	angle2 = R_PointToAngle2(source->x, source->y, target->x, target->y);	if(angle2 > angle1)	{		diff = angle2-angle1;		if(diff > ANGLE_180)		{			*delta = ANGLE_MAX-diff;			return(0);		}		else		{			*delta = diff;			return(1);		}	}	else	{		diff = angle1-angle2;		if(diff > ANGLE_180)		{			*delta = ANGLE_MAX-diff;			return(1);		}		else		{			*delta = diff;			return(0);		}	}}//----------------------------------------------------------------------------////// The missile special1 field must be mobj_t *target.  Returns true if// target was tracked, false if not.////----------------------------------------------------------------------------boolean P_SeekerMissile(mobj_t *actor, angle_t thresh, angle_t turnMax){	int dir;	int dist;	angle_t delta;	angle_t angle;	mobj_t *target;	target = (mobj_t *)actor->special1;	if(target == NULL)	{		return(false);	}	if(!(target->flags&MF_SHOOTABLE))	{ // Target died		actor->special1 = 0;		return(false);	}	dir = P_FaceMobj(actor, target, &delta);	if(delta > thresh)	{		delta >>= 1;		if(delta > turnMax)		{			delta = turnMax;		}	}	if(dir)	{ // Turn clockwise		actor->angle += delta;	}	else	{ // Turn counter clockwise		actor->angle -= delta;	}	angle = actor->angle>>ANGLETOFINESHIFT;	actor->momx = FixedMul(actor->info->speed, finecosine[angle]);	actor->momy = FixedMul(actor->info->speed, finesine[angle]);	if(actor->z+actor->height < target->z 		|| target->z+target->height < actor->z)	{ // Need to seek vertically		dist = P_AproxDistance(target->x-actor->x, target->y-actor->y);		dist = dist/actor->info->speed;		if(dist < 1)		{			dist = 1;		}		actor->momz = (target->z+(target->height>>1)			-(actor->z+(actor->height>>1)))/dist;	}	return(true);}//----------------------------------------------------------------------------//// PROC P_XYMovement////----------------------------------------------------------------------------#define STOPSPEED			0x1000#define FRICTION_NORMAL		0xe800#define FRICTION_LOW		0xf900#define FRICTION_FLY		0xeb00void P_XYMovement(mobj_t *mo){	fixed_t ptryx, ptryy;	player_t *player;	fixed_t xmove, ymove;	int special;	angle_t angle;	static int windTab[3] = {2048*5, 2048*10, 2048*25};	if(!mo->momx && !mo->momy)	{		if(mo->flags&MF_SKULLFLY)		{ // A flying mobj slammed into something			mo->flags &= ~MF_SKULLFLY;			mo->momx = mo->momy = mo->momz = 0;			P_SetMobjState(mo, mo->info->seestate);		}		return;	}	special = mo->subsector->sector->special;	if(mo->flags2&MF2_WINDTHRUST)	{		switch(special)		{			case 40: case 41: case 42: // Wind_East				P_ThrustMobj(mo, 0, windTab[special-40]);				break;			case 43: case 44: case 45: // Wind_North				P_ThrustMobj(mo, ANG90, windTab[special-43]);				break;			case 46: case 47: case 48: // Wind_South				P_ThrustMobj(mo, ANG270, windTab[special-46]);				break;			case 49: case 50: case 51: // Wind_West				P_ThrustMobj(mo, ANG180, windTab[special-49]);				break;		}	}	player = mo->player;	if(mo->momx > MAXMOVE)	{		mo->momx = MAXMOVE;	}	else if(mo->momx < -MAXMOVE)	{		mo->momx = -MAXMOVE;	}	if(mo->momy > MAXMOVE)	{		mo->momy = MAXMOVE;	}	else if(mo->momy < -MAXMOVE)	{		mo->momy = -MAXMOVE;	}	xmove = mo->momx;	ymove = mo->momy;	do	{		if(xmove > MAXMOVE/2 || ymove > MAXMOVE/2)		{			ptryx = mo->x+xmove/2;			ptryy = mo->y+ymove/2;			xmove >>= 1;			ymove >>= 1;		}		else		{			ptryx = mo->x + xmove;			ptryy = mo->y + ymove;			xmove = ymove = 0;		}		if(!P_TryMove(mo, ptryx, ptryy))		{ // Blocked move			if(mo->flags2&MF2_SLIDE)			{ // Try to slide along it				if(BlockingMobj == NULL)				{ // Slide against wall					P_SlideMove(mo);				}				else				{ // Slide against mobj					//if(P_TryMove(mo, mo->x, mo->y+mo->momy))					if(P_TryMove(mo, mo->x, ptryy))					{						mo->momx = 0;					}					//else if(P_TryMove(mo, mo->x+mo->momx, mo->y))					else if(P_TryMove(mo, ptryx, mo->y))					{						mo->momy = 0;					}					else					{						mo->momx = mo->momy = 0;					}				}			}			else if(mo->flags&MF_MISSILE)			{ 				if(mo->flags2&MF2_FLOORBOUNCE)				{					if(BlockingMobj)					{						if ((BlockingMobj->flags2&MF2_REFLECTIVE) ||							((!BlockingMobj->player) &&							(!(BlockingMobj->flags&MF_COUNTKILL))))						{							fixed_t speed;								angle = R_PointToAngle2(BlockingMobj->x,								BlockingMobj->y, mo->x, mo->y)								+ANGLE_1*((P_Random()%16)-8);							speed = P_AproxDistance(mo->momx, mo->momy);							speed = FixedMul(speed, 0.75*FRACUNIT);							mo->angle = angle;							angle >>= ANGLETOFINESHIFT;							mo->momx = FixedMul(speed, finecosine[angle]);							mo->momy = FixedMul(speed, finesine[angle]);							if(mo->info->seesound)							{								S_StartSound(mo, mo->info->seesound);							}							return;						}						else						{ // Struck a player/creature 							P_ExplodeMissile(mo);						}					}					else					{ // Struck a wall						P_BounceWall(mo);						switch(mo->type)						{							case MT_SORCBALL1:							case MT_SORCBALL2:							case MT_SORCBALL3:							case MT_SORCFX1:								break;							default:								if(mo->info->seesound)								{									S_StartSound(mo, mo->info->seesound);								}								break;						}						return;					}					}				if(BlockingMobj &&					(BlockingMobj->flags2 & MF2_REFLECTIVE))				{					angle = R_PointToAngle2(BlockingMobj->x,													BlockingMobj->y,													mo->x, mo->y);					// Change angle for delflection/reflection					switch(BlockingMobj->type)					{						case MT_CENTAUR:						case MT_CENTAURLEADER:							if ( abs(angle-BlockingMobj->angle)>>24 > 45)								goto explode;							if (mo->type == MT_HOLY_FX)								goto explode;								// Drop through to sorcerer full reflection						case MT_SORCBOSS:							// Deflection							if (P_Random()<128)								angle += ANGLE_45;							else								angle -= ANGLE_45;							break;						default:							// Reflection							angle += ANGLE_1 * ((P_Random()%16)-8);							break;					}					// Reflect the missile along angle					mo->angle = angle;					angle >>= ANGLETOFINESHIFT;					mo->momx = FixedMul(mo->info->speed>>1, finecosine[angle]);					mo->momy = FixedMul(mo->info->speed>>1, finesine[angle]);//					mo->momz = -mo->momz;					if (mo->flags2 & MF2_SEEKERMISSILE)					{						mo->special1 = (int)(mo->target);					}					mo->target = BlockingMobj;					return;				}explode:				// Explode a missile				if(ceilingline && ceilingline->backsector					&& ceilingline->backsector->ceilingpic == skyflatnum)				{ // Hack to prevent missiles exploding against the sky					if(mo->type == MT_BLOODYSKULL)					{						mo->momx = mo->momy = 0;						mo->momz = -FRACUNIT;					}					else if(mo->type == MT_HOLY_FX)					{						P_ExplodeMissile(mo);					}					else					{						P_RemoveMobj(mo);					}					return;				}				P_ExplodeMissile(mo);			}			//else if(mo->info->crashstate)			//{			//	mo->momx = mo->momy = 0;			//	P_SetMobjState(mo, mo->info->crashstate);			//	return;			//}			else			{				mo->momx = mo->momy = 0;			}		}	} while(xmove || ymove);	// Friction	if(player && player->cheats&CF_NOMOMENTUM)	{ // Debug option for no sliding at all		mo->momx = mo->momy = 0;		return;	}	if(mo->flags&(MF_MISSILE|MF_SKULLFLY))	{ // No friction for missiles		return;	}	if(mo->z > mo->floorz && !(mo->flags2&MF2_FLY) && !(mo->flags2&MF2_ONMOBJ))	{ // No friction when falling		if (mo->type != MT_BLASTEFFECT)		return;	}	if(mo->flags&MF_CORPSE)	{ // Don't stop sliding if halfway off a step with some momentum		if(mo->momx > FRACUNIT/4 || mo->momx < -FRACUNIT/4			|| mo->momy > FRACUNIT/4 || mo->momy < -FRACUNIT/4)

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产肉丝袜一区二区| 97久久精品人人做人人爽| 亚洲午夜久久久| 一区二区三区中文字幕精品精品 | 大陆成人av片| 精品一区二区免费| 美女视频黄 久久| 美腿丝袜亚洲一区| 经典三级在线一区| 国产一区视频网站| 成人午夜激情片| av动漫一区二区| 色噜噜久久综合| 欧美日韩五月天| 91精品国产综合久久久蜜臀图片| 欧美日韩不卡一区| 日韩欧美一级在线播放| 日韩欧美美女一区二区三区| 精品免费一区二区三区| 精品美女在线播放| 欧美一级一区二区| 精品剧情在线观看| 在线免费一区三区| 在线视频欧美精品| 777午夜精品免费视频| 欧美伊人久久久久久久久影院 | 欧美精品高清视频| 在线不卡一区二区| 94-欧美-setu| 国产成人av在线影院| 成人一区二区三区视频在线观看 | 中文字幕的久久| 一区二区三区四区蜜桃| 亚洲精品第一国产综合野| 亚洲成av人片| 极品少妇xxxx偷拍精品少妇| 成人精品亚洲人成在线| 波多野洁衣一区| 欧美系列亚洲系列| 久久新电视剧免费观看| 欧美激情一区二区在线| 午夜精品爽啪视频| 国产精品一区二区不卡| av不卡在线播放| 欧美www视频| 亚洲韩国精品一区| 成人免费黄色大片| 日韩亚洲国产中文字幕欧美| 国产精品久久久久久亚洲伦| 免费欧美高清视频| 91首页免费视频| 久久五月婷婷丁香社区| 亚洲高清免费观看| 国产真实乱偷精品视频免| 成人精品国产免费网站| 欧美一卡二卡在线观看| 亚洲男人电影天堂| 韩国欧美国产1区| 欧美三级视频在线| 亚洲美女在线国产| 成人综合激情网| 日韩欧美国产一区二区在线播放| 亚洲精品视频在线| 久草精品在线观看| 色8久久精品久久久久久蜜| 久久午夜电影网| 美国毛片一区二区| 欧美精品久久久久久久久老牛影院| 中文字幕一区二区在线观看 | 国产精品传媒在线| 国产乱淫av一区二区三区| 666欧美在线视频| 亚洲国产日韩综合久久精品| 91在线码无精品| 国产午夜精品美女毛片视频| 免费在线观看精品| 欧美一区二区三区日韩| 亚洲综合在线视频| 日本久久一区二区| 一区二区三区在线免费观看| 国产老女人精品毛片久久| 在线综合视频播放| 婷婷成人综合网| 欧美区视频在线观看| 亚洲激情综合网| 欧洲精品一区二区| 肉丝袜脚交视频一区二区| 欧美性videosxxxxx| 亚洲午夜影视影院在线观看| 91精品福利在线| 亚洲成人三级小说| 在线播放视频一区| 日韩影视精彩在线| 精品久久久久久久一区二区蜜臀| 精品一二三四在线| 国产欧美日韩在线| 91丨九色丨尤物| 亚洲一区在线视频观看| 欧美日韩成人在线| 激情欧美一区二区| 中文乱码免费一区二区| 色哟哟一区二区三区| 午夜精品福利一区二区三区蜜桃| 欧美一区二区三区视频免费播放| 美国精品在线观看| 国产精品久久久久久久蜜臀| 日本精品一区二区三区高清| 亚洲一二三四区| 欧美一区二区免费观在线| 男女男精品视频| 精品国产髙清在线看国产毛片| 国产精品亚洲成人| 亚洲激情中文1区| 在线播放中文一区| 国产在线国偷精品产拍免费yy| 国产精品久久久久国产精品日日| 欧美最猛黑人xxxxx猛交| 麻豆一区二区在线| 亚洲免费大片在线观看| 日韩欧美第一区| 91丝袜国产在线播放| 亚洲国产cao| 久久免费午夜影院| 欧美午夜不卡视频| 成人av在线一区二区三区| 亚洲成人av一区二区| 久久久亚洲综合| 欧美日韩一区中文字幕| 国产成人在线视频免费播放| 午夜精品aaa| 国产精品乱码一区二区三区软件| 欧美一区二区三区男人的天堂| 成人性色生活片免费看爆迷你毛片| 亚洲成av人综合在线观看| 中文字幕精品一区二区精品绿巨人| 欧美撒尿777hd撒尿| av动漫一区二区| 国产精品一区在线观看乱码| 五月天激情综合| 亚洲精品伦理在线| 国产精品天美传媒沈樵| 精品少妇一区二区三区免费观看| 欧美视频完全免费看| 99精品久久99久久久久| 激情都市一区二区| 亚洲成人动漫av| 精品国产乱码久久久久久蜜臀| 亚洲另类在线制服丝袜| 91免费国产在线观看| 美女高潮久久久| 亚洲精品写真福利| 久久婷婷国产综合国色天香| 在线免费精品视频| 国产黑丝在线一区二区三区| 午夜视频一区二区| 亚洲国产精品t66y| 欧美精品aⅴ在线视频| 亚洲欧美二区三区| 欧美精品久久天天躁| 开心九九激情九九欧美日韩精美视频电影| 久久精品人人做人人综合 | 欧美sm美女调教| 91亚洲精品久久久蜜桃网站| 韩国女主播一区| 天天影视网天天综合色在线播放 | 一区二区三区中文在线| 精品久久五月天| 欧美一区二区视频网站| 日韩视频免费观看高清在线视频| 99精品久久免费看蜜臀剧情介绍| 看电视剧不卡顿的网站| 国产黄人亚洲片| 国产久卡久卡久卡久卡视频精品| 国产成人免费视频一区| 狠狠色丁香婷婷综合久久片| 26uuu亚洲综合色欧美| 久久一区二区三区四区| 日韩一二三四区| 国产婷婷色一区二区三区四区 | 国产精品短视频| 国产精品国产三级国产普通话蜜臀 | 亚洲三级在线看| 午夜在线电影亚洲一区| 夜夜揉揉日日人人青青一国产精品| 2020日本不卡一区二区视频| 国产夜色精品一区二区av| 久久久精品欧美丰满| 精品久久人人做人人爽| 在线欧美小视频| 日韩欧美精品在线视频| 精品国产乱码久久| 亚洲天堂av一区| 一区二区三区四区视频精品免费 | 成熟亚洲日本毛茸茸凸凹| 天天操天天色综合| 国产精品羞羞答答xxdd| 粉嫩久久99精品久久久久久夜 | 美国三级日本三级久久99| 99国产精品国产精品久久| 日本久久精品电影|