예제 #1
0
void weapon_shotgun_fire (gentity_t *ent) {
	gentity_t		*tent;

	// send shotgun blast
	tent = G_TempEntity( muzzle, EV_SHOTGUN );
	VectorScale( forward, 4096, tent->s.origin2 );
	SnapVector( tent->s.origin2 );
	tent->s.otherEntityNum = ent->s.number;

	shotEnt = NULL;
	ShotgunPattern( tent->s.pos.trBase, tent->s.origin2, ent );

	if ( shotEnt && shotEnt->takedamage && shotEnt->client && level.delagWeapons && shotEnt->client && !(ent->r.svFlags & SVF_BOT) ) { 
		vec3_t	delta;
		float	distance;
		
		// compensate for lag effects
		VectorSubtract( shotEnt->r.currentOrigin, ent->r.currentOrigin, delta );
		distance = VectorLength( delta );
		VectorSubtract( shotEnt->client->saved.currentOrigin, shotEnt->r.currentOrigin, delta );
		VectorMA( tent->s.origin2, 4096 / distance, delta, tent->s.origin2 );

		SnapVector( tent->s.origin2 );
	}
}
예제 #2
0
void weapon_supershotgun_fire (gentity_t *ent) {
	gentity_t		*tent;

	// send shotgun blast
	tent = G_TempEntity( muzzle, EV_SHOTGUN );
	VectorScale( forward, 4096, tent->s.origin2 );
	SnapVector( tent->s.origin2 );
	tent->s.eventParm = 255;		// seed for spread pattern
	tent->s.otherEntityNum = ent->s.number;

	ShotgunPattern( tent->s.pos.trBase, tent->s.origin2, tent->s.eventParm, ent );
}
예제 #3
0
void shotgunFire( gentity_t *ent )
{
	gentity_t *tent;

	// send shotgun blast
	tent = G_NewTempEntity( muzzle, EV_SHOTGUN );
	VectorScale( forward, 4096, tent->s.origin2 );
	SnapVector( tent->s.origin2 );
	tent->s.eventParm = rand() / ( RAND_MAX / 0x100 + 1 ); // seed for spread pattern
	tent->s.otherEntityNum = ent->s.number;
	G_UnlaggedOn( ent, muzzle, SHOTGUN_RANGE );
	ShotgunPattern( tent->s.pos.trBase, tent->s.origin2, tent->s.eventParm, ent );
	G_UnlaggedOff();
}
예제 #4
0
파일: weapon.c 프로젝트: icanhas/yantar
void
weapon_supershotgun_fire(Gentity *ent)
{
	Gentity *tent;

	/* send shotgun blast */
	tent = G_TempEntity(muzzle, EV_SHOTGUN);
	scalev3(forward, 4096, tent->s.origin2);
	snapv3(tent->s.origin2);
	tent->s.eventParm = rand() & 255;	/* seed for spread pattern */
	tent->s.otherEntityNum = ent->s.number;
	ShotgunPattern(tent->s.traj.base, tent->s.origin2, tent->s.eventParm,
		ent);
}
예제 #5
0
파일: g_weapon.c 프로젝트: guzza/Xserver
void shotgunFire( gentity_t *ent )
{
    gentity_t    *tent;

    // send shotgun blast
    tent = G_TempEntity( muzzle, EV_SHOTGUN );
    VectorScale( forward, 4096, tent->s.origin2 );
    SnapVector( tent->s.origin2 );
    tent->s.eventParm = rand() & 255;    // seed for spread pattern
    tent->s.otherEntityNum = ent->s.number;
    G_UnlaggedOn( muzzle, 8192 * 16 );
    ShotgunPattern( tent->s.pos.trBase, tent->s.origin2, tent->s.eventParm, ent );
    G_UnlaggedOff();
}
예제 #6
0
static void FireShotgun( gentity_t *self )
{
	gentity_t *tent;

	// instead of an EV_WEAPON_HIT_* event, send this so client can generate the same spread pattern
	tent = G_NewTempEntity( muzzle, EV_SHOTGUN );
	VectorScale( forward, 4096, tent->s.origin2 );
	SnapVector( tent->s.origin2 );
	tent->s.eventParm = rand() / ( RAND_MAX / 0x100 + 1 ); // seed for spread pattern
	tent->s.otherEntityNum = self->s.number;

	// caclulate the pattern and do the damage
	G_UnlaggedOn( self, muzzle, SHOTGUN_RANGE );
	ShotgunPattern( tent->s.pos.trBase, tent->s.origin2, tent->s.eventParm, self );
	G_UnlaggedOff();
}
예제 #7
0
void weapon_supershotgun_fire (gentity_t *ent) {
	gentity_t		*tent;

	// send shotgun blast
	tent = G_TempEntity( muzzle, EV_SHOTGUN );
	VectorScale( forward, 4096, tent->s.origin2 );
	SnapVector( tent->s.origin2 );
	tent->s.eventParm = rand() & 255;		// seed for spread pattern
//unlagged - attack prediction #2
	if ( g_unlagged.integer ) {
		// this has to be something the client can predict now
		tent->s.eventParm = ent->client->attackTime % 256; // seed for spread pattern
	} else {
		tent->s.eventParm = rand() & 255;		// seed for spread pattern
	}
//unlagged - attack prediction #2
	tent->s.otherEntityNum = ent->s.number;

	ShotgunPattern( tent->s.pos.trBase, tent->s.origin2, tent->s.eventParm, ent );
}