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

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

?? g_misc.c

?? 著名游戲quake2原代碼最新版本(vc6.0可以編譯的)
?? C
?? 第 1 頁 / 共 4 頁
字號:
			activator = other->oldenemy;
		else if (other->activator && other->activator->client)
			activator = other->activator;
		else
			activator = other;
		G_UseTargets (self, activator);
		self->target = savetarget;
	}
}

void SP_point_combat (edict_t *self)
{
	if (deathmatch->value)
	{
		G_FreeEdict (self);
		return;
	}
	self->solid = SOLID_TRIGGER;
	self->touch = point_combat_touch;
	VectorSet (self->mins, -8, -8, -16);
	VectorSet (self->maxs, 8, 8, 16);
	self->svflags = SVF_NOCLIENT;
	gi.linkentity (self);
};


/*QUAKED viewthing (0 .5 .8) (-8 -8 -8) (8 8 8)
Just for the debugging level.  Don't use
*/
static int robotron[4];

void TH_viewthing(edict_t *ent)
{
	ent->s.frame = (ent->s.frame + 1) % 7;
//	ent->s.frame = (ent->s.frame + 1) % 9;
	ent->nextthink = level.time + FRAMETIME;
//	return;

	if (ent->spawnflags)
	{
		if (ent->s.frame == 0)
		{
			ent->spawnflags = (ent->spawnflags + 1) % 4 + 1;
			ent->s.modelindex = robotron[ent->spawnflags - 1];
		}
	}
}

void SP_viewthing(edict_t *ent)
{
	gi.dprintf ("viewthing spawned\n");

	ent->movetype = MOVETYPE_NONE;
	ent->solid = SOLID_BBOX;
	ent->s.renderfx = RF_FRAMELERP;
	VectorSet (ent->mins, -16, -16, -24);
	VectorSet (ent->maxs, 16, 16, 32);
//	ent->s.modelindex = gi.modelindex ("models/player_y/tris.md2");
	ent->s.modelindex = gi.modelindex ("models/objects/banner/tris.md2");
	gi.linkentity (ent);
	ent->nextthink = level.time + 0.5;
	ent->think = TH_viewthing;
	return;
}


/*QUAKED info_null (0 0.5 0) (-4 -4 -4) (4 4 4)
Used as a positional target for spotlights, etc.
*/
void SP_info_null (edict_t *self)
{
	G_FreeEdict (self);
};


/*QUAKED info_notnull (0 0.5 0) (-4 -4 -4) (4 4 4)
Used as a positional target for lightning.
*/
void SP_info_notnull (edict_t *self)
{
	VectorCopy (self->s.origin, self->absmin);
	VectorCopy (self->s.origin, self->absmax);
};


/*QUAKED light (0 1 0) (-8 -8 -8) (8 8 8) START_OFF
Non-displayed light.
Default light value is 300.
Default style is 0.
If targeted, will toggle between on and off.
Default _cone value is 10 (used to set size of light for spotlights)
*/

#define START_OFF	1

static void light_use (edict_t *self, edict_t *other, edict_t *activator)
{
	if (self->spawnflags & START_OFF)
	{
		gi.configstring (CS_LIGHTS+self->style, "m");
		self->spawnflags &= ~START_OFF;
	}
	else
	{
		gi.configstring (CS_LIGHTS+self->style, "a");
		self->spawnflags |= START_OFF;
	}
}

void SP_light (edict_t *self)
{
	// no targeted lights in deathmatch, because they cause global messages
	if (!self->targetname || deathmatch->value)
	{
		G_FreeEdict (self);
		return;
	}

	if (self->style >= 32)
	{
		self->use = light_use;
		if (self->spawnflags & START_OFF)
			gi.configstring (CS_LIGHTS+self->style, "a");
		else
			gi.configstring (CS_LIGHTS+self->style, "m");
	}
}


/*QUAKED func_wall (0 .5 .8) ? TRIGGER_SPAWN TOGGLE START_ON ANIMATED ANIMATED_FAST
This is just a solid wall if not inhibited

TRIGGER_SPAWN	the wall will not be present until triggered
				it will then blink in to existance; it will
				kill anything that was in it's way

TOGGLE			only valid for TRIGGER_SPAWN walls
				this allows the wall to be turned on and off

START_ON		only valid for TRIGGER_SPAWN walls
				the wall will initially be present
*/

