示例#1
0
文件: stalker.c 项目: DrItanium/rogue
qboolean stalker_blocked (edict_t *self, float dist)
{
	qboolean	onCeiling;

	if(!has_valid_enemy(self))
		return false;

	onCeiling = false;
	if(self->gravityVector[2] > 0)
		onCeiling = true;

	if(!onCeiling)
	{
		if(blocked_checkshot(self, 0.25 + (0.05 * skill->value) ))
		{
			return true;
		}

		if(visible (self, self->enemy))
		{
			stalker_do_pounce(self, self->enemy->s.origin);
			return true;
		}

		if(blocked_checkjump (self, dist, 256, 68))
		{
			stalker_jump (self);
			return true;
		}

		if(blocked_checkplat (self, dist))
			return true;
	}
	else
	{
		if(blocked_checkshot(self, 0.25 + (0.05 * skill->value) ))
		{
			return true;
		}	
		else if(stalker_ok_to_transition(self))
		{
			self->gravityVector[2] = -1;
			self->s.angles[2] += 180.0;
			if(self->s.angles[2] > 360.0)
				self->s.angles[2] -= 360.0;
			self->groundentity = NULL;
			
			return true;
		}
	}

	return false;
}
示例#2
0
文件: flyer.c 项目: DrItanium/rogue
// PMM - kamikaze code .. blow up if blocked	
int flyer_blocked (edict_t *self, float dist)
{
	vec3_t origin;

	// kamikaze = 100, normal = 50
	if (self->mass == 100)
	{
		flyer_kamikaze_check(self);

		// if the above didn't blow us up (i.e. I got blocked by the player)
		if (self->inuse)
		{
			if (self->monsterinfo.commander && self->monsterinfo.commander->inuse && 
				!strcmp(self->monsterinfo.commander->classname, "monster_carrier"))
			{
				self->monsterinfo.commander->monsterinfo.monster_slots++;
			}

			VectorMA (self->s.origin, -0.02, self->velocity, origin);
			gi.WriteByte (svc_temp_entity);
			gi.WriteByte (TE_ROCKET_EXPLOSION);
			gi.WritePosition (origin);
			gi.multicast (self->s.origin, MULTICAST_PHS);

			G_FreeEdict (self);
		}
		return true;
	}
	// we're a normal flyer
	if(blocked_checkshot (self, 0.25 + (0.05 * skill->value) ))
		return true;

	return false;
}
示例#3
0
文件: gunner.c 项目: yquake2/rogue
qboolean
gunner_blocked(edict_t *self, float dist)
{
	if (!self)
	{
		return false;
	}

	if (blocked_checkshot(self, 0.25 + (0.05 * skill->value)))
	{
		return true;
	}

	if (blocked_checkplat(self, dist))
	{
		return true;
	}

	if (blocked_checkjump(self, dist, 192, 40))
	{
		gunner_jump(self);
		return true;
	}

	return false;
}
示例#4
0
qboolean
widow_blocked(edict_t *self, float dist)
{
	if (!self)
	{
		return false;
	}

	if (self->monsterinfo.currentmove == &widow_move_run_attack)
	{
		self->monsterinfo.aiflags |= AI_TARGET_ANGER;

		if (self->monsterinfo.checkattack(self))
		{
			self->monsterinfo.attack(self);
		}
		else
		{
			self->monsterinfo.run(self);
		}

		return true;
	}

	if (blocked_checkshot(self, 0.25 + (0.05 * skill->value)))
	{
		return true;
	}

	return false;
}
示例#5
0
qboolean widow_blocked (edict_t *self, float dist)
{
	// if we get blocked while we're in our run/attack mode, turn on a meaningless (in this context)AI flag,
	// and call attack to get a new attack sequence.  make sure to turn it off when we're done.
	//
	// I'm using AI_TARGET_ANGER for this purpose

	if (self->monsterinfo.currentmove == &widow_move_run_attack)
	{
		self->monsterinfo.aiflags |= AI_TARGET_ANGER;
		if (self->monsterinfo.checkattack(self))
			self->monsterinfo.attack(self);
		else
			self->monsterinfo.run(self);
		return true;
	}

	if(blocked_checkshot (self, 0.25 + (0.05 * skill->value) ))
		return true;

/*
	if(blocked_checkjump (self, dist, 192, 40))
	{
		infantry_jump(self);
		return true;
	}

	if(blocked_checkplat (self, dist))
		return true;
*/
	return false;
}
示例#6
0
//===========
//PGM
qboolean Makron_blocked (edict_t *self, float dist)
{
	if(blocked_checkshot (self, 0.25 + (0.05 * skill->value) ))
		return true;

	if(blocked_checkplat (self, dist))
		return true;

	return false;
}
示例#7
0
/*
===
Blocked
===
*/
qboolean parasite_blocked (edict_t *self, float dist)
{
	if(blocked_checkshot (self, 0.25 + (0.05 * skill->value) ))
		return true;

	if(blocked_checkjump (self, dist, 256, 68))
	{
		parasite_jump (self);
		return true;
	}

	if(blocked_checkplat (self, dist))
		return true;

	return false;	// Knightmare- warning fix
}
示例#8
0
qboolean infantry_blocked (edict_t *self, float dist)
{
	if(blocked_checkshot (self, 0.25 + (0.05 * skill->value) ))
		return true;

	if(blocked_checkjump (self, dist, 192, 40))
	{
		infantry_jump(self);
		return true;
	}

	if(blocked_checkplat (self, dist))
		return true;

	return false;
}
示例#9
0
文件: m_soldier.c 项目: ZwS/qudos
qboolean soldier_blocked (edict_t *self, float dist)
{
	// don't do anything if you're dodging
	if ((self->monsterinfo.aiflags & AI_DODGING) || (self->monsterinfo.aiflags & AI_DUCKED))
		return false;

	if(blocked_checkshot (self, 0.25 + (0.05 * skill->value) ))
		return true;

//	if(blocked_checkjump (self, dist, 192, 40))
//	{
//		soldier_jump(self);
//		return true;
//	}

	if(blocked_checkplat (self, dist))
		return true;

	return false;
}
示例#10
0
文件: m_stalker.c 项目: ZwS/qudos
qboolean stalker_blocked (edict_t *self, float dist)
{
	qboolean	onCeiling;

//	gi.dprintf("stalker_blocked\n");
	if(!has_valid_enemy(self))
		return false;

	onCeiling = false;
	if(self->gravityVector[2] > 0)
		onCeiling = true;

	if(!onCeiling)
	{
		if(blocked_checkshot(self, 0.25 + (0.05 * skill->value) ))
		{
//			gi.dprintf("blocked: shooting\n");
			return true;
		}

		if(visible (self, self->enemy))
		{
//			gi.dprintf("blocked: jumping at player!\n");
			stalker_do_pounce(self, self->enemy->s.origin);
			return true;
		}

		if(blocked_checkjump (self, dist, 256, 68))
		{
//			gi.dprintf("blocked: jumping up/down\n");
			stalker_jump (self);
			return true;
		}

		if(blocked_checkplat (self, dist))
			return true;
	}
	else
	{
		if(blocked_checkshot(self, 0.25 + (0.05 * skill->value) ))
		{
//			gi.dprintf("blocked: shooting\n");
			return true;
		}	
		else if(stalker_ok_to_transition(self))
		{
			self->gravityVector[2] = -1;
			self->s.angles[2] += 180.0;
			if(self->s.angles[2] > 360.0)
				self->s.angles[2] -= 360.0;
			self->groundentity = NULL;
			
//			gi.dprintf("falling off ceiling\n");
			return true;
		}
//		else
//			gi.dprintf("Not OK to fall!\n");
	}

	return false;
}