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

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

?? g_monster.c

?? 著名游戲quake2原代碼最新版本(vc6.0可以編譯的)
?? C
?? 第 1 頁 / 共 2 頁
字號:
		self->monsterinfo.nextframe = 0;
	}
	else
	{
		if (self->s.frame == move->lastframe)
		{
			if (move->endfunc)
			{
				move->endfunc (self);

				// regrab move, endfunc is very likely to change it
				move = self->monsterinfo.currentmove;

				// check for death
				if (self->svflags & SVF_DEADMONSTER)
					return;
			}
		}

		if (self->s.frame < move->firstframe || self->s.frame > move->lastframe)
		{
			self->monsterinfo.aiflags &= ~AI_HOLD_FRAME;
			self->s.frame = move->firstframe;
		}
		else
		{
			if (!(self->monsterinfo.aiflags & AI_HOLD_FRAME))
			{
				self->s.frame++;
				if (self->s.frame > move->lastframe)
					self->s.frame = move->firstframe;
			}
		}
	}

	index = self->s.frame - move->firstframe;
	if (move->frame[index].aifunc)
		if (!(self->monsterinfo.aiflags & AI_HOLD_FRAME))
			move->frame[index].aifunc (self, move->frame[index].dist * self->monsterinfo.scale);
		else
			move->frame[index].aifunc (self, 0);

	if (move->frame[index].thinkfunc)
		move->frame[index].thinkfunc (self);
}


void monster_think (edict_t *self)
{
	M_MoveFrame (self);
	if (self->linkcount != self->monsterinfo.linkcount)
	{
		self->monsterinfo.linkcount = self->linkcount;
		M_CheckGround (self);
	}
	M_CatagorizePosition (self);
	M_WorldEffects (self);
	M_SetEffects (self);
}


/*
================
monster_use

Using a monster makes it angry at the current activator
================
*/
void monster_use (edict_t *self, edict_t *other, edict_t *activator)
{
	if (self->enemy)
		return;
	if (self->health <= 0)
		return;
	if (activator->flags & FL_NOTARGET)
		return;
	if (!(activator->client) && !(activator->monsterinfo.aiflags & AI_GOOD_GUY))
		return;
	
// delay reaction so if the monster is teleported, its sound is still heard
	self->enemy = activator;
	FoundTarget (self);
}


void monster_start_go (edict_t *self);


void monster_triggered_spawn (edict_t *self)
{
	self->s.origin[2] += 1;
	KillBox (self);

	self->solid = SOLID_BBOX;
	self->movetype = MOVETYPE_STEP;
	self->svflags &= ~SVF_NOCLIENT;
	self->air_finished = level.time + 12;
	gi.linkentity (self);

	monster_start_go (self);

	if (self->enemy && !(self->spawnflags & 1) && !(self->enemy->flags & FL_NOTARGET))
	{
		FoundTarget (self);
	}
	else
	{
		self->enemy = NULL;
	}
}

void monster_triggered_spawn_use (edict_t *self, edict_t *other, edict_t *activator)
{
	// we have a one frame delay here so we don't telefrag the guy who activated us
	self->think = monster_triggered_spawn;
	self->nextthink = level.time + FRAMETIME;
	if (activator->client)
		self->enemy = activator;
	self->use = monster_use;
}

void monster_triggered_start (edict_t *self)
{
	self->solid = SOLID_NOT;
	self->movetype = MOVETYPE_NONE;
	self->svflags |= SVF_NOCLIENT;
	self->nextthink = 0;
	self->use = monster_triggered_spawn_use;
}


/*
================
monster_death_use

When a monster dies, it fires all of its targets with the current
enemy as activator.
================
*/
void monster_death_use (edict_t *self)
{
	self->flags &= ~(FL_FLY|FL_SWIM);
	self->monsterinfo.aiflags &= AI_GOOD_GUY;

	if (self->item)
	{
		Drop_Item (self, self->item);
		self->item = NULL;
	}

	if (self->deathtarget)
		self->target = self->deathtarget;

	if (!self->target)
		return;

	G_UseTargets (self, self->enemy);
}


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

