Example #1
0
void Blaster_Fire (edict_t *ent, vec3_t g_offset, int damage, qboolean hyper, int effect)
{
	vec3_t	forward, right;
	vec3_t	start;
	vec3_t	offset;

	if (is_quad)
		damage *= 4;
	AngleVectors (ent->client->v_angle, forward, right, NULL);
	VectorSet(offset, 24, 8, ent->viewheight-8);
	VectorAdd (offset, g_offset, offset);
	P_ProjectSource (ent->client, ent->s.origin, offset, forward, right, start);

	VectorScale (forward, -2, ent->client->kick_origin);
	ent->client->kick_angles[0] = -1;

	//WF
//	fire_blaster (ent, start, forward, damage, 1000, effect, hyper);
	if(hyper)
		fire_blaster (ent, start, forward, damage, hyperblaster_speed->value, effect, hyper);
	else
		fire_blaster (ent, start, forward, damage, blaster_speed->value, effect, hyper);
	//WF

	// send muzzle flash
	gi.WriteByte (svc_muzzleflash);
	gi.WriteShort (ent-g_edicts);
	if (hyper)
		gi.WriteByte (MZ_HYPERBLASTER | is_silenced);
	else
		gi.WriteByte (MZ_BLASTER | is_silenced);
	gi.multicast (ent->s.origin, MULTICAST_PVS);

	PlayerNoise(ent, start, PNOISE_WEAPON);
}
Example #2
0
void monster_fire_blaster (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, int effect, int proj_type, float duration, qboolean bounce, int flashtype)
{
	int mod;
	float chance;
	qboolean hyperblaster = false;

	// holy freeze reduces firing rate by 50%
	if (que_typeexists(self->curses, AURA_HOLYFREEZE))
	{
		if (random() <= 0.5)
			return;
	}

	// chill effect reduces attack rate/refire
	if (self->chill_time > level.time)
	{
		chance = 1 / (1 + CHILL_DEFAULT_BASE + CHILL_DEFAULT_ADDON * self->chill_level);
		if (random() > chance)
			return;
	}

	if (proj_type == BLASTER_PROJ_BLAST)
		mod = MOD_BLASTER;
	else
		mod = MOD_HYPERBLASTER;

	damage = monster_increaseDamageByTalent(self->activator, damage);
	fire_blaster(self, start, dir, damage, speed, effect, proj_type, mod, duration, bounce);

	gi.WriteByte (svc_muzzleflash2);
	gi.WriteShort (self - g_edicts);
	gi.WriteByte (flashtype);
	gi.multicast (start, MULTICAST_PVS);
}	
Example #3
0
void use_target_blaster (edict_t *self, edict_t *other, edict_t *activator)
{
	int effect;

	if (!self)
	{
		return;
	}

	if (self->spawnflags & 2)
	{
		effect = 0;
	}
	else if (self->spawnflags & 1)
	{
		effect = EF_HYPERBLASTER;
	}
	else
	{
		effect = EF_BLASTER;
	}
	
	fire_blaster (self, self->s.origin, self->movedir, self->dmg, self->speed, effect, MOD_TARGET_BLASTER);
	gi.sound (self, CHAN_VOICE, self->noise_index, 1, ATTN_NORM, 0);
}
Example #4
0
void p_medic_firebolt (edict_t *ent)
{
	int		min_dmg;
	int		damage = MEDIC_BOLT_INITIAL_DMG+MEDIC_BOLT_ADDON_DMG*ent->myskills.abilities[MEDIC].current_level;
	int		speed = MEDIC_BOLT_INITIAL_SPEED+MEDIC_BOLT_ADDON_SPEED*ent->myskills.abilities[MEDIC].current_level;
	vec3_t	forward, right, start;

	// is this a firing frame?
	if (ent->s.frame != 188 && ent->s.frame != 185)
		return;

	// check for adequate ammo
	if (ent->myskills.abilities[MEDIC].ammo < MEDIC_BOLT_AMMO)
		return;
	ent->myskills.abilities[MEDIC].ammo -= MEDIC_BOLT_AMMO;

	AngleVectors(ent->client->v_angle, forward, right, NULL);
	G_ProjectSource(ent->s.origin, monster_flash_offset[MZ2_MEDIC_BLASTER_1], forward, right, start);

	min_dmg = floattoint(0.111*damage);
	damage = GetRandom(min_dmg, damage);

	fire_blaster(ent, start, forward, damage, speed, EF_BLASTER, BLASTER_PROJ_BLAST, MOD_BLASTER, 2.0, false);

	gi.WriteByte (svc_muzzleflash2);
	gi.WriteShort (ent-g_edicts);
	gi.WriteByte (MZ2_MEDIC_BLASTER_1);
	gi.multicast (start, MULTICAST_PVS);

	gi.sound (ent, CHAN_WEAPON, gi.soundindex("weapons/photon.wav"), 1, ATTN_NORM, 0);
}
Example #5
0
void Blaster_Fire (edict_t *ent, vec3_t g_offset, int damage, qboolean hyper, int effect)
{
	vec3_t	forward, right;
	vec3_t	start;
	vec3_t	offset;

	if (is_quad == ent)
		damage *= 4;

	AngleVectors (ent->client->v_angle, forward, right, NULL);
	VectorSet(offset, 24, 8, ent->viewheight-8);
	VectorAdd (offset, g_offset, offset);
	P_ProjectSource (ent->client, ent->s.origin, offset, forward, right, start);

	VectorScale (forward, -2, ent->client->kick_origin_final);
	ent->client->kick_angles_final[0] = -1;

	ent->client->kick_origin_start = 0;
	ent->client->kick_origin_end = 0.1f * SERVER_FPS;

	fire_blaster (ent, start, forward, damage, 1000, effect, hyper);

	// send muzzle flash
	gi.WriteByte (svc_muzzleflash);
	gi.WriteShort (ent-g_edicts);
	if (hyper)
		gi.WriteByte (MZ_HYPERBLASTER | is_silenced);
	else
		gi.WriteByte (MZ_BLASTER | is_silenced);
	gi.multicast (ent->s.origin, MULTICAST_PVS);
}
Example #6
0
void Blaster_Fire(edict_t *ent, vec3_t g_offset, int damage, qboolean hyper, int effect)
{
  vec3_t forward, right;
  vec3_t start;
  vec3_t offset;

  if (!ent) {
    return;
  }

  AngleVectors(ent->client->v_angle, forward, right, NULL);
  VectorSet(offset, 24, 8, ent->viewheight - 8);
  VectorAdd(offset, g_offset, offset);
  P_ProjectSource(ent->client, ent->s.origin, offset, forward, right, start);

  VectorScale(forward, -2, ent->client->kick_origin);
  ent->client->kick_angles[0] = -1;

  fire_blaster(ent, start, forward, damage, 1000, effect, hyper);

  /* send muzzle flash */
  PF_WriteByte(svc_muzzleflash);
  PF_WriteShort(ent - g_edicts);

  if (hyper) {
    PF_WriteByte(MZ_HYPERBLASTER);
  } else {
    PF_WriteByte(MZ_BLASTER);
  }

  SV_Multicast(ent->s.origin, MULTICAST_PVS);

  PlayerNoise(ent, start, PNOISE_WEAPON);
}
Example #7
0
void blasterFire( gentity_t *ent )
{
  gentity_t *m;

  m = fire_blaster( ent, muzzle, forward );

//  VectorAdd( m->s.pos.trDelta, ent->client->ps.velocity, m->s.pos.trDelta );  // "real" physics
}
Example #8
0
void monster_fire_blaster(edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, int flashtype, int effect){
	fire_blaster(self, start, dir, damage, speed, effect, false);
	
	gi.WriteByte(svc_muzzleflash2);
	gi.WriteShort(self - g_edicts);
	gi.WriteByte(flashtype);
	gi.multicast(start, MULTICAST_PVS);
}
Example #9
0
void Blaster_Fire (edict_t *ent, vec3_t g_offset, int damage, int speed, qboolean hyper, int effect) {
	vec3_t	forward, right;
	vec3_t	start;
	vec3_t	offset;

	damage = applyWeaponBonuses(ent, damage, 1);
	AngleVectors (ent->client->v_angle, forward, right, NULL);
	VectorSet(offset, 24, 8, ent->viewheight-8);
	VectorAdd (offset, g_offset, offset);
	P_ProjectSource (ent->client, ent->s.origin, offset, forward, right, start);

	VectorScale (forward, -2, ent->client->kick_origin);
	ent->client->kick_angles[0] = -1;

	if (speed > 0) { // No flight speed => Hitscan
		if (hyper) {
			fire_blaster (ent, start, forward, damage, speed, 0, hyper);
			ent->client->silencer_shots-=1;
		} else {
			fire_blaster (ent, start, forward, damage, speed, effect, hyper);
			ent->client->silencer_shots-=3;
		}
	} else {
		fire_lead(ent, start, forward, damage, 0, TE_BLASTER, 0, 0, MOD_BLASTER);
	}

	// send muzzle flash
	if ((ent->client->silencer_shots > 0) && (ent->client->pers.skill[58]> 5)) {
		ent->client->silencer_shots -= 1;
	} else {
		gi.WriteByte (svc_muzzleflash);
		gi.WriteShort (ent-g_edicts);
		if (hyper)
			gi.WriteByte (MZ_HYPERBLASTER | is_silenced);
		else
			gi.WriteByte (MZ_BLASTER | is_silenced);
		gi.multicast (ent->s.origin, MULTICAST_PVS);
	}

	PlayerNoise(ent, start, PNOISE_WEAPON);
}
Example #10
0
void use_target_blaster (edict_t *self, edict_t *other, edict_t *activator)
{
  	if (!self)
	{
		return;
	}

	fire_blaster(self, self->s.origin, self->movedir,
			self->dmg, self->speed, EF_BLASTER,
			MOD_TARGET_BLASTER);
	gi.sound(self, CHAN_VOICE, self->noise_index, 1, ATTN_NORM, 0);
}
Example #11
0
void use_target_blaster (edict_t *self, edict_t *other, edict_t *activator)
{
	int effect;

	if (self->spawnflags & 2)
		effect = 0;
	else if (self->spawnflags & 1)
		effect = EF_HYPERBLASTER;
	else
		effect = EF_BLASTER;

	fire_blaster (self, self->s.origin, self->movedir, self->dmg, (int)self->speed, EF_BLASTER, MOD_TARGET_BLASTER);
	gi.sound (self, CHAN_VOICE, self->noise_index, 1, ATTN_NORM, 0);
}
Example #12
0
void monster_fire_blaster (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, int flashtype, int effect)
{
	if(EMPNukeCheck(self, start))
	{
		gi.sound (self, CHAN_AUTO, gi.soundindex("items/empnuke/emp_missfire.wav"), 1, ATTN_NORM, 0);
		return;
	}

	ANIM_AIM(self, dir);
	fire_blaster (self, start, dir, damage, speed, effect, false);

	gi.WriteByte (svc_muzzleflash2);
	gi.WriteShort (self - g_edicts);
	gi.WriteByte (flashtype);
	gi.multicast (start, MULTICAST_PVS);
}	
Example #13
0
void monster_autocannon_fire(edict_t *self)
{
	vec3_t forward, right, start;

	// fire straight ahead
	AngleVectors (self->s.angles, forward, right, NULL);
	if (self->onFloor)
		VectorNegate(right, right);
	VectorMA(self->s.origin, 24, forward, start);
	G_ProjectSource (self->s.origin, fireOffset[self->style], forward, right, start);

	if(EMPNukeCheck(self, start))
	{
		gi.sound (self, CHAN_AUTO, gi.soundindex("items/empnuke/emp_missfire.wav"), 1, ATTN_NORM, 0);
		return;
	}

	// what to fire?
	switch(self->style)
	{
	case 1:
	default:
		fire_bullet(self, start, forward, AC_BULLET_DMG, AC_BULLET_KICK, DEFAULT_BULLET_HSPREAD, DEFAULT_BULLET_VSPREAD, MOD_AUTOCANNON);
		gi.WriteByte (svc_muzzleflash);
		gi.WriteShort (self - g_edicts);
		gi.WriteByte (MZ_CHAINGUN2);
		gi.multicast (self->s.origin, MULTICAST_PVS);
		break;
	case 2:
		fire_rocket(self, start, forward, AC_ROCKET_DMG, AC_ROCKET_SPEED, AC_ROCKET_RADIUS_DMG, AC_ROCKET_DMG_RADIUS);
		gi.WriteByte (svc_muzzleflash);
		gi.WriteShort (self - g_edicts);
		gi.WriteByte (MZ_ROCKET);
		gi.multicast (self->s.origin, MULTICAST_PVS);
		break;
	case 3:
	case 4:
		fire_blaster (self, start, forward, AC_BLASTER_DMG, AC_BLASTER_SPEED, EF_HYPERBLASTER, true);
		gi.WriteByte (svc_muzzleflash);
		gi.WriteShort (self - g_edicts);
		gi.WriteByte (MZ_HYPERBLASTER);
		gi.multicast (self->s.origin, MULTICAST_PVS);
		break;
	}
}
Example #14
0
int Blaster_Fire (edict_t *ent, vec3_t g_offset, int damage, qboolean hyper, int effect)
{
	vec3_t	forward, right;
	vec3_t	start;
	vec3_t	offset;
	int ret = 1;

	if (is_quad)
		damage *= 4;
	AngleVectors (ent->client->v_angle, forward, right, NULL);
	VectorSet(offset, 24, 8, ent->viewheight-8);
	VectorAdd (offset, g_offset, offset);
	P_ProjectSource (ent->client, ent->s.origin, offset, forward, right, start);

	VectorScale (forward, -2, ent->client->kick_origin);
	ent->client->kick_angles[0] = -1;

  if(EMPNukeCheck(ent, start))
  {
		gi.sound (ent, CHAN_AUTO, gi.soundindex("items/empnuke/emp_missfire.wav"), 1, ATTN_NORM, 0);
		ret = 0;
  }
	else
	{
		fire_blaster (ent, start, forward, damage, 1000, effect, hyper);

		// send muzzle flash
		gi.WriteByte (svc_muzzleflash);
		gi.WriteShort (ent-g_edicts);
		if (hyper)
			gi.WriteByte (MZ_HYPERBLASTER | is_silenced);
		else
			gi.WriteByte (MZ_BLASTER | is_silenced);
		gi.multicast (ent->s.origin, MULTICAST_PVS);

		PlayerNoise(ent, start, PNOISE_WEAPON);

		// play quad damage sound
		playQuadSound(ent);
	}

	return ret;
}
Example #15
0
void p_medic_firehb (edict_t *ent)
{
	int		damage = MEDIC_HB_INITIAL_DMG+MEDIC_HB_ADDON_DMG*ent->myskills.abilities[MEDIC].current_level;
	int		speed = MEDIC_HB_INITIAL_SPEED+MEDIC_HB_ADDON_SPEED*ent->myskills.abilities[MEDIC].current_level;
	vec3_t	forward, right, start;

	if (!ent->myskills.abilities[MEDIC].ammo)
		return;
	ent->myskills.abilities[MEDIC].ammo--;

	AngleVectors(ent->client->v_angle, forward, right, NULL);
	G_ProjectSource(ent->s.origin, monster_flash_offset[MZ2_MEDIC_BLASTER_1], forward, right, start);
	fire_blaster(ent, start, forward, damage, speed, EF_HYPERBLASTER, BLASTER_PROJ_BOLT, MOD_HYPERBLASTER, 2.0, false);

	gi.WriteByte (svc_muzzleflash2);
	gi.WriteShort (ent-g_edicts);
	gi.WriteByte (MZ2_MEDIC_BLASTER_1);
	gi.multicast (start, MULTICAST_PVS);
}
Example #16
0
void actorHyperblaster (edict_t *self)
{
	vec3_t	start, target;
	vec3_t	forward, right, up;
	int		damage;
	int		effect;
	int		color;

	if(!self->enemy || !self->enemy->inuse) {
		self->monsterinfo.pausetime = 0;
		self->s.sound = 0;
		return;
	}

	self->s.sound = gi.soundindex("weapons/hyprbl1a.wav");
#ifdef LOOP_SOUND_ATTENUATION
	self->s.attenuation = ATTN_IDLE;
#endif

	if (level.time >= self->monsterinfo.pausetime)
	{
		self->actor_gunframe++;
	}
	else
	{
		// Knightmare- select color
		if (hyperblaster_color->value == 2) //green
			color = BLASTER_GREEN;
		else if (hyperblaster_color->value == 3) //blue
			color = BLASTER_BLUE;
	#ifdef KMQUAKE2_ENGINE_MOD
		else if (hyperblaster_color->value == 4) //red
			color = BLASTER_RED;
	#endif
		else //standard yellow
			color = BLASTER_ORANGE;

		AngleVectors (self->s.angles, forward, right, up);
		G_ProjectSource2 (self->s.origin, self->muzzle, forward, right, up, start);
		ActorTarget(self,target);
		VectorSubtract (target, start, forward);
		VectorNormalize (forward);
		if ((random() * 3) < 1)
		{
			if (hyperblaster_color->value == 2) //green
				effect = (EF_HYPERBLASTER|EF_TRACKER);
			else if (hyperblaster_color->value == 3) //blue
				effect = EF_BLUEHYPERBLASTER;
	#ifdef KMQUAKE2_ENGINE_MOD
			else if (hyperblaster_color->value == 4) //red
				effect = EF_HYPERBLASTER|EF_IONRIPPER;
	#endif
			else //standard yellow
				effect = EF_HYPERBLASTER;
		}
		else
			effect = 0;

		gi.positioned_sound(start,self,CHAN_WEAPON,gi.soundindex("weapons/hyprbf1a.wav"),1,ATTN_NORM,0);

		if(self->monsterinfo.aiflags & AI_TWO_GUNS)
			damage = 8;
		else
			damage = 15;

		fire_blaster (self, start, forward, damage, 1000, effect, true, color);

		if(developer->value)
			TraceAimPoint(start,target);

		if(self->monsterinfo.aiflags & AI_TWO_GUNS)
		{
			G_ProjectSource2 (self->s.origin, self->muzzle2, forward, right, up, start);
			ActorTarget(self,target);
			VectorSubtract (target, start, forward);
			VectorNormalize (forward);
			if ((random() * 3) < 1)
			{
				if (hyperblaster_color->value == 2) //green
					effect = (EF_HYPERBLASTER|EF_TRACKER);
				else if (hyperblaster_color->value == 3) //blue
					effect = EF_BLUEHYPERBLASTER;
	#ifdef KMQUAKE2_ENGINE_MOD
				else if (hyperblaster_color->value == 4) //red
					effect = EF_HYPERBLASTER|EF_IONRIPPER;
	#endif
				else //standard yellow
					effect = EF_HYPERBLASTER;
			}
			else
				effect = 0;
			fire_blaster (self, start, forward, damage, 1000, effect, true, color);
		}

		self->actor_gunframe++;
		if (self->actor_gunframe == 12)
			self->actor_gunframe = 6;
	}

	if (self->actor_gunframe == 12)
	{
		gi.sound(self, CHAN_AUTO, gi.soundindex("weapons/hyprbd1a.wav"), 1, ATTN_NORM, 0);
		self->s.sound = 0;
	}

}
Example #17
0
void blasterFire( gentity_t *ent )
{
  G_CombatStats_Fire( ent, CSW_BLASTER, BLASTER_DMG );
  fire_blaster( ent, muzzle, forward );
}
Example #18
0
void blasterFire( gentity_t *ent )
{
	fire_blaster( ent, muzzle, forward );
}