void Use_Shooter( gentity_t *ent, gentity_t *other, gentity_t *activator ) { vec3_t dir; float deg; vec3_t up, right; #ifdef SMOKINGUNS gentity_t *missile ; #endif // see if we have a target if ( ent->enemy ) { VectorSubtract( ent->enemy->r.currentOrigin, ent->s.origin, dir ); VectorNormalize( dir ); } else { VectorCopy( ent->movedir, dir ); } // randomize a bit PerpendicularVector( up, dir ); CrossProduct( up, dir, right ); deg = crandom() * ent->random; VectorMA( dir, deg, up, dir ); deg = crandom() * ent->random; VectorMA( dir, deg, right, dir ); VectorNormalize( dir ); switch ( ent->s.weapon ) { #ifndef SMOKINGUNS case WP_GRENADE_LAUNCHER: fire_grenade( ent, ent->s.origin, dir ); break; case WP_ROCKET_LAUNCHER: fire_rocket( ent, ent->s.origin, dir ); break; case WP_PLASMAGUN: fire_plasma( ent, ent->s.origin, dir ); break; #else case WP_DYNAMITE: missile = fire_dynamite( ent, ent->s.origin, dir, ent->speed ? (int)ent->speed : 700 ); // Tequila: Set the explode time from wait attribut if (ent->wait) missile->nextthink = level.time + (int)(ent->wait*1000); // Tequila: Lit the dynamite missile->s.apos.trDelta[0] = missile->nextthink; break; case WP_MOLOTOV: missile = fire_molotov( ent, ent->s.origin, dir, ent->speed ? (int)ent->speed : 700 ); // Tequila: Lit the molotov missile->s.apos.trDelta[0] = 1; break; #endif } G_AddEvent( ent, EV_FIRE_WEAPON, 0 ); }
void Weapon_Plasmagun_Fire (gentity_t *ent) { gentity_t *m; m = fire_plasma (ent, muzzle, forward); m->damage *= s_quadFactor; m->splashDamage *= s_quadFactor; // VectorAdd( m->s.pos.trDelta, ent->client->ps.velocity, m->s.pos.trDelta ); // "real" physics }
void Weapon_Plasmagun_Fire(Gentity *ent) { Gentity *m; m = fire_plasma (ent, muzzle, forward); m->damage *= s_quadFactor; m->splashDamage *= s_quadFactor; }
void Weapon_Plasmagun_Fire (gentity_t *ent) { gentity_t *m; int count; for (count = 0; count < NUM_PLASMASHOTS; count++) { m = fire_plasma(ent, muzzle, forward, right, up); m->damage *= s_quadFactor; m->splashDamage *= s_quadFactor; } // VectorAdd( m->s.pos.trDelta, ent->client->ps.velocity, m->s.pos.trDelta ); // "real" physics }
void Use_Shooter(gentity_t * ent, gentity_t * other, gentity_t * activator) { vec3_t dir; float deg; vec3_t up, right; // see if we have a target if(ent->enemy) { VectorSubtract(ent->enemy->r.currentOrigin, ent->s.origin, dir); VectorNormalize(dir); } else { VectorCopy(ent->movedir, dir); } // randomize a bit PerpendicularVector(up, dir); CrossProduct(up, dir, right); deg = crandom() * ent->random; VectorMA(dir, deg, up, dir); deg = crandom() * ent->random; VectorMA(dir, deg, right, dir); VectorNormalize(dir); switch (ent->s.weapon) { case WP_GRENADE_LAUNCHER: fire_grenade(ent, ent->s.origin, dir); break; case WP_ROCKET_LAUNCHER: fire_rocket(ent, ent->s.origin, dir); break; case WP_PLASMAGUN: fire_plasma(ent, ent->s.origin, dir); break; } G_AddEvent(ent, EV_FIRE_WEAPON, 0); }
void gladbGun(edict_t *self) { vec3_t start; vec3_t dir; vec3_t forward, right; if (!self) { return; } AngleVectors(self->s.angles, forward, right, NULL); G_ProjectSource(self->s.origin, monster_flash_offset[MZ2_GLADIATOR_RAILGUN_1], forward, right, start); /* calc direction to where we targted */ VectorSubtract(self->pos1, start, dir); VectorNormalize(dir); fire_plasma(self, start, dir, 100, 725, 60, 60); }
void weapon_phalanx_fire(edict_t *ent) { vec3_t start; vec3_t forward, right, up; vec3_t offset; vec3_t v; int damage; float damage_radius; int radius_damage; if (!ent) { return; } damage = 70 + (int)(random() * 10.0); radius_damage = 120; damage_radius = 120; if (is_quad) { damage *= 4; radius_damage *= 4; } AngleVectors(ent->client->v_angle, forward, right, NULL); VectorScale(forward, -2, ent->client->kick_origin); ent->client->kick_angles[0] = -2; VectorSet(offset, 0, 8, ent->viewheight - 8); P_ProjectSource(ent->client, ent->s.origin, offset, forward, right, start); if (ent->client->ps.gunframe == 8) { v[PITCH] = ent->client->v_angle[PITCH]; v[YAW] = ent->client->v_angle[YAW] - 1.5; v[ROLL] = ent->client->v_angle[ROLL]; AngleVectors(v, forward, right, up); radius_damage = 30; damage_radius = 120; fire_plasma(ent, start, forward, damage, 725, damage_radius, radius_damage); if (!((int)dmflags->value & DF_INFINITE_AMMO)) { ent->client->pers.inventory[ent->client->ammo_index]--; } } else { v[PITCH] = ent->client->v_angle[PITCH]; v[YAW] = ent->client->v_angle[YAW] + 1.5; v[ROLL] = ent->client->v_angle[ROLL]; AngleVectors(v, forward, right, up); fire_plasma(ent, start, forward, damage, 725, damage_radius, radius_damage); /* send muzzle flash */ gi.WriteByte(svc_muzzleflash); gi.WriteShort(ent - g_edicts); gi.WriteByte(MZ_PHALANX | is_silenced); gi.multicast(ent->s.origin, MULTICAST_PVS); PlayerNoise(ent, start, PNOISE_WEAPON); } ent->client->ps.gunframe++; }