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

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

?? p_enemy.c

?? 魔法師傳奇源代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
	// Missile attack	if (actor->info->missilestate && P_CheckMissileRange(actor))	{		P_SetMobjState (actor, actor->info->missilestate);		return;	}	// chase towards target	if (!P_Move(actor))	{		P_NewChaseDir(actor);	}	// Active sound	if(actor->info->activesound && P_Random() < 6)	{		S_StartSound(actor, actor->info->activesound);	}}//----------------------------------------------------------------------------//// PROC A_MinotaurAtk1//// Melee attack.////----------------------------------------------------------------------------void A_MinotaurAtk1(mobj_t *actor){	if (!actor->target) return;	S_StartSound(actor, SFX_MAULATOR_HAMMER_SWING);	if(P_CheckMeleeRange(actor))	{		P_DamageMobj(actor->target, actor, actor, HITDICE(4));	}}//----------------------------------------------------------------------------//// PROC A_MinotaurDecide//// Choose a missile attack.////----------------------------------------------------------------------------#define MNTR_CHARGE_SPEED (23*FRACUNIT)void A_MinotaurDecide(mobj_t *actor){	angle_t angle;	mobj_t *target = actor->target;	int dist;	if (!target) return;	dist = P_AproxDistance(actor->x-target->x, actor->y-target->y);	if(target->z+target->height > actor->z		&& target->z+target->height < actor->z+actor->height		&& dist < 16*64*FRACUNIT		&& dist > 1*64*FRACUNIT		&& P_Random() < 230)	{ // Charge attack		// Don't call the state function right away		P_SetMobjStateNF(actor, S_MNTR_ATK4_1);		actor->flags |= MF_SKULLFLY;		A_FaceTarget(actor);		angle = actor->angle>>ANGLETOFINESHIFT;		actor->momx = FixedMul(MNTR_CHARGE_SPEED, finecosine[angle]);		actor->momy = FixedMul(MNTR_CHARGE_SPEED, finesine[angle]);		actor->args[4] = 35/2; // Charge duration	}	else if(target->z == target->floorz		&& dist < 9*64*FRACUNIT		&& P_Random() < 100)	{ // Floor fire attack		P_SetMobjState(actor, S_MNTR_ATK3_1);		actor->special2 = 0;	}	else	{ // Swing attack		A_FaceTarget(actor);		// Don't need to call P_SetMobjState because the current state		// falls through to the swing attack	}}//----------------------------------------------------------------------------//// PROC A_MinotaurCharge////----------------------------------------------------------------------------void A_MinotaurCharge(mobj_t *actor){	mobj_t *puff;	if (!actor->target) return;	if(actor->args[4] > 0)	{		puff = P_SpawnMobj(actor->x, actor->y, actor->z, MT_PUNCHPUFF);		puff->momz = 2*FRACUNIT;		actor->args[4]--;	}	else	{		actor->flags &= ~MF_SKULLFLY;		P_SetMobjState(actor, actor->info->seestate);	}}//----------------------------------------------------------------------------//// PROC A_MinotaurAtk2//// Swing attack.////----------------------------------------------------------------------------void A_MinotaurAtk2(mobj_t *actor){	mobj_t *mo;	angle_t angle;	fixed_t momz;	if(!actor->target) return;	S_StartSound(actor, SFX_MAULATOR_HAMMER_SWING);	if(P_CheckMeleeRange(actor))	{		P_DamageMobj(actor->target, actor, actor, HITDICE(3));		return;	}	mo = P_SpawnMissile(actor, actor->target, MT_MNTRFX1);	if(mo)	{		//S_StartSound(mo, sfx_minat2);		momz = mo->momz;		angle = mo->angle;		P_SpawnMissileAngle(actor, MT_MNTRFX1, angle-(ANG45/8), momz);		P_SpawnMissileAngle(actor, MT_MNTRFX1, angle+(ANG45/8), momz);		P_SpawnMissileAngle(actor, MT_MNTRFX1, angle-(ANG45/16), momz);		P_SpawnMissileAngle(actor, MT_MNTRFX1, angle+(ANG45/16), momz);	}}//----------------------------------------------------------------------------//// PROC A_MinotaurAtk3//// Floor fire attack.////----------------------------------------------------------------------------void A_MinotaurAtk3(mobj_t *actor){	mobj_t *mo;	player_t *player;	if(!actor->target)	{		return;	}	if(P_CheckMeleeRange(actor))	{		P_DamageMobj(actor->target, actor, actor, HITDICE(3));		if((player = actor->target->player) != NULL)		{ // Squish the player			player->deltaviewheight = -16*FRACUNIT;		}	}	else	{		mo = P_SpawnMissile(actor, actor->target, MT_MNTRFX2);		if(mo != NULL)		{			S_StartSound(mo, SFX_MAULATOR_HAMMER_HIT);		}	}	if(P_Random() < 192 && actor->special2 == 0)	{		P_SetMobjState(actor, S_MNTR_ATK3_4);		actor->special2 = 1;	}}//----------------------------------------------------------------------------//// PROC A_MntrFloorFire////----------------------------------------------------------------------------void A_MntrFloorFire(mobj_t *actor){	mobj_t *mo;	actor->z = actor->floorz;	mo = P_SpawnMobj(actor->x+((P_Random()-P_Random())<<10),		actor->y+((P_Random()-P_Random())<<10), ONFLOORZ, MT_MNTRFX3);	mo->target = actor->target;	mo->momx = 1; // Force block checking	P_CheckMissileSpawn(mo);}//----------------------------------------------------------------------------//// PROC A_Scream////----------------------------------------------------------------------------void A_Scream(mobj_t *actor){	int sound;	S_StopSound(actor);	if(actor->player)	{		if(actor->player->morphTics)		{			S_StartSound(actor, actor->info->deathsound);		}		else		{			// Handle the different player death screams			if(actor->momz <= -39*FRACUNIT)			{ // Falling splat				sound = SFX_PLAYER_FALLING_SPLAT;			}			else if(actor->health > -50)			{ // Normal death sound				switch(actor->player->class)				{					case PCLASS_FIGHTER:						sound = SFX_PLAYER_FIGHTER_NORMAL_DEATH;						break;					case PCLASS_CLERIC:						sound = SFX_PLAYER_CLERIC_NORMAL_DEATH;						break;					case PCLASS_MAGE:						sound = SFX_PLAYER_MAGE_NORMAL_DEATH;						break;					default:						sound = SFX_NONE;						break;				}			}			else if(actor->health > -100)			{ // Crazy death sound				switch(actor->player->class)				{					case PCLASS_FIGHTER:						sound = SFX_PLAYER_FIGHTER_CRAZY_DEATH;						break;					case PCLASS_CLERIC:						sound = SFX_PLAYER_CLERIC_CRAZY_DEATH;						break;					case PCLASS_MAGE:						sound = SFX_PLAYER_MAGE_CRAZY_DEATH;						break;					default:						sound = SFX_NONE;						break;				}			}			else			{ // Extreme death sound				switch(actor->player->class)				{					case PCLASS_FIGHTER:						sound = SFX_PLAYER_FIGHTER_EXTREME1_DEATH;						break;					case PCLASS_CLERIC:						sound = SFX_PLAYER_CLERIC_EXTREME1_DEATH;						break;					case PCLASS_MAGE:						sound = SFX_PLAYER_MAGE_EXTREME1_DEATH;						break;					default:						sound = SFX_NONE;						break;				}				sound += P_Random()%3; // Three different extreme deaths			}			S_StartSound(actor, sound);		}	}	else	{		S_StartSound(actor, actor->info->deathsound);	}}//---------------------------------------------------------------------------//// PROC P_DropItem////---------------------------------------------------------------------------/*void P_DropItem(mobj_t *source, mobjtype_t type, int special, int chance){	mobj_t *mo;	if(P_Random() > chance)	{		return;	}	mo = P_SpawnMobj(source->x, source->y,		source->z+(source->height>>1), type);	mo->momx = (P_Random()-P_Random())<<8;	mo->momy = (P_Random()-P_Random())<<8;	mo->momz = FRACUNIT*5+(P_Random()<<10);	mo->flags2 |= MF2_DROPPED;	mo->health = special;}*///----------------------------------------------------------------------------//// PROC A_NoBlocking////----------------------------------------------------------------------------void A_NoBlocking(mobj_t *actor){	actor->flags &= ~MF_SOLID;	// Check for monsters dropping things/*	switch(actor->type)	{		// Add the monster dropped items here		case MT_MUMMYLEADERGHOST:			P_DropItem(actor, MT_AMGWNDWIMPY, 3, 84);			break;		default:			break;	}*/}//----------------------------------------------------------------------------//// PROC A_Explode//// Handles a bunch of exploding things.////----------------------------------------------------------------------------void A_Explode(mobj_t *actor){	int damage;	int distance;	boolean damageSelf;	damage = 128;	distance = 128;	damageSelf = true;	switch(actor->type)	{		case MT_FIREBOMB: // Time Bombs			actor->z += 32*FRACUNIT;			actor->flags &= ~MF_SHADOW;			break;		case MT_MNTRFX2: // Minotaur floor fire			damage = 24;			break;		case MT_BISHOP: // Bishop radius death			damage = 25+(P_Random()&15);			break;		case MT_HAMMER_MISSILE: // Fighter Hammer			damage = 128;			damageSelf = false;			break;		case MT_FSWORD_MISSILE: // Fighter Runesword			damage = 64;			damageSelf = false;			break;		case MT_CIRCLEFLAME: // Cleric Flame secondary flames			damage = 20;			damageSelf = false;			break;		case MT_SORCBALL1: 	// Sorcerer balls		case MT_SORCBALL2:		case MT_SORCBALL3:			distance = 255;			damage = 255;			actor->args[0] = 1;		// don't play bounce			break;		case MT_SORCFX1: 	// Sorcerer spell 1			damage = 30;			break;		case MT_SORCFX4: 	// Sorcerer spell 4			damage = 20;			break;		case MT_TREEDESTRUCTIBLE:			damage = 10;			break;		case MT_DRAGON_FX2:			damage = 80;			damageSelf = false;			break;		case MT_MSTAFF_FX:			damage = 64;			distance = 192;			damageSelf = false;			break;		case MT_MSTAFF_FX2:			damage = 80;			distance = 192;			damageSelf = false;			break;		case MT_POISONCLOUD:			damage = 4;			distance = 40;			break;		case MT_ZXMAS_TREE:		case MT_ZSHRUB2:			damage = 30;			distance = 64;			break;		default:			break;	}	P_RadiusAttack(actor, actor->target, damage, distance, damageSelf);	if(actor->z <= actor->floorz+(distance<<FRACBITS)		&& actor->type != MT_POISONCLOUD)	{ 		P_HitFloor(actor);	}}//----------------------------------------------------------------------------//// PROC P_Massacre//// Kills all monsters.////----------------------------------------------------------------------------int P_Massacre(void){	int count;	mobj_t *mo;	thinker_t *think;	count = 0;	for(think = thinkercap.next; think != &thinkercap;		think = think->next)	{		if(think->function != P_MobjThinker)		{ // Not a mobj thinker			continue;		}		mo = (mobj_t *)think;		if((mo->flags&MF_COUNTKILL) && (mo->health > 0))		{			mo->flags2 &= ~(MF2_NONSHOOTABLE+MF2_INVULNERABLE);			mo->flags |= MF_SHOOTABLE;			P_DamageMobj(mo, NULL, NULL, 10000);			count++;		}	}	return count;}//----------------------------------------------------------------------------//// PROC A_SkullPop////----------------------------------------------------------------------------void A_SkullPop(mobj_t *actor){	mobj_t *mo;	player_t *player;	if(!actor->player)	{		return;	}	actor->flags &= ~MF_SOLID;	mo = P_SpawnMobj(actor->x, actor->y, actor->z+48*FRACUNIT,		MT_BLOODYSKULL);	//mo->target = actor;	mo->momx = (P_Random()-P_Random())<<9;	mo->momy = (P_Random()-P_Random())<<9;	mo->momz = FRACUNIT*2+(P_Random()<<6);	// Attach player mobj to bloody skull	player = actor->player;	actor->player = NULL;	actor->special1 = player->class;	mo->player = player;	mo->health = actor->health;	mo->angle = actor->angle;	player->mo = mo;	player->lookdir = 0;	player->damagecount = 32;}//----------------------------------------------------------------------------//// PROC A_CheckSkullFloor////----------------------------------------------------------------------------void A_CheckSkullFloor(mobj_t *actor){	if(actor->z <= actor->floorz)	{		P_SetMobjState(actor, S_BLOODYSKULLX1);		S_StartSound(actor, SFX_DRIP);	}}//----------------------------------------------------------------------------//// PROC A_CheckSkullDone////----------------------------------------------------------------------------void A_CheckSkullDone(mobj_t *actor){	if(actor->special2 == 666)	{		P_SetMobjState(actor, S_BLOODYSKULLX2);	}}//----------------------------------------------------------------------------//// PROC A_CheckBurnGone////----------------------------------------------------------------------------void A_CheckBurnGone(mobj_t *actor){	if(actor->special2 == 666)	{		P_SetMobjState(actor, S_PLAY_FDTH20);	}}//----------------------------------------------------------------------------//// PROC A_FreeTargMobj////----------------------------------------------------------------------------void A_FreeTargMobj(mobj_t *mo){	mo->momx = mo->momy = mo->momz = 0;	mo->z = mo->ceilingz+4*FRACUNIT;	mo->flags &= ~(MF_SHOOTABLE|MF_FLOAT|MF_SKULLFLY|MF_SOLID|MF_COUNTKILL);	mo->flags |= MF_CORPSE|MF_DROPOFF|MF_NOGRAVITY;	mo->flags2 &= ~(MF2_PASSMOBJ|MF2_LOGRAV);	mo->flags2 |= MF2_DONTDRAW;	mo->player = NULL;	mo->health = -1000;		// Don't resurrect}//----------------------------------------------------------------------------//// CorpseQueue Routines////----------------------------------------------------------------------------// Corpse queue for monsters - this should be saved out#define CORPSEQUEUESIZE	64mobj_t *corpseQueue[CORPSEQUEUESIZE];int corpseQueueSlot;// throw another corpse on the queuevoid A_QueueCorpse(mobj_t *actor){	mobj_t *corpse;	if(corpseQueueSlot >= CORPSEQUEUESIZE)	{ // Too many corpses - remove an old one		corpse = corpseQueue[corpseQueueSlot%CORPSEQUEUESIZE];		if (corpse) P_RemoveMobj(corpse);	}	corpseQueue[corpseQueueSlot%CORPSEQUEUESIZE] = actor;	corpseQueueSlot++;}// Remove a mobj from the queue (for resurrection)void A_DeQueueCorpse(mobj_t *actor){	int slot;	for (slot=0; slot<CORPSEQUEUESIZE; slot++)	{		if (corpseQueue[slot] == actor)		{			corpseQueue[slot] = NULL;			break;		}	}}void P_InitCreatureCorpseQueue(boolean corpseScan){	thinker_t *think;	mobj_t *mo;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲一区二区三区| 色屁屁一区二区| 精品久久久久久久久久久久久久久 | 国产老妇另类xxxxx| 日韩你懂的在线观看| 国产呦精品一区二区三区网站| 久久久99精品免费观看| 国产精品一二三四| 中文字幕欧美激情一区| 91年精品国产| 亚洲va在线va天堂| 日韩一本二本av| 国产成人精品午夜视频免费| 亚洲色图另类专区| 欧美无人高清视频在线观看| 日本va欧美va瓶| 国产日韩欧美高清| 91色.com| 日本人妖一区二区| 久久精品一区蜜桃臀影院| www.欧美精品一二区| 亚洲福利视频一区| 久久女同互慰一区二区三区| 波多野结衣的一区二区三区| 亚洲激情图片qvod| 日韩久久久久久| 91麻豆swag| 久久99日本精品| 综合中文字幕亚洲| 91精品国产一区二区| 成人免费av在线| 五月天久久比比资源色| 国产日韩精品久久久| 欧美三级电影网| 国产风韵犹存在线视精品| 亚洲一区在线观看免费 | 日韩免费电影一区| 国产精品一区免费视频| 亚洲自拍偷拍九九九| 精品乱人伦一区二区三区| 91色九色蝌蚪| 国产成人亚洲综合a∨婷婷| 亚洲一区二区三区视频在线| 久久精品视频在线免费观看| 欧美日韩国产a| 99久久久精品免费观看国产蜜| 日韩电影在线一区| 亚洲黄色录像片| 久久精品人人做人人爽97| 欧美日韩精品一区二区三区| 成人av资源站| 国产原创一区二区三区| 日韩高清一区在线| 亚洲在线成人精品| 国产精品成人午夜| 久久综合狠狠综合久久激情| 欧美日韩一区二区三区高清 | 亚洲精品美国一| 久久精品水蜜桃av综合天堂| 欧美一区二区黄| 欧美日韩亚州综合| 在线亚洲一区二区| av不卡免费在线观看| 成人污视频在线观看| 激情六月婷婷综合| 蜜桃av一区二区在线观看 | 亚洲欧洲成人自拍| 国产三级精品视频| 久久免费看少妇高潮| 日韩欧美国产午夜精品| 欧美日韩激情在线| 欧美性猛交xxxx乱大交退制版| 91色porny| 91视频在线看| 91小视频免费观看| av男人天堂一区| 成人性生交大片免费| 国产69精品久久久久毛片| 国产麻豆一精品一av一免费 | 日韩黄色免费电影| 亚洲国产wwwccc36天堂| 亚洲国产毛片aaaaa无费看| 亚洲综合视频在线| 亚洲图片欧美色图| 亚洲一区二区在线免费观看视频 | 日韩av午夜在线观看| 亚洲妇女屁股眼交7| 亚洲6080在线| 美女一区二区久久| 国产自产v一区二区三区c| 国产在线视频精品一区| 国产一区二区三区av电影| 国产精品香蕉一区二区三区| 国产成人免费视频一区| 欧美日韩成人综合在线一区二区| 欧美在线影院一区二区| 欧美四级电影在线观看| 538在线一区二区精品国产| 欧美精品v日韩精品v韩国精品v| 欧美夫妻性生活| 精品理论电影在线观看 | 一区在线观看免费| 亚洲一区二区精品久久av| 天天操天天干天天综合网| 免费在线观看一区| 国产精选一区二区三区| av成人免费在线观看| 欧美在线一二三| 91精品在线观看入口| 久久夜色精品国产欧美乱极品| 久久久久久电影| 成人免费小视频| 午夜伦欧美伦电影理论片| 国产在线精品一区二区夜色 | 久久99热狠狠色一区二区| 精品在线播放免费| 91在线视频免费91| 69堂国产成人免费视频| 国产午夜精品久久久久久久 | 日av在线不卡| 国产精品一卡二卡在线观看| 91九色最新地址| 欧美mv日韩mv亚洲| 亚洲人亚洲人成电影网站色| 日韩电影一二三区| av不卡免费在线观看| 日韩美女视频一区二区在线观看| 国产精品国产自产拍在线| 婷婷久久综合九色综合伊人色| 国产69精品久久久久777| 欧美调教femdomvk| 亚洲国产精品成人综合| 亚洲成国产人片在线观看| 国产高清亚洲一区| 欧美老女人第四色| 国产精品福利一区| 美洲天堂一区二卡三卡四卡视频| 91麻豆免费观看| 欧美sm美女调教| 婷婷六月综合网| 在线看不卡av| 中文字幕一区二区三区精华液| 蜜桃视频第一区免费观看| 欧美性欧美巨大黑白大战| 中文字幕一区免费在线观看| 国产一区在线视频| 日韩一区二区中文字幕| 亚洲国产毛片aaaaa无费看| 91亚洲国产成人精品一区二区三| 2023国产精品视频| 日本不卡视频在线观看| 欧美亚洲一区三区| 亚洲欧美成人一区二区三区| 福利电影一区二区三区| 日韩欧美一级二级| 日韩电影在线一区| 在线播放91灌醉迷j高跟美女 | 亚洲成人1区2区| 一本一道久久a久久精品综合蜜臀 一本一道综合狠狠老 | 亚洲一区二区精品视频| 99精品黄色片免费大全| 久久精品一区二区三区不卡牛牛| 男女激情视频一区| 欧美一区永久视频免费观看| 亚洲成人在线观看视频| 色哟哟在线观看一区二区三区| 国产精品三级电影| 国产乱对白刺激视频不卡| 26uuu国产一区二区三区| 久草精品在线观看| 精品久久国产97色综合| 激情综合色综合久久| 日韩欧美中文字幕公布| 老色鬼精品视频在线观看播放| 欧美电影免费观看完整版| 久久国产三级精品| 久久精品亚洲国产奇米99| 国产盗摄精品一区二区三区在线 | 精品99999| 精品一区中文字幕| 久久久综合精品| 懂色av一区二区三区免费观看| 中文字幕第一区第二区| 9久草视频在线视频精品| 亚洲天堂2014| 欧美三级乱人伦电影| 日韩av电影一区| 精品1区2区在线观看| 国产福利精品导航| **性色生活片久久毛片| 91久久线看在观草草青青| 亚洲二区在线观看| 欧美日韩亚洲综合在线 | 久久精品一区八戒影视| 国产成人精品免费| 一区二区三区在线视频播放 | 欧美在线看片a免费观看| 日本午夜精品一区二区三区电影 | 日韩精品一区二| 成人精品免费视频|