Exemplo n.º 1
0
/*
QuakeEd only writes a single float for angles (bad idea), so up and down are
just constant angles.
*/
void SetMovedir()
{
	if ( VectorCompareF( self->s.v.angles, 0, -1, 0 ) )
		SetVector( self->s.v.movedir, 0, 0, 1 );
	else if ( VectorCompareF( self->s.v.angles, 0, -2, 0 ) )
		SetVector( self->s.v.movedir, 0, 0, -1 );
	else
	{
		makevectors( self->s.v.angles );
		VectorCopy( g_globalvars.v_forward, self->s.v.movedir );
	}
	SetVector( self->s.v.angles, 0, 0, 0 );
}
Exemplo n.º 2
0
//=========================================================================
// Touch Function for EMP Grenade
void EMPGrenadeTouch(  )
{
    // If the EMP Grenade hits a player, it just bounces off
    sound( self, 1, "weapons/bounce.wav", 1, 1 );
    if ( VectorCompareF( self->s.v.velocity, 0, 0, 0 ) )
	SetVector( self->s.v.avelocity, 0, 0, 0 );
}
Exemplo n.º 3
0
void multi_touch(  )
{
	gedict_t *te;

	if ( !other->s.v.classname )
		return;
	if ( strneq( other->s.v.classname, "player" ) )
		return;

	if ( !Activated( self, other ) )
	{
		if ( self->else_goal )
		{
			te = Findgoal( self->else_goal );
			if ( te )
				AttemptToActivate( te, other, self );
		}
		return;
	}

	if ( !VectorCompareF( self->s.v.movedir, 0, 0, 0 ) )
	{
		trap_makevectors( other->s.v.angles );
		if ( DotProduct( g_globalvars.v_forward, self->s.v.movedir ) < 0 )
			return;	// not facing the right way
	}

	self->s.v.enemy = EDICT_TO_PROG( other );
	multi_trigger(  );
}
Exemplo n.º 4
0
/*
================
InitTrigger
================
*/
void InitTrigger()
{
// trigger angles are used for one-way touches.  An angle of 0 is assumed
// to mean no restrictions, so use a yaw of 360 instead.
	if ( !VectorCompareF( self->s.v.angles, 0, 0, 0 ) )
		SetMovedir( self );
	self->s.v.solid = SOLID_TRIGGER;
	setmodel( self, self->s.v.model );	// set size and link into world
	self->s.v.movetype = MOVETYPE_NONE;
	self->s.v.modelindex = 0;
	self->s.v.model = "";
}
Exemplo n.º 5
0
/*QUAKED trigger_monsterjump (.5 .5 .5) ?
Walking monsters that touch this will jump in the direction of the trigger's angle
"speed" default to 200, the speed thrown forward
"height" default to 200, the speed thrown upwards
*/
void SP_trigger_monsterjump(  )
{
	if ( !CheckExistence(  ) )
	{
		dremove( self );
		return;
	}
	if ( !self->speed )
		self->speed = 200;

	if ( !self->height )
		self->height = 200;

	if ( VectorCompareF( self->s.v.angles, 0, 0, 0 ) )
		SetVector( self->s.v.angles, 0, 360, 0 );
	InitTrigger(  );
	self->s.v.touch = ( func_t ) trigger_monsterjump_touch;
}