qboolean monster_start (edict_t *self)
{
	if (deathmatch->value)
	{
		G_FreeEdict (self);
		return false;
	}

	if ((self->spawnflags & 4) && !(self->monsterinfo.aiflags & AI_GOOD_GUY))
	{
		self->spawnflags &= ~4;
		self->spawnflags |= 1;
//		gi.dprintf("fixed spawnflags on %s at %s\n", self->classname, vtos(self->s.origin));
	}

	if (!(self->monsterinfo.aiflags & AI_GOOD_GUY))
		level.total_monsters++;

	self->nextthink = level.time + FRAMETIME;
	self->svflags |= SVF_MONSTER;
	self->s.renderfx |= RF_FRAMELERP;
	self->takedamage = DAMAGE_AIM;
	self->air_finished = level.time + 12;
	self->use = monster_use;
	self->max_health = self->health;
	self->clipmask = MASK_MONSTERSOLID;

	self->s.skinnum = 0;
	self->deadflag = DEAD_NO;
	self->svflags &= ~SVF_DEADMONSTER;

	if (!self->monsterinfo.checkattack)
		self->monsterinfo.checkattack = M_CheckAttack;
	VectorCopy (self->s.origin, self->s.old_origin);

	if (st.item)
	{
		self->item = FindItemByClassname (st.item);
		if (!self->item)
			gi.dprintf("%s at %s has bad item: %s\n", self->classname, vtos(self->s.origin), st.item);
	}

	// randomize what frame they start on
	if (self->monsterinfo.currentmove)
		self->s.frame = self->monsterinfo.currentmove->firstframe + (rand() % (self->monsterinfo.currentmove->lastframe - self->monsterinfo.currentmove->firstframe + 1));

	return true;
}

void monster_start_go (edict_t *self)
{
	vec3_t	v;

	if (self->health <= 0)
		return;

	// check for target to combat_point and change to combattarget
	if (self->target)
	{
		qboolean	notcombat;
		qboolean	fixup;
		edict_t		*target;

		target = NULL;
		notcombat = false;
		fixup = false;
		while ((target = G_Find (target, FOFS(targetname), self->target)) != NULL)
		{
			if (strcmp(target->classname, "point_combat") == 0)
			{
				self->combattarget = self->target;
				fixup = true;
			}
			else
			{
				notcombat = true;
			}
		}
		if (notcombat && self->combattarget)
			gi.dprintf("%s at %s has target with mixed types\n", self->classname, vtos(self->s.origin));
		if (fixup)
			self->target = NULL;
	}

	// validate combattarget
	if (self->combattarget)
	{
		edict_t		*target;

		target = NULL;
		while ((target = G_Find (target, FOFS(targetname), self->combattarget)) != NULL)
		{
			if (strcmp(target->classname, "point_combat") != 0)
			{
				gi.dprintf("%s at (%i %i %i) has a bad combattarget %s : %s at (%i %i %i)\n",
					self->classname, (int)self->s.origin[0], (int)self->s.origin[1], (int)self->s.origin[2],
					self->combattarget, target->classname, (int)target->s.origin[0], (int)target->s.origin[1],
					(int)target->s.origin[2]);
			}
		}
	}

	if (self->target)
	{
		self->goalentity = self->movetarget = G_PickTarget(self->target);
		if (!self->movetarget)
		{
			gi.dprintf ("%s can't find target %s at %s\n", self->classname, self->target, vtos(self->s.origin));
			self->target = NULL;
			self->monsterinfo.pausetime = 100000000;
			self->monsterinfo.stand (self);
		}
		else if (strcmp (self->movetarget->classname, "path_corner") == 0)
		{
			VectorSubtract (self->goalentity->s.origin, self->s.origin, v);
			self->ideal_yaw = self->s.angles[YAW] = vectoyaw(v);
			self->monsterinfo.walk (self);
			self->target = NULL;
		}
		else
		{
			self->goalentity = self->movetarget = NULL;
			self->monsterinfo.pausetime = 100000000;
			self->monsterinfo.stand (self);
		}
	}
	else
	{
		self->monsterinfo.pausetime = 100000000;
		self->monsterinfo.stand (self);
	}

	self->think = monster_think;
	self->nextthink = level.time + FRAMETIME;
}


