コード例 #1
0
ファイル: g_weapon.c プロジェクト: bmorel/Unvanquished
void painSawFire( gentity_t *ent )
{
	trace_t   tr;
	vec3_t    temp;
	gentity_t *tent, *traceEnt;

	G_WideTrace( &tr, ent, PAINSAW_RANGE, PAINSAW_WIDTH, PAINSAW_HEIGHT,
	             &traceEnt );

	if ( !traceEnt || !traceEnt->takedamage )
	{
		return;
	}

	// hack to line up particle system with weapon model
	tr.endpos[ 2 ] -= 5.0f;

	// send blood impact
	if ( traceEnt->s.eType == ET_PLAYER || traceEnt->s.eType == ET_BUILDABLE )
	{
		BloodSpurt( ent, traceEnt, &tr );
	}
	else
	{
		VectorCopy( tr.endpos, temp );
		tent = G_NewTempEntity( temp, EV_MISSILE_MISS );
		tent->s.eventParm = DirToByte( tr.plane.normal );
		tent->s.weapon = ent->s.weapon;
		tent->s.generic1 = ent->s.generic1; //weaponMode
	}

	G_Damage( traceEnt, ent, ent, forward, tr.endpos, PAINSAW_DAMAGE, DAMAGE_NO_KNOCKBACK, MOD_PAINSAW );
}
コード例 #2
0
ファイル: g_weapon.c プロジェクト: massivehaxxor/new-edge
void lightningGunFire( gentity_t *ent )
{
        vec3_t /*start, */end, mins, maxs, target_origin;
	trace_t tr;
	gentity_t *target;
	int damage;

	damage = LIGHTNING_DAMAGE;
	G_CombatStats_Fire( ent, CSW_LIGHTNING, damage );

	VectorMA( muzzle, LIGHTNING_RANGE, forward, end );

	G_UnlaggedOn( ent, muzzle, LIGHTNING_RANGE );

	trap_Trace( &tr, muzzle, NULL, NULL, end, ent->s.number, MASK_SHOT );

	if( tr.fraction == 1.0f ||
	    tr.entityNum == ENTITYNUM_NONE ||
	    ( tr.surfaceFlags & SURF_NOIMPACT ) )
	{
		G_UnlaggedOff( );
		return;
	}

	target = g_entities + tr.entityNum;


	if( target->s.eType == ET_PLAYER || target->s.eType == ET_BUILDABLE )
	{
		float acc;

		VectorCopy( target->r.mins, mins );
		VectorCopy( target->r.maxs, maxs );
		VectorCopy( target->r.currentOrigin, target_origin );
		BloodSpurt( ent, target, &tr );

		acc = G_LightningAccuracy( muzzle, forward, mins, maxs, target_origin );
		damage = MAX( round( (float)damage * acc ), 1 );
	}
	else
	{
		gentity_t *tent;

		tent = G_TempEntity( tr.endpos, EV_MISSILE_MISS );
		tent->s.eventParm = DirToByte( tr.plane.normal );
		tent->s.weapon = ent->s.weapon;
		tent->s.generic1 = ent->s.generic1;
	}

	G_UnlaggedOff( );
	G_Damage( target, ent, ent, forward, tr.endpos, damage, DAMAGE_NO_KNOCKBACK, MOD_LIGHTNING );
}
コード例 #3
0
ファイル: g_weapon.c プロジェクト: bmorel/Unvanquished
void massDriverFire( gentity_t *ent )
{
	trace_t   tr;
	vec3_t    end;
	gentity_t *tent;
	gentity_t *traceEnt;

	VectorMA( muzzle, 8192.0f * 16.0f, forward, end );

	G_UnlaggedOn( ent, muzzle, 8192.0f * 16.0f );
	trap_Trace( &tr, muzzle, NULL, NULL, end, ent->s.number, MASK_SHOT );
	G_UnlaggedOff();

	if ( tr.surfaceFlags & SURF_NOIMPACT )
	{
		return;
	}

	traceEnt = &g_entities[ tr.entityNum ];

	// snap the endpos to integers, but nudged towards the line
	SnapVectorTowards( tr.endpos, muzzle );

	// send impact
	if ( traceEnt->takedamage &&
	     ( traceEnt->s.eType == ET_BUILDABLE ||
	       traceEnt->s.eType == ET_PLAYER ) )
	{
		BloodSpurt( ent, traceEnt, &tr );
	}
	else
	{
		tent = G_NewTempEntity( tr.endpos, EV_MISSILE_MISS );
		tent->s.eventParm = DirToByte( tr.plane.normal );
		tent->s.weapon = ent->s.weapon;
		tent->s.generic1 = ent->s.generic1; //weaponMode
	}

	if ( traceEnt->takedamage )
	{
		G_Damage( traceEnt, ent, ent, forward, tr.endpos,
		          MDRIVER_DMG, 0, MOD_MDRIVER );
	}
}
コード例 #4
0
ファイル: g_weapon.c プロジェクト: massivehaxxor/new-edge
void lasGunFire( gentity_t *ent )
{
  trace_t   tr;
  vec3_t    end;
  gentity_t *tent;
  gentity_t *traceEnt;

  G_CombatStats_Fire( ent, CSW_LASGUN, LASGUN_DAMAGE );

  VectorMA( muzzle, 8192 * 16, forward, end );

  G_UnlaggedOn( ent, muzzle, 8192 * 16 );
  trap_Trace( &tr, muzzle, NULL, NULL, end, ent->s.number, MASK_SHOT );
  G_UnlaggedOff( );

  if( tr.surfaceFlags & SURF_NOIMPACT )
  return;

  traceEnt = &g_entities[ tr.entityNum ];

  // snap the endpos to integers, but nudged towards the line
  SnapVectorTowards( tr.endpos, muzzle );

  // send impact
  if( traceEnt->takedamage && 
      (traceEnt->s.eType == ET_BUILDABLE || 
       traceEnt->s.eType == ET_PLAYER ) )
  {
    BloodSpurt( ent, traceEnt, &tr );
  }
  else
  {
    tent = G_TempEntity( tr.endpos, EV_MISSILE_MISS );
    tent->s.eventParm = DirToByte( tr.plane.normal );
    tent->s.weapon = ent->s.weapon;
    tent->s.generic1 = ent->s.generic1; //weaponMode
  }

  if( traceEnt->takedamage )
    G_Damage( traceEnt, ent, ent, forward, tr.endpos, LASGUN_DAMAGE, 0, MOD_LASGUN );
}