コード例 #1
0
ファイル: g_weapon.c プロジェクト: artemalive/Quake-III-Arena
/*
===============
FireWeapon
===============
*/
void FireWeapon( gentity_t *ent ) {
	if (ent->client->ps.powerups[PW_QUAD] ) {
		s_quadFactor = g_quadfactor.value;
	} else {
		s_quadFactor = 1;
	}

	// track shots taken for accuracy tracking.  Grapple is not a weapon and gauntet is just not tracked
	if( ent->s.weapon != WP_GRAPPLING_HOOK && ent->s.weapon != WP_GAUNTLET ) {
		ent->client->accuracy_shots++;
	}

	// set aiming directions
	AngleVectors (ent->client->ps.viewangles, forward, right, up);

	CalcMuzzlePointOrigin ( ent, ent->client->oldOrigin, forward, right, up, muzzle );

	// fire the specific weapon
	switch( ent->s.weapon ) {
	case WP_GAUNTLET:
		Weapon_Gauntlet( ent );
		break;
	case WP_LIGHTNING:
		Weapon_LightningFire( ent );
		break;
	case WP_SHOTGUN:
		weapon_supershotgun_fire( ent );
		break;
	case WP_MACHINEGUN:
		if ( g_gametype.integer != GT_TEAM ) {
			Bullet_Fire( ent, MACHINEGUN_SPREAD, MACHINEGUN_DAMAGE );
		} else {
			Bullet_Fire( ent, MACHINEGUN_SPREAD, MACHINEGUN_TEAM_DAMAGE );
		}
		break;
	case WP_GRENADE_LAUNCHER:
		weapon_grenadelauncher_fire( ent );
		break;
	case WP_ROCKET_LAUNCHER:
		Weapon_RocketLauncher_Fire( ent );
		break;
	case WP_PLASMAGUN:
		Weapon_Plasmagun_Fire( ent );
		break;
	case WP_RAILGUN:
		weapon_railgun_fire( ent );
		break;
	case WP_BFG:
		BFG_Fire( ent );
		break;
	case WP_GRAPPLING_HOOK:
		Weapon_GrapplingHook_Fire( ent );
		break;
	default:
// FIXME		G_Error( "Bad ent->s.weapon" );
		break;
	}
}
コード例 #2
0
ファイル: g_weapon.c プロジェクト: monoknot/loaded-q3a
/*
===============
FireWeapon
===============
*/
void FireWeapon( gentity_t *ent ) {
	if (ent->client->ps.powerups[PW_QUAD] ) {
		s_quadFactor = g_quadfactor.value;
	} else {
		s_quadFactor = 1;
	}
#ifdef MISSIONPACK
	if( ent->client->persistantPowerup && ent->client->persistantPowerup->item && ent->client->persistantPowerup->item->giTag == PW_DOUBLER ) {
		s_quadFactor *= 2;
	}
#endif

	// track shots taken for accuracy tracking.  Grapple is not a weapon and gauntet is just not tracked
	if( ent->s.weapon != WP_GRAPPLING_HOOK && ent->s.weapon != WP_GAUNTLET ) {
#ifdef MISSIONPACK
		if( ent->s.weapon == WP_NAILGUN ) {
			ent->client->accuracy_shots += NUM_NAILSHOTS;
		} else {
			ent->client->accuracy_shots++;
		}
#else
		ent->client->accuracy_shots++;
#endif
	}

	// set aiming directions
	AngleVectors (ent->client->ps.viewangles, forward, right, up);

	CalcMuzzlePointOrigin ( ent, ent->client->oldOrigin, forward, right, up, muzzle );

	// fire the specific weapon
	switch( ent->s.weapon ) {
	case WP_GAUNTLET:
		Weapon_Gauntlet( ent );
		break;
	case WP_LIGHTNING:
		Weapon_LightningFire( ent );
		break;
	case WP_SHOTGUN:
		weapon_supershotgun_fire( ent );
		break;
	case WP_MACHINEGUN:

		/* LQ3A */
		Bullet_Fire(ent, (g_damageBulletSpread.integer > 0) ? g_damageBulletSpread.integer : 0,
			(g_damageBullet.integer > 0) ? g_damageBullet.integer : 0);
		break;
	case WP_GRENADE_LAUNCHER:
		weapon_grenadelauncher_fire( ent );
		break;
	case WP_ROCKET_LAUNCHER:
		Weapon_RocketLauncher_Fire( ent );
		break;
	case WP_PLASMAGUN:
		Weapon_Plasmagun_Fire( ent );
		break;
	case WP_RAILGUN:
		weapon_railgun_fire( ent );
		break;
	case WP_BFG:
		BFG_Fire( ent );
		break;
	case WP_GRAPPLING_HOOK:
		Weapon_GrapplingHook_Fire( ent );
		break;
#ifdef MISSIONPACK
	case WP_NAILGUN:
		Weapon_Nailgun_Fire( ent );
		break;
	case WP_PROX_LAUNCHER:
		weapon_proxlauncher_fire( ent );
		break;
	case WP_CHAINGUN:
		/* LQ3A */
		Bullet_Fire( ent, CHAINGUN_SPREAD, (g_damageBullet.integer > 0) ? g_damageBullet.integer : 0);
		break;
#endif
	default:
// FIXME		G_Error( "Bad ent->s.weapon" );
		break;
	}
}
コード例 #3
0
ファイル: weapon.c プロジェクト: icanhas/yantar
void
FireWeapon(Gentity *ent, Weapslot slot)
{
	Weapon w;
	
	if(slot >= WSnumslots){
		G_Printf("bad weapslot %u\n", slot);
		return;
	}
	w = ent->s.weap[slot];

	if(ent->client->ps.powerups[PW_QUAD])
		s_quadFactor = g_quadfactor.value;
	else
		s_quadFactor = 1;

#ifdef MISSIONPACK
	if(ent->client->persistantPowerup &&
	   ent->client->persistantPowerup->item &&
	   ent->client->persistantPowerup->item->tag == PW_DOUBLER)
		s_quadFactor *= 2;

#endif

	/* track shots taken for accuracy tracking.  Grapple is not a weapon and gauntet is just not tracked */
	if(w != Whook && w != Wmelee && w != Whominglauncher){
		if(w == Wnanoidcannon)
			ent->client->accuracy_shots += Nnanoshots;
		else
			ent->client->accuracy_shots++;
	}

	/* set aiming directions */
	anglev3s(ent->client->ps.viewangles, forward, right, up);

	CalcMuzzlePointOrigin(ent, ent->client->oldOrigin, forward, right, up,
		muzzle);

	/* fire the specific weapon */
	switch(w){
	case Wmelee:
		Weapon_Gauntlet(ent);
		break;
	case Wlightning:
		Weapon_LightningFire(ent);
		break;
	case Wshotgun:
		weapon_supershotgun_fire(ent);
		break;
	case Wnanoidcannon:
		firenanoidcannon(ent);
		break;
	case Wmachinegun:
		if(g_gametype.integer != GT_TEAM)
			Bullet_Fire(ent, MACHINEGUN_SPREAD, MACHINEGUN_DAMAGE);
		else
			Bullet_Fire(ent, MACHINEGUN_SPREAD, MACHINEGUN_TEAM_DAMAGE);
		break;
	case Wplasmagun:
		Weapon_Plasmagun_Fire(ent);
		break;
	case Wrailgun:
		weapon_railgun_fire(ent);
		break;
	case Wchaingun:
		Bullet_Fire(ent, CHAINGUN_SPREAD, MACHINEGUN_DAMAGE);
		break;
	case Wgrenadelauncher:
		weapon_grenadelauncher_fire(ent);
		break;
	case Wrocketlauncher:
		Weapon_RocketLauncher_Fire(ent);
		break;
	case Whominglauncher:
		firehominglauncher(ent);
		break;
	case Wproxlauncher:
		weapon_proxlauncher_fire(ent);
		break;
	case Whook:
		Weapon_GrapplingHook_Fire(ent);
		break;
	default:
		G_Printf("bad weap %u (slot %u)\n", w, slot);
		break;
	}
}