void func_wall_use (edict_t *self, edict_t *other, edict_t *activator)
{
	if (self->solid == SOLID_NOT)
	{
		self->solid = SOLID_BSP;
		self->svflags &= ~SVF_NOCLIENT;
		KillBox (self);
	}
	else
	{
		self->solid = SOLID_NOT;
		self->svflags |= SVF_NOCLIENT;
	}
	gi.linkentity (self);

	if (!(self->spawnflags & 2))
		self->use = NULL;
}

void SP_func_wall (edict_t *self)
{
	self->movetype = MOVETYPE_PUSH;
	gi.setmodel (self, self->model);

	if (self->spawnflags & 8)
		self->s.effects |= EF_ANIM_ALL;
	if (self->spawnflags & 16)
		self->s.effects |= EF_ANIM_ALLFAST;

	// just a wall
	if ((self->spawnflags & 7) == 0)
	{
		self->solid = SOLID_BSP;
		gi.linkentity (self);
		return;
	}

	// it must be TRIGGER_SPAWN
	if (!(self->spawnflags & 1))
	{
//		gi.dprintf("func_wall missing TRIGGER_SPAWN\n");
		self->spawnflags |= 1;
	}

	// yell if the spawnflags are odd
	if (self->spawnflags & 4)
	{
		if (!(self->spawnflags & 2))
		{
			gi.dprintf("func_wall START_ON without TOGGLE\n");
			self->spawnflags |= 2;
		}
	}

	self->use = func_wall_use;
	if (self->spawnflags & 4)
	{
		self->solid = SOLID_BSP;
	}
	else
	{
		self->solid = SOLID_NOT;
		self->svflags |= SVF_NOCLIENT;
	}
	gi.linkentity (self);
}


/*QUAKED func_object (0 .5 .8) ? TRIGGER_SPAWN ANIMATED ANIMATED_FAST
This is solid bmodel that will fall if it's support it removed.
*/

void func_object_touch (edict_t *self, edict_t *other, cplane_t *plane, csurface_t *surf)
{
	// only squash thing we fall on top of
	if (!plane)
		return;
	if (plane->normal[2] < 1.0)
		return;
	if (other->takedamage == DAMAGE_NO)
		return;
	T_Damage (other, self, self, vec3_origin, self->s.origin, vec3_origin, self->dmg, 1, 0, MOD_CRUSH);
}

void func_object_release (edict_t *self)
{
	self->movetype = MOVETYPE_TOSS;
	self->touch = func_object_touch;
}

void func_object_use (edict_t *self, edict_t *other, edict_t *activator)
{
	self->solid = SOLID_BSP;
	self->svflags &= ~SVF_NOCLIENT;
	self->use = NULL;
	KillBox (self);
	func_object_release (self);
}

void SP_func_object (edict_t *self)
{
	gi.setmodel (self, self->model);

	self->mins[0] += 1;
	self->mins[1] += 1;
	self->mins[2] += 1;
	self->maxs[0] -= 1;
	self->maxs[1] -= 1;
	self->maxs[2] -= 1;

	if (!self->dmg)
		self->dmg = 100;

	if (self->spawnflags == 0)
	{
		self->solid = SOLID_BSP;
		self->movetype = MOVETYPE_PUSH;
		self->think = func_object_release;
		self->nextthink = level.time + 2 * FRAMETIME;
	}
	else
	{
		self->solid = SOLID_NOT;
		self->movetype = MOVETYPE_PUSH;
		self->use = func_object_use;
		self->svflags |= SVF_NOCLIENT;
	}

	if (self->spawnflags & 2)
		self->s.effects |= EF_ANIM_ALL;
	if (self->spawnflags & 4)
		self->s.effects |= EF_ANIM_ALLFAST;

	self->clipmask = MASK_MONSTERSOLID;

	gi.linkentity (self);
}


