/* =============== 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; } }
/* =============== FireWeapon =============== */ void FireWeapon( gentity_t *ent, int weaponTime ) { // track shots taken for accuracy tracking. if( qtrue ) { ent->client->accuracy_shots++; } // set aiming directions AngleVectors( ent->client->ps.viewangles, forward, right, up); CalcMuzzlePointOrigin( ent, ent->client->oldOrigin, forward, right, up, muzzle ); // compensate for lag G_CalcLagTimeAndShiftAllClients( ent ); // fire the specific weapon switch( weLi[ent->s.weapon].prediction ) { case PR_MELEE: // no weapon function needed here (look at g_active.c) break; case PR_BULLET: weapon_bullet_fire( ent ); break; case PR_PELLETS: weapon_shotgun_fire( ent ); break; case PR_MISSILE: weapon_missile_fire( ent, weaponTime ); break; case PR_FLAME: weapon_flamethrower_fire( ent ); break; case PR_OMEGA: weapon_omega_fire( ent, weaponTime ); break; case PR_BEAM: weapon_beam_fire( ent ); break; case PR_NONE: if ( ent->s.weapon == WP_BLAST ) weapon_blast_fire( ent ); break; default: // shouldn't happen break; } // move the clients back to their proper positions if ( level.delagWeapons && ent->client && !(ent->r.svFlags & SVF_BOT) ) { G_UnTimeShiftAllClients( ent ); } }
/* =============== 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; } }
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; } }