mirror of
https://git.code.sf.net/p/quake/prozac-qfcc
synced 2024-11-10 07:11:51 +00:00
Sniper rifle tweaks: removed "new" autorifle, added a #define NO_AUTORIFLE
(which is going to be the default, don't whine). Old autorifle still there and working as it was. Sniper rifle now takes 5 shells per shot, OTR or not. W_FireSniperRifle fixed so it's not squaring the damage (ARGH) Added a damage cap on legshots. Sniper rifle reload time lengthened.
This commit is contained in:
parent
cbbb790bb6
commit
6e03505c11
9 changed files with 114 additions and 77 deletions
34
defs.qh
34
defs.qh
|
@ -632,31 +632,35 @@
|
||||||
/*==================================================*/
|
/*==================================================*/
|
||||||
// WK -- Removed "weapons" to free up space for shootable things
|
// WK -- Removed "weapons" to free up space for shootable things
|
||||||
// We can remove some more by giving the weapons a weapon mode (like the rifle)
|
// We can remove some more by giving the weapons a weapon mode (like the rifle)
|
||||||
#define WEAP_HOOK 1
|
#define WEAP_HOOK 1
|
||||||
#define WEAP_MEDIKIT 4
|
#define WEAP_MEDIKIT 4
|
||||||
#define WEAP_SPANNER 8
|
#define WEAP_SPANNER 8
|
||||||
#define WEAP_AXE 16
|
#define WEAP_AXE 16
|
||||||
#define WEAP_SNIPER_RIFLE 32
|
#define WEAP_SNIPER_RIFLE 32
|
||||||
#define WEAP_AUTO_RIFLE 64
|
|
||||||
|
#ifndef NO_AUTORIFLE
|
||||||
|
# define WEAP_AUTO_RIFLE 64
|
||||||
|
#endif
|
||||||
|
|
||||||
#define WEAP_SHOTGUN 128
|
#define WEAP_SHOTGUN 128
|
||||||
#define WEAP_SUPER_SHOTGUN 256
|
#define WEAP_SUPER_SHOTGUN 256
|
||||||
#define WEAP_NAILGUN 512
|
#define WEAP_NAILGUN 512
|
||||||
#define WEAP_LIGHT_ASSAULT 1024
|
#define WEAP_LIGHT_ASSAULT 1024
|
||||||
#define WEAP_GRENADE_LAUNCHER 2048
|
#define WEAP_GRENADE_LAUNCHER 2048
|
||||||
#define WEAP_FLAMETHROWER 4096
|
#define WEAP_FLAMETHROWER 4096
|
||||||
#define WEAP_ROCKET_LAUNCHER 8192
|
#define WEAP_ROCKET_LAUNCHER 8192
|
||||||
#define WEAP_INCENDIARY 16384
|
#define WEAP_INCENDIARY 16384
|
||||||
#define WEAP_ASSAULT_CANNON 32768
|
#define WEAP_ASSAULT_CANNON 32768
|
||||||
#define WEAP_LIGHTNING 65536
|
#define WEAP_LIGHTNING 65536
|
||||||
#define WEAP_DAEDALUS 131072
|
#define WEAP_DAEDALUS 131072
|
||||||
//#define WEAP_DETPACK 131072 DONT MAKE ANY AMMOTYPES USE THIS NUMBER!
|
//#define WEAP_DETPACK 131072 DONT MAKE ANY AMMOTYPES USE THIS NUMBER!
|
||||||
#define WEAP_TRANQ 262144
|
#define WEAP_TRANQ 262144
|
||||||
#define WEAP_LASER 524288
|
#define WEAP_LASER 524288
|
||||||
#define WEAP_MAUSER 1048576
|
#define WEAP_MAUSER 1048576
|
||||||
|
|
||||||
#define WEAP_AIRF 2097152 //- OfN - airfist
|
#define WEAP_AIRF 2097152 //- OfN - airfist
|
||||||
#define WEAP_LASERCANNON 4194304 //- OfN - LASER CANNON
|
#define WEAP_LASERCANNON 4194304 //- OfN - LASER CANNON
|
||||||
#define WEAP_SNG 8388608
|
#define WEAP_SNG 8388608
|
||||||
//MAX 24 BITS OF PRECISION IN FLOAT!
|
//MAX 24 BITS OF PRECISION IN FLOAT!
|
||||||
|
|
||||||
/*====================================================*/
|
/*====================================================*/
|
||||||
|
@ -892,7 +896,13 @@
|
||||||
#define PC_SNIPER_INITARMORTYPE 0.3
|
#define PC_SNIPER_INITARMORTYPE 0.3
|
||||||
#define PC_SNIPER_ARMORCLASSES 3 // AT_SAVESHOT | AT_SAVEMELEE
|
#define PC_SNIPER_ARMORCLASSES 3 // AT_SAVESHOT | AT_SAVEMELEE
|
||||||
#define PC_SNIPER_INITARMORCLASS 1
|
#define PC_SNIPER_INITARMORCLASS 1
|
||||||
#define PC_SNIPER_WEAPONS WEAP_SNIPER_RIFLE | WEAP_AUTO_RIFLE | WEAP_AXE | WEAP_NAILGUN
|
|
||||||
|
#ifndef NO_AUTORIFLE
|
||||||
|
# define PC_SNIPER_WEAPONS WEAP_SNIPER_RIFLE | WEAP_AUTO_RIFLE | WEAP_AXE | WEAP_NAILGUN
|
||||||
|
#else
|
||||||
|
# define PC_SNIPER_WEAPONS WEAP_SNIPER_RIFLE | WEAP_AXE | WEAP_NAILGUN
|
||||||
|
#endif
|
||||||
|
|
||||||
#define PC_SNIPER_MAXAMMO_SHOT 75
|
#define PC_SNIPER_MAXAMMO_SHOT 75
|
||||||
#define PC_SNIPER_MAXAMMO_NAIL 100
|
#define PC_SNIPER_MAXAMMO_NAIL 100
|
||||||
#define PC_SNIPER_MAXAMMO_CELL 150
|
#define PC_SNIPER_MAXAMMO_CELL 150
|
||||||
|
|
6
jobs.qc
6
jobs.qc
|
@ -511,10 +511,12 @@ void() JudokaRearm =
|
||||||
te = find(te, netname, "reloadtimer");
|
te = find(te, netname, "reloadtimer");
|
||||||
}
|
}
|
||||||
////Fix double weapons
|
////Fix double weapons
|
||||||
|
#ifndef NO_AUTORIFLE
|
||||||
if (self.current_weapon == WEAP_SNIPER_RIFLE) {
|
if (self.current_weapon == WEAP_SNIPER_RIFLE) {
|
||||||
self.owner.weapons_carried = self.owner.weapons_carried | WEAP_AUTO_RIFLE;
|
self.owner.weapons_carried = self.owner.weapons_carried | WEAP_AUTO_RIFLE;
|
||||||
self.enemy.weapons_carried = self.enemy.weapons_carried - (self.enemy.weapons_carried & WEAP_AUTO_RIFLE);
|
self.enemy.weapons_carried = self.enemy.weapons_carried - (self.enemy.weapons_carried & WEAP_AUTO_RIFLE);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
////Fix weird weapons
|
////Fix weird weapons
|
||||||
if (self.current_weapon == WEAP_ASSAULT_CANNON && self.enemy.current_weapon == WEAP_ASSAULT_CANNON) {
|
if (self.current_weapon == WEAP_ASSAULT_CANNON && self.enemy.current_weapon == WEAP_ASSAULT_CANNON) {
|
||||||
oself = self;
|
oself = self;
|
||||||
|
@ -617,8 +619,10 @@ void() JobJudoka =
|
||||||
|
|
||||||
self.job = self.job | JOB_ACTIVE;
|
self.job = self.job | JOB_ACTIVE;
|
||||||
//Simplify the dual-weapon problem
|
//Simplify the dual-weapon problem
|
||||||
|
#ifndef NO_AUTORIFLE
|
||||||
if (trace_ent.current_weapon == WEAP_AUTO_RIFLE)
|
if (trace_ent.current_weapon == WEAP_AUTO_RIFLE)
|
||||||
trace_ent.current_weapon = WEAP_SNIPER_RIFLE;
|
trace_ent.current_weapon = WEAP_SNIPER_RIFLE;
|
||||||
|
#endif
|
||||||
|
|
||||||
//If already reloading, remove that timer
|
//If already reloading, remove that timer
|
||||||
te = find(NIL, netname, "reloadtimer");
|
te = find(NIL, netname, "reloadtimer");
|
||||||
|
@ -670,10 +674,12 @@ void() JobJudoka =
|
||||||
tWeapon.heat = 1;
|
tWeapon.heat = 1;
|
||||||
|
|
||||||
//Fix double weapons
|
//Fix double weapons
|
||||||
|
#ifndef NO_AUTORIFLE
|
||||||
if (trace_ent.current_weapon == WEAP_SNIPER_RIFLE) {
|
if (trace_ent.current_weapon == WEAP_SNIPER_RIFLE) {
|
||||||
self.weapons_carried = self.weapons_carried | WEAP_AUTO_RIFLE;
|
self.weapons_carried = self.weapons_carried | WEAP_AUTO_RIFLE;
|
||||||
trace_ent.weapons_carried = trace_ent.weapons_carried - (trace_ent.weapons_carried & WEAP_AUTO_RIFLE);
|
trace_ent.weapons_carried = trace_ent.weapons_carried - (trace_ent.weapons_carried & WEAP_AUTO_RIFLE);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
if (trace_ent.current_weapon == WEAP_MEDIKIT) {
|
if (trace_ent.current_weapon == WEAP_MEDIKIT) {
|
||||||
self.health = self.max_health; //You heal yourself. :)
|
self.health = self.max_health; //You heal yourself. :)
|
||||||
}
|
}
|
||||||
|
|
2
menu.qc
2
menu.qc
|
@ -2747,7 +2747,9 @@ void(float inp) Menu_PrimaryWeapon_Input =
|
||||||
{
|
{
|
||||||
PrintRefund(PRICE);
|
PrintRefund(PRICE);
|
||||||
self.weapons_carried = self.weapons_carried - WEAP_SNIPER_RIFLE;
|
self.weapons_carried = self.weapons_carried - WEAP_SNIPER_RIFLE;
|
||||||
|
#ifndef NO_AUTORIFLE
|
||||||
self.weapons_carried = self.weapons_carried - WEAP_AUTO_RIFLE;
|
self.weapons_carried = self.weapons_carried - WEAP_AUTO_RIFLE;
|
||||||
|
#endif
|
||||||
self.maxammo_shells = self.maxammo_shells - 75;
|
self.maxammo_shells = self.maxammo_shells - 75;
|
||||||
}
|
}
|
||||||
else if (self.money >= PRICE) {
|
else if (self.money >= PRICE) {
|
||||||
|
|
|
@ -37,7 +37,8 @@
|
||||||
#define SCRAG_DMG 29 // damage the scrag does
|
#define SCRAG_DMG 29 // damage the scrag does
|
||||||
|
|
||||||
#define WAYPOINT_LIFE 240 // 120 after this amount of seconds any unused waypoint will be removed
|
#define WAYPOINT_LIFE 240 // 120 after this amount of seconds any unused waypoint will be removed
|
||||||
#define OTR_DMGFACTOR 0.6 // *damage facter for the OTR armed sniper rifle (MUST BE GREATER THAN 1!!!) no
|
#define OTR_DMGFACTOR 0.6 // How much damage OTR does normally (should not be more than 1)
|
||||||
|
#define OTR_IGNFACTOR 0.3 // How much armor-piercing damage OTR does (this + dmgfactor should be slightly <1)
|
||||||
#define SENTRY_UNLOCKTIME 2.5 // (must be greater than 1.1) time for the sentries to begin to rotate after they have no target (+/- 1 second)
|
#define SENTRY_UNLOCKTIME 2.5 // (must be greater than 1.1) time for the sentries to begin to rotate after they have no target (+/- 1 second)
|
||||||
#define HAX_UNSTABLEDIST 300 // distance at which enemy hacks take longer cause of "unstable connection"
|
#define HAX_UNSTABLEDIST 300 // distance at which enemy hacks take longer cause of "unstable connection"
|
||||||
#define WAYPOINT_AI_LIFE 10 // life for grunty ai created waypoints - last seen enemy mark
|
#define WAYPOINT_AI_LIFE 10 // life for grunty ai created waypoints - last seen enemy mark
|
||||||
|
@ -45,8 +46,8 @@
|
||||||
#define MINE_SCANRATE 0.6 // mines look again for nearby enemy after this time - it was 1 which caused high ping players to not trigger mines sometimes walking around them fast
|
#define MINE_SCANRATE 0.6 // mines look again for nearby enemy after this time - it was 1 which caused high ping players to not trigger mines sometimes walking around them fast
|
||||||
#define EXPBODY_DMG 200 // damage exp. body does /was 140 GR this was really really wimpy
|
#define EXPBODY_DMG 200 // damage exp. body does /was 140 GR this was really really wimpy
|
||||||
#define MINE_DMG 200 // was 240 /215
|
#define MINE_DMG 200 // was 240 /215
|
||||||
#define SNIPER_DMG 90 // was charge up. Makes more sense for sniper bullets to do constant damage.
|
#define SNIPER_DMG 200 // was charge up. Makes more sense for sniper bullets to do constant damage.
|
||||||
#define OTR_DMG 50 // extra damage done by OTR (always ignores armor)
|
#define SNIPER_MAXLEG 50 // Max damage sniper rifle can do with legshot
|
||||||
|
|
||||||
#define BERSERKER_HP_COST 30
|
#define BERSERKER_HP_COST 30
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,7 @@ Defines for the compilable options within TF.
|
||||||
#define NEVER_TEAMFRAGS #ON // teamfrags options always off (i didn't realise people wouldn't like it)
|
#define NEVER_TEAMFRAGS #ON // teamfrags options always off (i didn't realise people wouldn't like it)
|
||||||
#define ALWAYS_TEAMFRAGS #OFF // teamfrags options always on
|
#define ALWAYS_TEAMFRAGS #OFF // teamfrags options always on
|
||||||
#define CHECK_SPEEDS #ON // makes sure players aren't moving too fast
|
#define CHECK_SPEEDS #ON // makes sure players aren't moving too fast
|
||||||
#define SNIPER_RIFLE_RELOAD_TIME 1.5 // seconds
|
#define SNIPER_RIFLE_RELOAD_TIME 2 // seconds
|
||||||
#define STOP_MOUSE_MOVEMENT #ON // stops players from moving forward/back with the mouse, and cheating with it.
|
#define STOP_MOUSE_MOVEMENT #ON // stops players from moving forward/back with the mouse, and cheating with it.
|
||||||
#define RESPAWN_DELAY_TIME 5 // this is the respawn delay, if the RESPAWN_DELAY option is
|
#define RESPAWN_DELAY_TIME 5 // this is the respawn delay, if the RESPAWN_DELAY option is
|
||||||
// turned on with temp1. QuakeWorld servers can use
|
// turned on with temp1. QuakeWorld servers can use
|
||||||
|
|
|
@ -55,7 +55,7 @@ Defines for the compilable options within TF.
|
||||||
#define NEVER_TEAMFRAGS ON // teamfrags options always off (i didn't realise people wouldn't like it)
|
#define NEVER_TEAMFRAGS ON // teamfrags options always off (i didn't realise people wouldn't like it)
|
||||||
#define ALWAYS_TEAMFRAGS OFF // teamfrags options always on
|
#define ALWAYS_TEAMFRAGS OFF // teamfrags options always on
|
||||||
#define CHECK_SPEEDS ON // makes sure players aren't moving too fast
|
#define CHECK_SPEEDS ON // makes sure players aren't moving too fast
|
||||||
#define SNIPER_RIFLE_RELOAD_TIME 1.5 // seconds
|
#define SNIPER_RIFLE_RELOAD_TIME 2 // seconds
|
||||||
#define STOP_MOUSE_MOVEMENT ON // stops players from moving forward/back with the mouse, and cheating with it.
|
#define STOP_MOUSE_MOVEMENT ON // stops players from moving forward/back with the mouse, and cheating with it.
|
||||||
#define RESPAWN_DELAY_TIME 5 // this is the respawn delay, if the RESPAWN_DELAY option is
|
#define RESPAWN_DELAY_TIME 5 // this is the respawn delay, if the RESPAWN_DELAY option is
|
||||||
// turned on with temp1. QuakeWorld servers can use
|
// turned on with temp1. QuakeWorld servers can use
|
||||||
|
|
|
@ -299,9 +299,11 @@ void() player_shot4 = [$shotatt4, player_shot5 ] {self.weaponframe=4;};
|
||||||
void() player_shot5 = [$shotatt5, player_shot6 ] {self.weaponframe=5;};
|
void() player_shot5 = [$shotatt5, player_shot6 ] {self.weaponframe=5;};
|
||||||
void() player_shot6 = [$shotatt6, player_run ] {self.weaponframe=6;};
|
void() player_shot6 = [$shotatt6, player_run ] {self.weaponframe=6;};
|
||||||
|
|
||||||
|
#ifndef NO_AUTORIFLE
|
||||||
void() player_autorifle1 = [$shotatt1, player_autorifle2 ] {self.weaponframe=1; muzzleflash(); };
|
void() player_autorifle1 = [$shotatt1, player_autorifle2 ] {self.weaponframe=1; muzzleflash(); };
|
||||||
void() player_autorifle2 = [$shotatt2, player_autorifle3 ] {self.weaponframe=2;};
|
void() player_autorifle2 = [$shotatt2, player_autorifle3 ] {self.weaponframe=2;};
|
||||||
void() player_autorifle3 = [$shotatt6, player_run ] {self.weaponframe=6;};
|
void() player_autorifle3 = [$shotatt6, player_run ] {self.weaponframe=6;};
|
||||||
|
#endif
|
||||||
|
|
||||||
void() player_axe1 = [$axatt1, player_axe2 ] {self.weaponframe=1;};
|
void() player_axe1 = [$axatt1, player_axe2 ] {self.weaponframe=1;};
|
||||||
void() player_axe2 = [$axatt2, player_axe3 ] {self.weaponframe=2;};
|
void() player_axe2 = [$axatt2, player_axe3 ] {self.weaponframe=2;};
|
||||||
|
|
|
@ -30,17 +30,19 @@ void() TeamFortress_SniperWeapon =
|
||||||
if (!((self.weapons_carried & WEAP_SNIPER_RIFLE) && (self.weapons_carried & WEAP_AUTO_RIFLE)))
|
if (!((self.weapons_carried & WEAP_SNIPER_RIFLE) && (self.weapons_carried & WEAP_AUTO_RIFLE)))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (self.ammo_shells < 1)
|
if (self.ammo_shells < 5)
|
||||||
{ // don't have the ammo
|
{ // don't have the ammo
|
||||||
sprint (self, PRINT_HIGH, "not enough ammo.\n");
|
sprint (self, PRINT_HIGH, "not enough ammo.\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef NO_AUTORIFLE
|
||||||
if (self.current_weapon == WEAP_SNIPER_RIFLE)
|
if (self.current_weapon == WEAP_SNIPER_RIFLE)
|
||||||
{
|
{
|
||||||
self.current_weapon = WEAP_AUTO_RIFLE;
|
self.current_weapon = WEAP_AUTO_RIFLE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
self.current_weapon = WEAP_SNIPER_RIFLE;
|
self.current_weapon = WEAP_SNIPER_RIFLE;
|
||||||
}
|
}
|
||||||
|
|
132
weapons.qc
132
weapons.qc
|
@ -1219,7 +1219,7 @@ TeamFortress : W_FireSniperRifle
|
||||||
void() W_FireSniperRifle =
|
void() W_FireSniperRifle =
|
||||||
{
|
{
|
||||||
local vector dir, src;
|
local vector dir, src;
|
||||||
local float dam_mult, zdif, use_this;
|
local float dam_mult, zdif, use_this, ign_mult = 0;
|
||||||
local vector angle;
|
local vector angle;
|
||||||
|
|
||||||
sound (self ,CHAN_WEAPON, "weapons/sniper.wav", 1, ATTN_NORM);
|
sound (self ,CHAN_WEAPON, "weapons/sniper.wav", 1, ATTN_NORM);
|
||||||
|
@ -1246,7 +1246,7 @@ void() W_FireSniperRifle =
|
||||||
dir = v_forward; //XXX is this correct?
|
dir = v_forward; //XXX is this correct?
|
||||||
|
|
||||||
use_this = FALSE;
|
use_this = FALSE;
|
||||||
traceline (src, src + dir*8092, FALSE, self);
|
traceline (src, src + dir*8092, FALSE, self);
|
||||||
if (trace_fraction != 1.0) {
|
if (trace_fraction != 1.0) {
|
||||||
if (trace_ent) {
|
if (trace_ent) {
|
||||||
if (trace_ent.classname == "player") {
|
if (trace_ent.classname == "player") {
|
||||||
|
@ -1273,13 +1273,15 @@ void() W_FireSniperRifle =
|
||||||
if (!dam_mult)
|
if (!dam_mult)
|
||||||
dam_mult = SNIPER_DMG;
|
dam_mult = SNIPER_DMG;
|
||||||
|
|
||||||
//- OfN - float factor to handle OTR bullets difference
|
if (self.cutf_items & CUTF_OTR)
|
||||||
if (self.cutf_items & CUTF_OTR && self.ammo_shells > 2) {
|
{
|
||||||
self.currentammo = self.ammo_shells = self.ammo_shells - 3;
|
ign_mult=dam_mult*OTR_IGNFACTOR;
|
||||||
} else
|
dam_mult=dam_mult*OTR_DMGFACTOR;
|
||||||
self.currentammo = self.ammo_shells = self.ammo_shells - 1;
|
}
|
||||||
|
|
||||||
dam_mult=dam_mult*OTR_DMGFACTOR;
|
self.ammo_shells -= 5;
|
||||||
|
W_SetCurrentAmmo();
|
||||||
|
|
||||||
|
|
||||||
if (trace_ent) {
|
if (trace_ent) {
|
||||||
if (trace_ent.classname == "player") {
|
if (trace_ent.classname == "player") {
|
||||||
|
@ -1306,7 +1308,14 @@ void() W_FireSniperRifle =
|
||||||
trace_ent.head_shot_vector = '0 0 0';
|
trace_ent.head_shot_vector = '0 0 0';
|
||||||
if (zdif < 0) {
|
if (zdif < 0) {
|
||||||
// leg shot doesn't hurt very much
|
// leg shot doesn't hurt very much
|
||||||
dam_mult = 0.40;
|
dam_mult *= 0.40;
|
||||||
|
ign_mult *= 0.40;
|
||||||
|
|
||||||
|
if ((dam_mult + ign_mult) > SNIPER_MAXLEG)
|
||||||
|
{
|
||||||
|
dam_mult *= (dam_mult + ign_mult) / SNIPER_MAXLEG;
|
||||||
|
ign_mult *= (dam_mult + ign_mult) / SNIPER_MAXLEG;
|
||||||
|
}
|
||||||
|
|
||||||
if (trace_ent.armorvalue < 0.8)
|
if (trace_ent.armorvalue < 0.8)
|
||||||
trace_ent.leg_damage++;
|
trace_ent.leg_damage++;
|
||||||
|
@ -1322,20 +1331,17 @@ void() W_FireSniperRifle =
|
||||||
//GR red armor has leg protection
|
//GR red armor has leg protection
|
||||||
|
|
||||||
if (trace_ent.armortype >= 0.7 && trace_ent.armorvalue > 0) {
|
if (trace_ent.armortype >= 0.7 && trace_ent.armorvalue > 0) {
|
||||||
if (self.cutf_items & CUTF_OTR) // otr does extra damage to armored
|
TF_T_Damage (trace_ent, self, self, ign_mult, TF_TD_IGNOREARMOUR, TF_TD_SHOT);
|
||||||
TF_T_Damage (trace_ent, self, self, OTR_DMG * dam_mult, TF_TD_IGNOREARMOUR, TF_TD_SHOT);
|
TF_T_Damage (trace_ent, self, self, dam_mult, 0, TF_TD_SHOT);
|
||||||
TF_T_Damage (trace_ent, self, self, SNIPER_DMG * dam_mult, 0, TF_TD_SHOT);
|
|
||||||
} else {
|
} else {
|
||||||
if (self.cutf_items & CUTF_OTR)
|
TF_T_Damage (trace_ent, self, self, dam_mult + ign_mult, TF_TD_IGNOREARMOUR,0);
|
||||||
TF_T_Damage (trace_ent, self, self, OTR_DMG * dam_mult, TF_TD_IGNOREARMOUR, 0);
|
|
||||||
TF_T_Damage (trace_ent, self, self, SNIPER_DMG * dam_mult, TF_TD_IGNOREARMOUR,0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (trace_ent.health > 0) {
|
if (trace_ent.health > 0) {
|
||||||
if (self.cutf_items & CUTF_OTR) {
|
if (self.cutf_items & CUTF_OTR) {
|
||||||
sprint(trace_ent, PRINT_MEDIUM, "Leg injury! That was OTR stuff!\n");
|
sprint(trace_ent, PRINT_MEDIUM, "Leg injury! That was OTR stuff!\n");
|
||||||
sprint(self, PRINT_MEDIUM, "OTR Leg shot - that'll slow him down!\n");
|
sprint(self, PRINT_MEDIUM, "OTR Leg shot - that'll slow him down!\n");
|
||||||
} else { //- not OTR..
|
} else { //- not OTR..
|
||||||
sprint(trace_ent, PRINT_MEDIUM, "Leg injury!\n");
|
sprint(trace_ent, PRINT_MEDIUM, "Leg injury!\n");
|
||||||
sprint(self, PRINT_MEDIUM, "Leg shot - that'll slow him down!\n");
|
sprint(self, PRINT_MEDIUM, "Leg shot - that'll slow him down!\n");
|
||||||
}
|
}
|
||||||
|
@ -1344,7 +1350,8 @@ void() W_FireSniperRifle =
|
||||||
return;
|
return;
|
||||||
} else if (zdif > 20) {
|
} else if (zdif > 20) {
|
||||||
// head shot
|
// head shot
|
||||||
dam_mult = 2;
|
dam_mult *= 2;
|
||||||
|
ign_mult *= 2;
|
||||||
|
|
||||||
stuffcmd(trace_ent, "bf\n");
|
stuffcmd(trace_ent, "bf\n");
|
||||||
|
|
||||||
|
@ -1352,13 +1359,10 @@ void() W_FireSniperRifle =
|
||||||
deathmsg = DMSG_SNIPERHEADSHOT;
|
deathmsg = DMSG_SNIPERHEADSHOT;
|
||||||
if (trace_ent.armortype > 0.5 && trace_ent.armorvalue > 0)
|
if (trace_ent.armortype > 0.5 && trace_ent.armorvalue > 0)
|
||||||
{
|
{
|
||||||
if (self.cutf_items & CUTF_OTR) // OTR does extra damage to armored
|
TF_T_Damage (trace_ent, self, self, ign_mult, TF_TD_IGNOREARMOUR, TF_TD_SHOT);
|
||||||
TF_T_Damage (trace_ent, self, self, OTR_DMG * dam_mult, TF_TD_IGNOREARMOUR, TF_TD_SHOT);
|
TF_T_Damage (trace_ent, self, self, dam_mult, 0, TF_TD_SHOT);
|
||||||
TF_T_Damage (trace_ent, self, self, SNIPER_DMG * dam_mult, 0, TF_TD_SHOT);
|
|
||||||
} else {
|
} else {
|
||||||
if (self.cutf_items & CUTF_OTR)
|
TF_T_Damage (trace_ent, self, self, dam_mult + ign_mult, TF_TD_IGNOREARMOUR, 0);
|
||||||
TF_T_Damage (trace_ent, self, self, OTR_DMG * dam_mult, TF_TD_IGNOREARMOUR, 0);
|
|
||||||
TF_T_Damage (trace_ent, self, self, SNIPER_DMG * dam_mult, TF_TD_IGNOREARMOUR, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (trace_ent.health > 0) {
|
if (trace_ent.health > 0) {
|
||||||
|
@ -1369,17 +1373,13 @@ void() W_FireSniperRifle =
|
||||||
sprint(trace_ent, PRINT_MEDIUM, "Head injury!\n");
|
sprint(trace_ent, PRINT_MEDIUM, "Head injury!\n");
|
||||||
sprint(self, PRINT_MEDIUM, "Head shot - that's gotta hurt!\n");
|
sprint(self, PRINT_MEDIUM, "Head shot - that's gotta hurt!\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
} else
|
} else
|
||||||
deathmsg = DMSG_SNIPERRIFLE;
|
deathmsg = DMSG_SNIPERRIFLE;
|
||||||
if (self.cutf_items & CUTF_OTR) {
|
|
||||||
if (trace_ent.armorvalue > 0)
|
TF_T_Damage (trace_ent, self, self, ign_mult, TF_TD_IGNOREARMOUR, TF_TD_SHOT);
|
||||||
TF_T_Damage (trace_ent, self, self, OTR_DMG * dam_mult, TF_TD_IGNOREARMOUR, TF_TD_SHOT);
|
|
||||||
else
|
|
||||||
TF_T_Damage (trace_ent, self, self, OTR_DMG * dam_mult, TF_TD_IGNOREARMOUR, 0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1394,6 +1394,7 @@ void() W_FireSniperRifle =
|
||||||
Multi_Finish (FALSE);
|
Multi_Finish (FALSE);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifndef NO_AUTORIFLE
|
||||||
/*
|
/*
|
||||||
===================================
|
===================================
|
||||||
TeamFortress : W_FireAutoRifle
|
TeamFortress : W_FireAutoRifle
|
||||||
|
@ -1402,34 +1403,22 @@ TeamFortress : W_FireAutoRifle
|
||||||
// same as sniper rifle
|
// same as sniper rifle
|
||||||
void() W_FireAutoRifle =
|
void() W_FireAutoRifle =
|
||||||
{
|
{
|
||||||
local string st = infokey(NIL, "oldrifle");
|
local vector dir;
|
||||||
|
|
||||||
if (!(st == "yes" || st == "y" || st == "on" || st == "1")) {
|
sound (self ,CHAN_WEAPON, "weapons/sniper.wav", 1, ATTN_NORM);
|
||||||
if (self.heat < 50)
|
|
||||||
self.heat = 50;
|
|
||||||
|
|
||||||
W_FireSniperRifle();
|
KickPlayer(-1, self);
|
||||||
|
|
||||||
self.heat += 200;
|
self.currentammo = self.ammo_shells = self.ammo_shells - 1;
|
||||||
|
|
||||||
if (self.heat > 600)
|
makevectors(self.v_angle);
|
||||||
self.heat = 600;
|
dir = v_forward;
|
||||||
} else {
|
deathmsg = DMSG_AUTORIFLE;
|
||||||
local vector dir;
|
FireSniperBullet (dir, 8);
|
||||||
|
|
||||||
sound (self ,CHAN_WEAPON, "weapons/sniper.wav", 1, ATTN_NORM);
|
|
||||||
|
|
||||||
KickPlayer(-1, self);
|
|
||||||
|
|
||||||
self.currentammo = self.ammo_shells = self.ammo_shells - 1;
|
|
||||||
|
|
||||||
makevectors(self.v_angle);
|
|
||||||
dir = v_forward;
|
|
||||||
deathmsg = DMSG_AUTORIFLE;
|
|
||||||
FireSniperBullet (dir, 8);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
================
|
================
|
||||||
TeamFortress : W_FireAssaultCannon
|
TeamFortress : W_FireAssaultCannon
|
||||||
|
@ -2368,6 +2357,7 @@ void() W_SetCurrentAmmo =
|
||||||
}
|
}
|
||||||
self.items = self.items | IT_SHELLS;
|
self.items = self.items | IT_SHELLS;
|
||||||
self.weapon = IT_SHOTGUN;
|
self.weapon = IT_SHOTGUN;
|
||||||
|
#ifndef NO_AUTORIFLE
|
||||||
} else if (self.current_weapon == WEAP_AUTO_RIFLE) {
|
} else if (self.current_weapon == WEAP_AUTO_RIFLE) {
|
||||||
self.currentammo = self.ammo_shells;
|
self.currentammo = self.ammo_shells;
|
||||||
if (!(self.tfstate & TFSTATE_RELOADING)) {
|
if (!(self.tfstate & TFSTATE_RELOADING)) {
|
||||||
|
@ -2376,6 +2366,7 @@ void() W_SetCurrentAmmo =
|
||||||
}
|
}
|
||||||
self.items = self.items | IT_SHELLS;
|
self.items = self.items | IT_SHELLS;
|
||||||
self.weapon = IT_SUPER_SHOTGUN;
|
self.weapon = IT_SUPER_SHOTGUN;
|
||||||
|
#endif
|
||||||
} else if (self.current_weapon == WEAP_ASSAULT_CANNON) {
|
} else if (self.current_weapon == WEAP_ASSAULT_CANNON) {
|
||||||
self.currentammo = self.ammo_shells;
|
self.currentammo = self.ammo_shells;
|
||||||
if (!(self.tfstate & TFSTATE_RELOADING)) {
|
if (!(self.tfstate & TFSTATE_RELOADING)) {
|
||||||
|
@ -2541,6 +2532,9 @@ float() W_CheckNoAmmo =
|
||||||
} else if (self.current_weapon == WEAP_DAEDALUS) {
|
} else if (self.current_weapon == WEAP_DAEDALUS) {
|
||||||
if (self.currentammo >= 5)
|
if (self.currentammo >= 5)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
} else if (self.current_weapon == WEAP_SNIPER_RIFLE) {
|
||||||
|
if (self.currentammo >= 5)
|
||||||
|
return TRUE;
|
||||||
} else if (self.currentammo > 0)
|
} else if (self.currentammo > 0)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
|
@ -2772,7 +2766,9 @@ void() player_light1;
|
||||||
void() player_light_assault1;
|
void() player_light_assault1;
|
||||||
void() player_rocket1;
|
void() player_rocket1;
|
||||||
|
|
||||||
|
#ifndef NO_AUTORIFLE
|
||||||
void() player_autorifle1;
|
void() player_autorifle1;
|
||||||
|
#endif
|
||||||
void() player_assaultcannon1;
|
void() player_assaultcannon1;
|
||||||
void() player_assaultcannonup1;
|
void() player_assaultcannonup1;
|
||||||
void() player_assaultcannondown1;
|
void() player_assaultcannondown1;
|
||||||
|
@ -2933,10 +2929,12 @@ void() W_Attack =
|
||||||
W_FireSniperRifle();
|
W_FireSniperRifle();
|
||||||
Attack_Finished(SNIPER_RIFLE_RELOAD_TIME);
|
Attack_Finished(SNIPER_RIFLE_RELOAD_TIME);
|
||||||
}
|
}
|
||||||
|
#ifndef NO_AUTORIFLE
|
||||||
} else if (self.current_weapon == WEAP_AUTO_RIFLE) {
|
} else if (self.current_weapon == WEAP_AUTO_RIFLE) {
|
||||||
player_autorifle1();
|
player_autorifle1();
|
||||||
W_FireAutoRifle();
|
W_FireAutoRifle();
|
||||||
Attack_Finished(0.1);
|
Attack_Finished(0.1);
|
||||||
|
#endif
|
||||||
} else if (self.current_weapon == WEAP_ASSAULT_CANNON) {
|
} else if (self.current_weapon == WEAP_ASSAULT_CANNON) {
|
||||||
// Need 4 cells to power up the Assault Cannon
|
// Need 4 cells to power up the Assault Cannon
|
||||||
if (self.ammo_cells < 4) {
|
if (self.ammo_cells < 4) {
|
||||||
|
@ -3050,8 +3048,10 @@ void() W_PrintWeaponMessage =
|
||||||
sprint(self, PRINT_MEDIUM, "Pipebomb mode\n");
|
sprint(self, PRINT_MEDIUM, "Pipebomb mode\n");
|
||||||
} else if (self.current_weapon == WEAP_SNIPER_RIFLE)
|
} else if (self.current_weapon == WEAP_SNIPER_RIFLE)
|
||||||
sprint(self, PRINT_MEDIUM, "Sniper Rifle ready\n");
|
sprint(self, PRINT_MEDIUM, "Sniper Rifle ready\n");
|
||||||
|
#ifndef NO_AUTORIFLE
|
||||||
else if (self.current_weapon == WEAP_AUTO_RIFLE)
|
else if (self.current_weapon == WEAP_AUTO_RIFLE)
|
||||||
sprint(self, PRINT_MEDIUM, "Rifle on fully auto\n");
|
sprint(self, PRINT_MEDIUM, "Rifle on fully auto\n");
|
||||||
|
#endif
|
||||||
else if (self.current_weapon == WEAP_TRANQ)
|
else if (self.current_weapon == WEAP_TRANQ)
|
||||||
sprint(self, PRINT_MEDIUM, "Tranquiliser gun selected\n");
|
sprint(self, PRINT_MEDIUM, "Tranquiliser gun selected\n");
|
||||||
else if (self.current_weapon == WEAP_MEDIKIT)
|
else if (self.current_weapon == WEAP_MEDIKIT)
|
||||||
|
@ -3186,13 +3186,18 @@ void() W_ChangeWeapon =
|
||||||
am = 1;
|
am = 1;
|
||||||
}
|
}
|
||||||
} else if (self.impulse == 3) {
|
} else if (self.impulse == 3) {
|
||||||
if (!((it & WEAP_AUTO_RIFLE && self.ammo_shells > 0) || (it & WEAP_SUPER_SHOTGUN && self.ammo_shells >1)))
|
if (!(
|
||||||
|
#ifndef NO_AUTORIFLE
|
||||||
|
(it & WEAP_AUTO_RIFLE && self.ammo_shells > 0) ||
|
||||||
|
#endif
|
||||||
|
(it & WEAP_SUPER_SHOTGUN && self.ammo_shells >1)))
|
||||||
have_weapon = FALSE;
|
have_weapon = FALSE;
|
||||||
loopck = 0;
|
loopck = 0;
|
||||||
while (!usable && have_weapon) {
|
while (!usable && have_weapon) {
|
||||||
loopck = (loopck + 1);
|
loopck = (loopck + 1);
|
||||||
if (loopck >= 10)
|
if (loopck >= 10)
|
||||||
have_weapon = FALSE;
|
have_weapon = FALSE;
|
||||||
|
#ifndef NO_AUTORIFLE
|
||||||
if (fl == WEAP_AUTO_RIFLE) {
|
if (fl == WEAP_AUTO_RIFLE) {
|
||||||
fl = WEAP_SUPER_SHOTGUN;
|
fl = WEAP_SUPER_SHOTGUN;
|
||||||
if (it & WEAP_SUPER_SHOTGUN && self.ammo_shells > 1)
|
if (it & WEAP_SUPER_SHOTGUN && self.ammo_shells > 1)
|
||||||
|
@ -3202,6 +3207,13 @@ void() W_ChangeWeapon =
|
||||||
if (it & WEAP_AUTO_RIFLE && self.ammo_shells > 0)
|
if (it & WEAP_AUTO_RIFLE && self.ammo_shells > 0)
|
||||||
usable = 1;
|
usable = 1;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
fl = WEAP_SUPER_SHOTGUN;
|
||||||
|
if (it & WEAP_SUPER_SHOTGUN && self.ammo_cells > 1)
|
||||||
|
usable = 1;
|
||||||
|
else
|
||||||
|
have_weapon = FALSE;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fl == WEAP_SUPER_SHOTGUN) {
|
if (fl == WEAP_SUPER_SHOTGUN) {
|
||||||
|
@ -3473,13 +3485,15 @@ void() CycleWeaponCommand =
|
||||||
am = 1;
|
am = 1;
|
||||||
} else if (self.current_weapon == WEAP_TRANQ) {
|
} else if (self.current_weapon == WEAP_TRANQ) {
|
||||||
self.current_weapon = WEAP_SNIPER_RIFLE;
|
self.current_weapon = WEAP_SNIPER_RIFLE;
|
||||||
if (self.ammo_shells < 1)
|
if (self.ammo_shells < 5)
|
||||||
am = 1;
|
am = 1;
|
||||||
} else if (self.current_weapon == WEAP_SNIPER_RIFLE) {
|
} else if (self.current_weapon == WEAP_SNIPER_RIFLE) {
|
||||||
|
#ifndef NO_AUTORIFLE
|
||||||
self.current_weapon = WEAP_AUTO_RIFLE;
|
self.current_weapon = WEAP_AUTO_RIFLE;
|
||||||
if (self.ammo_shells < 1)
|
if (self.ammo_shells < 1)
|
||||||
am = 1;
|
am = 1;
|
||||||
} else if (self.current_weapon == WEAP_AUTO_RIFLE) {
|
} else if (self.current_weapon == WEAP_AUTO_RIFLE) {
|
||||||
|
#endif
|
||||||
self.current_weapon = WEAP_MAUSER;
|
self.current_weapon = WEAP_MAUSER;
|
||||||
if (self.ammo_nails < 1)
|
if (self.ammo_nails < 1)
|
||||||
am = 1;
|
am = 1;
|
||||||
|
@ -4102,8 +4116,6 @@ void() W_WeaponFrame =
|
||||||
player_run ();
|
player_run ();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (self.current_weapon == WEAP_AUTO_RIFLE) // BUG BUG BUG! GIVES ADVANTAGE TO HIGH FPSERS
|
|
||||||
self.heat -= 1000 * frametime;
|
|
||||||
// check for attack
|
// check for attack
|
||||||
if (self.button0 && !(self.fire_held_down)) {
|
if (self.button0 && !(self.fire_held_down)) {
|
||||||
if ((self.current_menu == MENU_CLASSHELP) || (self.current_menu == MENU_CLASSHELP2)) {
|
if ((self.current_menu == MENU_CLASSHELP) || (self.current_menu == MENU_CLASSHELP2)) {
|
||||||
|
@ -4112,7 +4124,9 @@ void() W_WeaponFrame =
|
||||||
Attack_Finished(0.2);
|
Attack_Finished(0.2);
|
||||||
} else if (self.current_weapon == WEAP_SNIPER_RIFLE) {
|
} else if (self.current_weapon == WEAP_SNIPER_RIFLE) {
|
||||||
if (self.tfstate & TFSTATE_AIMING) {
|
if (self.tfstate & TFSTATE_AIMING) {
|
||||||
if (self.height > 30) {
|
if (!W_CheckNoAmmo())
|
||||||
|
self.tfstate &= ~TFSTATE_AIMING;
|
||||||
|
else if (self.height > 30) {
|
||||||
self.height = self.height - 5;
|
self.height = self.height - 5;
|
||||||
TF_zoom(self.height);
|
TF_zoom(self.height);
|
||||||
}
|
}
|
||||||
|
@ -4120,7 +4134,7 @@ void() W_WeaponFrame =
|
||||||
tv = self.velocity;
|
tv = self.velocity;
|
||||||
tv_z = 0;
|
tv_z = 0;
|
||||||
|
|
||||||
if (vlen(tv) <= WEAP_SNIPER_RIFLE_MAX_MOVE) {
|
if (vlen(tv) <= WEAP_SNIPER_RIFLE_MAX_MOVE && W_CheckNoAmmo()) {
|
||||||
// create the laser sight
|
// create the laser sight
|
||||||
SniperSight_Create(0);
|
SniperSight_Create(0);
|
||||||
self.heat = 30; // damage done
|
self.heat = 30; // damage done
|
||||||
|
|
Loading…
Reference in a new issue