void walkmonster_start_go (edict_t *self)
{
	if (!(self->spawnflags & 2) && level.time < 1)
	{
		M_droptofloor (self);

		if (self->groundentity)
			if (!M_walkmove (self, 0, 0))
				gi.dprintf ("%s in solid at %s\n", self->classname, vtos(self->s.origin));
	}
	
	if (!self->yaw_speed)
		self->yaw_speed = 20;
	self->viewheight = 25;

	monster_start_go (self);

	if (self->spawnflags & 2)
		monster_triggered_start (self);
}

void walkmonster_start (edict_t *self)
{
	self->think = walkmonster_start_go;
	monster_start (self);
}


void flymonster_start_go (edict_t *self)
{
	if (!M_walkmove (self, 0, 0))
		gi.dprintf ("%s in solid at %s\n", self->classname, vtos(self->s.origin));

	if (!self->yaw_speed)
		self->yaw_speed = 10;
	self->viewheight = 25;

	monster_start_go (self);

	if (self->spawnflags & 2)
		monster_triggered_start (self);
}


void flymonster_start (edict_t *self)
{
	self->flags |= FL_FLY;
	self->think = flymonster_start_go;
	monster_start (self);
}


void swimmonster_start_go (edict_t *self)
{
	if (!self->yaw_speed)
		self->yaw_speed = 10;
	self->viewheight = 10;

	monster_start_go (self);

	if (self->spawnflags & 2)
		monster_triggered_start (self);
}