/*QUAKED func_explosive (0 .5 .8) ? Trigger_Spawn ANIMATED ANIMATED_FAST
Any brush that you want to explode or break apart.  If you want an
ex0plosion, set dmg and it will do a radius explosion of that amount
at the center of the bursh.

If targeted it will not be shootable.

health defaults to 100.

mass defaults to 75.  This determines how much debris is emitted when
it explodes.  You get one large chunk per 100 of mass (up to 8) and
one small chunk per 25 of mass (up to 16).  So 800 gives the most.
*/
void func_explosive_explode (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
{
	vec3_t	origin;
	vec3_t	chunkorigin;
	vec3_t	size;
	int		count;
	int		mass;

	// bmodel origins are (0 0 0), we need to adjust that here
	VectorScale (self->size, 0.5, size);
	VectorAdd (self->absmin, size, origin);
	VectorCopy (origin, self->s.origin);

	self->takedamage = DAMAGE_NO;

	if (self->dmg)
		T_RadiusDamage (self, attacker, self->dmg, NULL, self->dmg+40, MOD_EXPLOSIVE);

	VectorSubtract (self->s.origin, inflictor->s.origin, self->velocity);
	VectorNormalize (self->velocity);
	VectorScale (self->velocity, 150, self->velocity);

	// start chunks towards the center
	VectorScale (size, 0.5, size);

	mass = self->mass;
	if (!mass)
		mass = 75;

	// big chunks
	if (mass >= 100)
	{
		count = mass / 100;
		if (count > 8)
			count = 8;
		while(count--)
		{
			chunkorigin[0] = origin[0] + crandom() * size[0];
			chunkorigin[1] = origin[1] + crandom() * size[1];
			chunkorigin[2] = origin[2] + crandom() * size[2];
			ThrowDebris (self, "models/objects/debris1/tris.md2", 1, chunkorigin);
		}
	}

	// small chunks
	count = mass / 25;
	if (count > 16)
		count = 16;
	while(count--)
	{
		chunkorigin[0] = origin[0] + crandom() * size[0];
		chunkorigin[1] = origin[1] + crandom() * size[1];
		chunkorigin[2] = origin[2] + crandom() * size[2];
		ThrowDebris (self, "models/objects/debris2/tris.md2", 2, chunkorigin);
	}

	G_UseTargets (self, attacker);

	if (self->dmg)
		BecomeExplosion1 (self);
	else
		G_FreeEdict (self);
}

void func_explosive_use(edict_t *self, edict_t *other, edict_t *activator)
{
	func_explosive_explode (self, self, other, self->health, vec3_origin);
}

void func_explosive_spawn (edict_t *self, edict_t *other, edict_t *activator)
{
	self->solid = SOLID_BSP;
	self->svflags &= ~SVF_NOCLIENT;
	self->use = NULL;
	KillBox (self);
	gi.linkentity (self);
}

void SP_func_explosive (edict_t *self)
{
	if (deathmatch->value)
	{	// auto-remove for deathmatch
		G_FreeEdict (self);
		return;
	}

	self->movetype = MOVETYPE_PUSH;

	gi.modelindex ("models/objects/debris1/tris.md2");
	gi.modelindex ("models/objects/debris2/tris.md2");

	gi.setmodel (self, self->model);

	if (self->spawnflags & 1)
	{
		self->svflags |= SVF_NOCLIENT;
		self->solid = SOLID_NOT;
		self->use = func_explosive_spawn;
	}
	else
	{
		self->solid = SOLID_BSP;
		if (self->targetname)
			self->use = func_explosive_use;
	}

	if (self->spawnflags & 2)
		self->s.effects |= EF_ANIM_ALL;
	if (self->spawnflags & 4)
		self->s.effects |= EF_ANIM_ALLFAST;

	if (self->use != func_explosive_use)
	{
		if (!self->health)
			self->health = 100;
		self->die = func_explosive_explode;
		self->takedamage = DAMAGE_YES;
	}

	gi.linkentity (self);
}


/*QUAKED misc_explobox (0 .5 .8) (-16 -16 0) (16 16 40)
Large exploding box.  You can override its mass (100),
health (80), and dmg (150).
*/

void barrel_touch (edict_t *self, edict_t *other, cplane_t *plane, csurface_t *surf)

{
	float	ratio;
	vec3_t	v;

	if ((!other->groundentity) || (other->groundentity == self))
		return;

	ratio = (float)other->mass / (float)self->mass;
	VectorSubtract (self->s.origin, other->s.origin, v);
	M_walkmove (self, vectoyaw(v), 20 * ratio * FRAMETIME);
}

void barrel_explode (edict_t *self)
{
	vec3_t	org;
	float	spd;
	vec3_t	save;

	T_RadiusDamage (self, self->activator, self->dmg, NULL, self->dmg+40, MOD_BARREL);

	VectorCopy (self->s.origin, save);
	VectorMA (self->absmin, 0.5, self->size, self->s.origin);

	// a few big chunks
	spd = 1.5 * (float)self->dmg / 200.0;
	org[0] = self->s.origin[0] + crandom() * self->size[0];
	org[1] = self->s.origin[1] + crandom() * self->size[1];
	org[2] = self->s.origin[2] + crandom() * self->size[2];
	ThrowDebris (self, "models/objects/debris1/tris.md2", spd, org);
	org[0] = self->s.origin[0] + crandom() * self->size[0];
	org[1] = self->s.origin[1] + crandom() * self->size[1];
	org[2] = self->s.origin[2] + crandom() * self->size[2];
	ThrowDebris (self, "models/objects/debris1/tris.md2", spd, org);

	// bottom corners
	spd = 1.75 * (float)self->dmg / 200.0;
	VectorCopy (self->absmin, org);
	ThrowDebris (self, "models/objects/debris3/tris.md2", spd, org);
	VectorCopy (self->absmin, org);
	org[0] += self->size[0];
	ThrowDebris (self, "models/objects/debris3/tris.md2", spd, org);
	VectorCopy (self->absmin, org);
	org[1] += self->size[1];
	ThrowDebris (self, "models/objects/debris3/tris.md2", spd, org);
	VectorCopy (self->absmin, org);
	org[0] += self->size[0];
	org[1] += self->size[1];
	ThrowDebris (self, "models/objects/debris3/tris.md2", spd, org);

	// a bunch of little chunks
	spd = 2 * self->dmg / 200;
	org[0] = self->s.origin[0] + crandom() * self->size[0];
	org[1] = self->s.origin[1] + crandom() * self->size[1];

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
首页综合国产亚洲丝袜| 青青草视频一区| 国产呦精品一区二区三区网站| 国产高清不卡一区二区| 欧美日韩免费观看一区三区| 亚洲欧洲制服丝袜| 99久久精品免费看国产| 日韩一区中文字幕| 高清国产一区二区三区| 国产欧美精品国产国产专区| 久草中文综合在线| 久久男人中文字幕资源站| 一区二区三区四区精品在线视频 | 欧美特级限制片免费在线观看| 国产亚洲精品免费| 成人app在线观看| 日韩美女啊v在线免费观看| av亚洲精华国产精华| 一区二区三区自拍| 欧洲亚洲精品在线| 蜜臀久久久99精品久久久久久| 777午夜精品免费视频| 国产在线不卡一卡二卡三卡四卡| 久久综合给合久久狠狠狠97色69| 国产成人午夜片在线观看高清观看| 国产校园另类小说区| 成人av在线电影| 亚洲愉拍自拍另类高清精品| 日韩欧美国产综合在线一区二区三区| 精品一区在线看| 一区二区三区四区乱视频| 日韩欧美在线综合网| www.亚洲在线| 久久99精品视频| 亚洲午夜一区二区三区| 国产日韩欧美精品在线| 在线视频观看一区| 成人一道本在线| 久久精品国产99国产| 亚洲综合在线免费观看| 亚洲国产成人一区二区三区| 制服丝袜亚洲精品中文字幕| av在线免费不卡| 韩国v欧美v日本v亚洲v| 麻豆一区二区三区| 午夜精品一区二区三区三上悠亚| 国产日韩欧美麻豆| 久久综合九色综合久久久精品综合| 欧美视频一区二区三区在线观看| 国产白丝网站精品污在线入口| 亚洲小说春色综合另类电影| 国产欧美日韩视频一区二区| 日韩欧美国产综合一区 | 精品91自产拍在线观看一区| 欧美精品123区| 91色.com| 欧美色综合影院| 欧美视频日韩视频在线观看| 97se亚洲国产综合自在线| 成人av网址在线| 99久久99久久精品免费观看| 成人av在线资源| 色婷婷久久久久swag精品| 色综合久久88色综合天天| 日本精品视频一区二区三区| 色久优优欧美色久优优| 欧美日韩视频不卡| 亚洲精品在线三区| 国产欧美一区在线| 一区二区三区在线视频播放 | 5月丁香婷婷综合| 欧美大胆一级视频| 中文字幕免费一区| 香蕉成人伊视频在线观看| 日本在线不卡视频一二三区| 国产在线视频一区二区三区| 99久久精品免费看国产免费软件| 欧美亚洲国产一区二区三区va| 欧美高清性hdvideosex| 久久免费视频一区| 日韩中文字幕区一区有砖一区| 老司机精品视频在线| 91亚洲国产成人精品一区二三 | 亚洲国产激情av| 午夜电影久久久| 99国产欧美久久久精品| 日韩片之四级片| 亚洲综合偷拍欧美一区色| 国产综合成人久久大片91| 欧美中文字幕一二三区视频| 久久综合色8888| 蜜臀av一区二区在线免费观看| 不卡视频在线看| 久久午夜羞羞影院免费观看| 亚洲成人av电影在线| 91免费视频观看| 国产精品久久夜| 成人一道本在线| 欧美国产一区视频在线观看| 国产一区二区在线观看视频| 欧美剧情电影在线观看完整版免费励志电影| 久久精品欧美一区二区三区不卡| 日本不卡一二三| 欧美军同video69gay| 日韩高清欧美激情| 91麻豆精品91久久久久久清纯| 亚洲v中文字幕| 欧美日韩电影在线| 日日夜夜免费精品视频| 欧美久久久久久久久久 | 久久久亚洲欧洲日产国码αv| 日韩电影一区二区三区| 日韩精品一区二区三区在线| 国产精品亚洲综合一区在线观看| 在线免费观看不卡av| 欧美日韩视频不卡| 亚洲欧美偷拍卡通变态| 欧美日韩精品欧美日韩精品一| 亚洲国产欧美在线| 日韩视频免费观看高清完整版 | 国产日韩精品一区二区浪潮av| 国产成人免费9x9x人网站视频| 国产精品污网站| 色综合久久精品| 麻豆精品精品国产自在97香蕉| 中文字幕免费不卡| 欧美精品v日韩精品v韩国精品v| 青青草精品视频| 亚洲人精品午夜| 精品美女一区二区三区| 欧美最猛黑人xxxxx猛交| 精品午夜久久福利影院| 亚洲黄色片在线观看| 精品免费国产一区二区三区四区| 国产91精品一区二区麻豆网站| 亚洲综合精品久久| 成人免费小视频| 久久久影院官网| 欧美成人猛片aaaaaaa| 在线免费亚洲电影| 成人av免费在线观看| 韩日av一区二区| 久久精品国产秦先生| 天堂成人国产精品一区| 一区二区三区精品在线观看| 国产丝袜欧美中文另类| 久久―日本道色综合久久| 91精品国产综合久久久久久漫画 | 日韩av在线播放中文字幕| 欧美国产欧美亚州国产日韩mv天天看完整| 欧美午夜一区二区三区| 日本道免费精品一区二区三区| 不卡高清视频专区| 99re视频精品| 91麻豆123| 99国产精品视频免费观看| 99精品偷自拍| 欧美午夜免费电影| 欧美男人的天堂一二区| 欧美美女一区二区| 精品国产乱码久久久久久免费| 欧美日产国产精品| 欧美一激情一区二区三区| 日韩精品资源二区在线| 欧美经典一区二区| 亚洲天堂2014| 视频一区欧美精品| 国产乱对白刺激视频不卡| eeuss鲁片一区二区三区在线看| 91在线观看高清| 91精品国产黑色紧身裤美女| www国产精品av| 亚洲免费av观看| 免费在线一区观看| 91社区在线播放| 日韩欧美你懂的| 亚洲男人天堂av| 国产精品一区免费视频| 欧美午夜影院一区| 国产午夜亚洲精品理论片色戒 | 中文字幕一区二区不卡 | 国产精品福利一区| 2023国产精品| 国产精品二三区| 狠狠色丁香久久婷婷综| 在线观看免费一区| 久久影院午夜片一区| 亚洲精品美腿丝袜| 国产高清不卡一区| 久久人人爽爽爽人久久久| 日韩和欧美的一区| 欧美性猛片xxxx免费看久爱| 26uuu亚洲| 黄一区二区三区| 日韩三级视频在线看| 日韩精彩视频在线观看| 色综合咪咪久久| 亚洲裸体在线观看| 色婷婷综合五月| 一区二区三区国产精品|