void weapon_shotgun_fire(edict_t *ent) { vec3_t start; vec3_t forward, right; vec3_t offset; int damage = 4; int kick = 8; if (!ent) { return; } if (ent->client->ps.gunframe == 9) { ent->client->ps.gunframe++; return; } 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 (is_quad) { damage *= 4; kick *= 4; } if (deathmatch->value) { fire_shotgun(ent, start, forward, damage, kick, 500, 500, DEFAULT_DEATHMATCH_SHOTGUN_COUNT, MOD_SHOTGUN); } else { fire_shotgun(ent, start, forward, damage, kick, 500, 500, DEFAULT_SHOTGUN_COUNT, MOD_SHOTGUN); } /* send muzzle flash */ gi.WriteByte(svc_muzzleflash); gi.WriteShort(ent - g_edicts); gi.WriteByte(MZ_SHOTGUN | is_silenced); gi.multicast(ent->s.origin, MULTICAST_PVS); ent->client->ps.gunframe++; PlayerNoise(ent, start, PNOISE_WEAPON); if (!((int)dmflags->value & DF_INFINITE_AMMO)) { ent->client->pers.inventory[ent->client->ammo_index]--; } }
void weapon_supershotgun_fire(edict_t *ent) { vec3_t start; vec3_t forward, right; vec3_t offset; vec3_t v; int damage = 6; int kick = 12; if (!ent) { return; } 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 (is_quad) { damage *= 4; kick *= 4; } v[PITCH] = ent->client->v_angle[PITCH]; v[YAW] = ent->client->v_angle[YAW] - 5; v[ROLL] = ent->client->v_angle[ROLL]; AngleVectors(v, forward, NULL, NULL); fire_shotgun(ent, start, forward, damage, kick, DEFAULT_SHOTGUN_HSPREAD, DEFAULT_SHOTGUN_VSPREAD, DEFAULT_SSHOTGUN_COUNT / 2, MOD_SSHOTGUN); v[YAW] = ent->client->v_angle[YAW] + 5; AngleVectors(v, forward, NULL, NULL); fire_shotgun(ent, start, forward, damage, kick, DEFAULT_SHOTGUN_HSPREAD, DEFAULT_SHOTGUN_VSPREAD, DEFAULT_SSHOTGUN_COUNT / 2, MOD_SSHOTGUN); /* send muzzle flash */ gi.WriteByte(svc_muzzleflash); gi.WriteShort(ent - g_edicts); gi.WriteByte(MZ_SSHOTGUN | is_silenced); gi.multicast(ent->s.origin, MULTICAST_PVS); ent->client->ps.gunframe++; PlayerNoise(ent, start, PNOISE_WEAPON); if (!((int)dmflags->value & DF_INFINITE_AMMO)) { ent->client->pers.inventory[ent->client->ammo_index] -= 2; } }
//Super Shotgun void actorSuperShotgun (edict_t *self) { vec3_t start, target; vec3_t forward, right, up; vec3_t angles; if(!self->enemy || !self->enemy->inuse) return; AngleVectors (self->s.angles, forward, right, up); if(self->monsterinfo.aiflags & AI_TWO_GUNS) { if(self->framenumbers % 2) G_ProjectSource2 (self->s.origin, self->muzzle2, forward, right, up, start); else G_ProjectSource2 (self->s.origin, self->muzzle, forward, right, up, start); self->framenumbers++; } else G_ProjectSource2 (self->s.origin, self->muzzle, forward, right, up, start); ActorTarget(self,target); VectorSubtract (target, start, forward); VectorNormalize (forward); vectoangles(forward,angles); angles[YAW] -= 5; AngleVectors(angles,forward,NULL,NULL); fire_shotgun (self, start, forward, 6, 12, DEFAULT_SHOTGUN_HSPREAD, DEFAULT_SHOTGUN_VSPREAD, DEFAULT_SSHOTGUN_COUNT/2, MOD_SSHOTGUN); angles[YAW] += 10; AngleVectors(angles,forward,NULL,NULL); fire_shotgun (self, start, forward, 6, 12, DEFAULT_SHOTGUN_HSPREAD, DEFAULT_SHOTGUN_VSPREAD, DEFAULT_SSHOTGUN_COUNT/2, MOD_SSHOTGUN); gi.WriteByte(svc_temp_entity); gi.WriteByte(TE_CHAINFIST_SMOKE); gi.WritePosition(start); gi.multicast(start, MULTICAST_PVS); gi.positioned_sound(start,self,CHAN_WEAPON,gi.soundindex("weapons/sshotf1b.wav"),1,ATTN_NORM,0); if(self->flash) { VectorCopy(start,self->flash->s.origin); self->flash->s.frame = 0; self->flash->think = muzzleflash_think; self->flash->wait = level.time + FRAMETIME; self->flash->think(self->flash); } if(developer->value) { if (!(self->monsterinfo.aiflags & AI_TWO_GUNS) || (self->framenumbers % 2)) TraceAimPoint(start,target); } }
void weapon_supershotgun_fire (edict_t *ent) { vec3_t start; vec3_t forward, right; vec3_t offset; vec3_t v; int damage = 6; int kick = 12; AngleVectors (ent->client->v_angle, forward, right, NULL); VectorScale (forward, -2, ent->client->kick_origin_final); ent->client->kick_angles_final[0] = -2; ent->client->kick_origin_start = 0; ent->client->kick_origin_end = 0.1f * SERVER_FPS; VectorSet(offset, 0, 8, ent->viewheight-8); P_ProjectSource (ent->client, ent->s.origin, offset, forward, right, start); if (is_quad == ent) { damage *= 4; kick *= 4; } TDM_BeginDamage (); v[PITCH] = ent->client->v_angle[PITCH]; v[YAW] = ent->client->v_angle[YAW] - 5; v[ROLL] = ent->client->v_angle[ROLL]; AngleVectors (v, forward, NULL, NULL); fire_shotgun (ent, start, forward, damage, kick, DEFAULT_SHOTGUN_HSPREAD, DEFAULT_SHOTGUN_VSPREAD, DEFAULT_SSHOTGUN_COUNT/2, MOD_SSHOTGUN); v[YAW] = ent->client->v_angle[YAW] + 5; AngleVectors (v, forward, NULL, NULL); fire_shotgun (ent, start, forward, damage, kick, DEFAULT_SHOTGUN_HSPREAD, DEFAULT_SHOTGUN_VSPREAD, DEFAULT_SSHOTGUN_COUNT/2, MOD_SSHOTGUN); TDM_EndDamage (); TDM_WeaponFired (ent); // send muzzle flash gi.WriteByte (svc_muzzleflash); gi.WriteShort (ent-g_edicts); gi.WriteByte (MZ_SSHOTGUN | is_silenced); gi.multicast (ent->s.origin, MULTICAST_PVS); ent->client->ps.gunframe++; if (! ( (int)dmflags->value & DF_INFINITE_AMMO ) ) ent->client->inventory[ent->client->ammo_index] -= 2; }
void weapon_shotgun_fire (edict_t *ent) { vec3_t start; vec3_t forward, right; vec3_t offset; int damage = sg_damage->value; int kick = sg_kick->value; if (ent->client->ps.gunframe == 9) { ent->client->ps.gunframe++; return; } 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 (is_quad) { damage *= 4; kick *= 4; } //DB if (is_strength) damage *= 2; if (deathmatch->value) fire_shotgun (ent, start, forward, damage, kick, 500, 500, DEFAULT_DEATHMATCH_SHOTGUN_COUNT, MOD_SHOTGUN); else fire_shotgun (ent, start, forward, damage, kick, 500, 500, DEFAULT_SHOTGUN_COUNT, MOD_SHOTGUN); // send muzzle flash gi.WriteByte (svc_muzzleflash); gi.WriteShort (ent-g_edicts); gi.WriteByte (MZ_SHOTGUN | is_silenced); gi.multicast (ent->s.origin, MULTICAST_PVS); ent->client->ps.gunframe++; PlayerNoise(ent, start, PNOISE_WEAPON); //RAV //allow for camper checking ent->client->check_camping = true; // if (! ( dmflag & DF_INFINITE_AMMO ) ) ent->client->pers.inventory[ent->client->ammo_index]--; }
void monster_fire_shotgun (edict_t *self, vec3_t start, vec3_t aimdir, float damage, int kick, int hspread, int vspread, int count, int flashtype) { float chance; // 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; } damage = monster_increaseDamageByTalent(self->activator, damage); fire_shotgun (self, start, aimdir, damage, kick, hspread, vspread, count, MOD_UNKNOWN); gi.WriteByte (svc_muzzleflash2); gi.WriteShort (self - g_edicts); gi.WriteByte (flashtype); gi.multicast (start, MULTICAST_PVS); }
void monster_fire_shotgun(edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int hspread, int vspread, int count, int flashtype){ fire_shotgun(self, start, aimdir, damage, kick, hspread, vspread, count, MOD_UNKNOWN); gi.WriteByte(svc_muzzleflash2); gi.WriteShort(self - g_edicts); gi.WriteByte(flashtype); gi.multicast(start, MULTICAST_PVS); }
void weapon_shotgun_fire (edict_t *ent) { vec3_t start; vec3_t forward, right; vec3_t offset; int damage = 4; int kick = 8; if (ent->client->ps.gunframe == 9) { ent->client->ps.gunframe++; return; } AngleVectors (ent->client->v_angle, forward, right, NULL); VectorScale (forward, -2, ent->client->kick_origin_final); ent->client->kick_angles_final[0] = -2; ent->client->kick_origin_start = 0; ent->client->kick_origin_end = 0.1f * SERVER_FPS; VectorSet(offset, 0, 8, ent->viewheight-8); P_ProjectSource (ent->client, ent->s.origin, offset, forward, right, start); if (is_quad == ent) { damage *= 4; kick *= 4; } TDM_BeginDamage (); fire_shotgun (ent, start, forward, damage, kick, 500, 500, DEFAULT_DEATHMATCH_SHOTGUN_COUNT, MOD_SHOTGUN); TDM_EndDamage (); TDM_WeaponFired (ent); // send muzzle flash gi.WriteByte (svc_muzzleflash); gi.WriteShort (ent-g_edicts); gi.WriteByte (MZ_SHOTGUN | is_silenced); gi.multicast (ent->s.origin, MULTICAST_PVS); ent->client->ps.gunframe++; if (! ( (int)dmflags->value & DF_INFINITE_AMMO ) ) ent->client->inventory[ent->client->ammo_index]--; }
void weapon_shotgun_fire (edict_t *ent) { vec3_t start; vec3_t forward, right; vec3_t offset; int damage; int kick = 8; int item = getWornItem(ent, GIEX_ITEM_WEAPON); iteminfo_t *info = getWornItemInfo(ent, GIEX_ITEM_WEAPON); int count = getShotgunCount(ent, item, info); //info->arg4 + (int) (info->arg5 * ent->client->pers.skill[3]); int spread = getShotgunSpread(ent, item, info); // damage = getShotgunTotalDamage(ent, item, info);// (int) ceil((info->arg1 + info->arg2 * (float) ent->client->pers.skill[1]) * info->arg4); damage = (int) ceil(info->arg1 + info->arg2 * (float) ent->client->pers.skill[1]); //(info->arg4 / 2)); damage /= count; 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); damage = applyWeaponBonuses(ent, damage, count); if (is_quad) kick *= 4; fire_shotgun (ent, start, forward, damage, kick, spread, spread, count, MOD_SHOTGUN); ent->client->silencer_shots-=4; // send muzzle flash if ((ent->client->silencer_shots > 0) && (ent->client->pers.skill[58] > 7)) { ent->client->silencer_shots -= 1; } else { gi.WriteByte (svc_muzzleflash); gi.WriteShort (ent-g_edicts); gi.WriteByte (MZ_SHOTGUN | is_silenced); gi.multicast (ent->s.origin, MULTICAST_PVS); } ent->client->ps.gunframe++; PlayerNoise(ent, start, PNOISE_WEAPON); // if (! ( (int)dmflags->value & DF_INFINITE_AMMO ) ) ent->client->pers.inventory[ent->client->ammo_index]--; }
void weapon_supershotgun_fire (edict_t *ent) { vec3_t start; vec3_t forward, right; vec3_t offset; vec3_t v; iteminfo_t *info = getWornItemInfo(ent, 0); int damage; int ammo; int kick = 9; int count = (info->arg4 + (int)(info->arg5 * ent->client->pers.skill[3])) / 2; damage = (int) ceil(info->arg1 + info->arg2 * (float) ent->client->pers.skill[1]) * 0.5; //(info->arg4 / 2)); damage /= count; // damage = info->arg1 + (int) ceil(info->arg2 * ent->client->pers.skill[1]); 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); damage = applyWeaponBonuses(ent, damage, count); if (is_quad) kick *= 4; v[PITCH] = ent->client->v_angle[PITCH]; v[ROLL] = ent->client->v_angle[ROLL]; if (ent->client->ps.gunframe == 7) { v[YAW] = ent->client->v_angle[YAW] - 5; AngleVectors (v, forward, NULL, NULL); fire_shotgun (ent, start, forward, damage, kick, info->arg6, info->arg6, count, MOD_SSHOTGUN); if (info->arg7 == 0) { v[YAW] = ent->client->v_angle[YAW] + 5; AngleVectors (v, forward, NULL, NULL); fire_shotgun (ent, start, forward, damage, kick, info->arg6, info->arg6, count, MOD_SSHOTGUN); } } else { v[YAW] = ent->client->v_angle[YAW] + 5; AngleVectors (v, forward, NULL, NULL); fire_shotgun (ent, start, forward, damage, kick, info->arg6, info->arg6, count, MOD_SSHOTGUN); } ent->client->silencer_shots-=3; // send muzzle flash if ((ent->client->silencer_shots > 0) && (ent->client->pers.skill[58] > 7)) { ent->client->silencer_shots -= 1; } else { gi.WriteByte (svc_muzzleflash); gi.WriteShort (ent-g_edicts); gi.WriteByte (MZ_SSHOTGUN | is_silenced); gi.multicast (ent->s.origin, MULTICAST_PVS); } ent->client->ps.gunframe++; PlayerNoise(ent, start, PNOISE_WEAPON); // if (! ( (int)dmflags->value & DF_INFINITE_AMMO ) ) { ammo = 1; if (info->arg7 == 0) { ammo = 2; } ent->client->pers.inventory[ent->client->ammo_index] -= ammo; // } }