void swimmonster_start (edict_t *self)
{
	self->flags |= FL_SWIM;
	self->think = swimmonster_start_go;
	monster_start (self);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久国产成人午夜av影院| 成人a级免费电影| 国产乱码精品一区二区三区忘忧草 | 日韩精品一区二区三区中文精品| 欧美不卡一区二区三区| 国产精品三级av| 亚洲午夜激情网页| 久久激五月天综合精品| 成人一二三区视频| 欧美日韩中字一区| 久久久久久一二三区| 亚洲少妇最新在线视频| 日韩精品免费专区| 成人午夜精品一区二区三区| 一本一本大道香蕉久在线精品 | 亚洲影视在线播放| 男人的天堂亚洲一区| 国产69精品久久久久毛片| 欧美中文字幕亚洲一区二区va在线| 日韩一区二区三区电影| 中文字幕制服丝袜一区二区三区| 日本欧美一区二区在线观看| 国产成人av影院| 欧美精品精品一区| 国产精品毛片无遮挡高清| 午夜av电影一区| 成人app软件下载大全免费| 3d成人动漫网站| 亚洲欧洲性图库| 久久精品国产久精国产| 色婷婷激情综合| 国产欧美日韩不卡| 日本欧美在线观看| 色哟哟精品一区| 久久影院视频免费| 亚瑟在线精品视频| 94-欧美-setu| 久久久噜噜噜久久中文字幕色伊伊| 亚洲午夜电影网| 成人a区在线观看| 久久综合九色综合欧美亚洲| 亚洲国产成人va在线观看天堂 | 亚洲天堂久久久久久久| 麻豆精品精品国产自在97香蕉| 91麻豆国产福利在线观看| 2023国产精品| 日本不卡一区二区三区 | 亚洲综合视频在线观看| 国产精品18久久久久久久久| 337p亚洲精品色噜噜狠狠| 亚洲欧美日韩国产综合| 国产不卡视频一区| 精品蜜桃在线看| 日韩av一区二区三区四区| 欧洲在线/亚洲| 亚洲欧美日韩国产综合| 成人福利视频网站| 国产婷婷一区二区| 精品一区二区三区视频在线观看| 欧美人狂配大交3d怪物一区| 一区二区三区高清| 91黄色在线观看| 亚洲男人电影天堂| 972aa.com艺术欧美| 一区免费观看视频| 色综合中文字幕国产| 国产亚洲一区二区三区四区| 久久成人免费网| 日韩午夜av电影| 天天综合色天天| 67194成人在线观看| 亚洲电影在线免费观看| 欧美综合一区二区三区| 一区二区高清视频在线观看| 一本到不卡精品视频在线观看| 自拍偷在线精品自拍偷无码专区| www.激情成人| 亚洲视频一二三区| 一本到一区二区三区| 一区二区免费看| 欧美日韩在线直播| 午夜精品福利久久久| 在线不卡中文字幕播放| 日韩高清欧美激情| 日韩美一区二区三区| 久色婷婷小香蕉久久| 精品久久久久久久久久久久久久久久久| 麻豆成人综合网| 久久久天堂av| 99久精品国产| 亚洲国产精品久久久久婷婷884| 欧美精品久久一区| 久久精品国产精品亚洲红杏| 精品国产成人在线影院| 国产盗摄一区二区三区| 国产精品国产三级国产普通话蜜臀| av在线不卡电影| 一区二区三区四区在线免费观看| 欧美日精品一区视频| 日韩1区2区日韩1区2区| 久久久久久免费毛片精品| 成人综合日日夜夜| 一区二区高清在线| 日韩欧美色综合网站| 国产成人夜色高潮福利影视| 综合自拍亚洲综合图不卡区| 欧美视频中文字幕| 免费精品视频最新在线| 久久精品一区二区三区不卡| 97精品电影院| 蜜臂av日日欢夜夜爽一区| 国产婷婷一区二区| 欧美吻胸吃奶大尺度电影| 麻豆成人在线观看| 中文字幕在线观看一区| 欧美二区乱c少妇| 国产成人精品免费一区二区| 亚洲精品老司机| 精品av综合导航| 色噜噜夜夜夜综合网| 美日韩一区二区| 成人欧美一区二区三区黑人麻豆 | 亚洲一区视频在线| 日韩免费看的电影| 色悠悠久久综合| 国产综合色视频| 一区二区三区在线观看国产| 精品国产不卡一区二区三区| 色综合天天综合色综合av| 激情五月激情综合网| 夜夜爽夜夜爽精品视频| 国产欧美综合在线观看第十页 | 丝袜诱惑亚洲看片| 国产偷国产偷亚洲高清人白洁| 欧美日韩国产成人在线91| 国产激情一区二区三区| 亚洲国产精品视频| 中文字幕制服丝袜一区二区三区| 日韩欧美在线一区二区三区| 91色婷婷久久久久合中文| 久久国产夜色精品鲁鲁99| 亚洲免费视频成人| 久久精品亚洲乱码伦伦中文| 欧美视频日韩视频| www.99精品| 国产精品亚洲成人| 丝袜美腿一区二区三区| 亚洲靠逼com| 中文字幕av一区 二区| 日韩一区二区三区在线| 色爱区综合激月婷婷| 国产不卡视频一区二区三区| 美女精品自拍一二三四| 亚洲高清久久久| 亚洲男人的天堂av| 欧美国产97人人爽人人喊| 精品久久久久久亚洲综合网 | 亚洲电影在线播放| 国产精品大尺度| 久久久国际精品| 日韩精品自拍偷拍| 欧美精品久久99久久在免费线| 91蝌蚪porny九色| 成人美女在线视频| 国产九色精品成人porny| 蜜臀av在线播放一区二区三区| 亚洲成人激情av| 一区二区在线观看视频| 亚洲国产高清在线观看视频| 精品国产在天天线2019| 91精品国产一区二区人妖| 欧美三级韩国三级日本三斤| 日本国产一区二区| 一本到高清视频免费精品| 色悠久久久久综合欧美99| 91亚洲资源网| 91片在线免费观看| a4yy欧美一区二区三区| 成人av资源下载| aaa国产一区| 91女厕偷拍女厕偷拍高清| k8久久久一区二区三区| 国产成人精品综合在线观看| 国产91丝袜在线播放0| 国产伦精品一区二区三区在线观看| 黄网站免费久久| 国产二区国产一区在线观看| 国产成人在线观看| av男人天堂一区| 99久久综合狠狠综合久久| 99在线精品视频| 色哟哟欧美精品| 欧美系列亚洲系列| 欧美乱妇15p| 日韩免费福利电影在线观看| 精品久久久久av影院| 国产女人18毛片水真多成人如厕| 国产欧美日韩卡一| 亚洲美女免费视频| 亚洲mv在线观看|