]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Totally re-work how the tracing works for shotgun secondary... possibly needs rebalan...
authorSamual <samual@xonotic.org>
Thu, 22 Sep 2011 22:43:17 +0000 (18:43 -0400)
committerSamual <samual@xonotic.org>
Thu, 22 Sep 2011 22:43:17 +0000 (18:43 -0400)
balance25.cfg
balanceFruit.cfg
balanceLeeStricklin.cfg
balanceXonotic.cfg
balancetZork.cfg
qcsrc/server/autocvars.qh
qcsrc/server/w_shotgun.qc

index 843bd634fdfedb6b7da041a49327245c3dd9f0d8..9949192c8f62f8437a47a08441fe9f0865fe6682 100644 (file)
@@ -258,10 +258,12 @@ set g_balance_shotgun_primary_ammo 1
 set g_balance_shotgun_primary_speed 12000
 set g_balance_shotgun_primary_bulletconstant 75 // 3.8qu
 set g_balance_shotgun_secondary 1
-set g_balance_shotgun_secondary_melee_delay 0.35 // match the anim
-set g_balance_shotgun_secondary_melee_range 60
-set g_balance_shotgun_secondary_melee_swing 50
-set g_balance_shotgun_secondary_melee_time 0.1
+set g_balance_shotgun_secondary_melee_delay 0.25 // 0.35 was too slow
+set g_balance_shotgun_secondary_melee_range 120
+set g_balance_shotgun_secondary_melee_swing_side 120
+set g_balance_shotgun_secondary_melee_swing_up 30
+set g_balance_shotgun_secondary_melee_time 0.15
+set g_balance_shotgun_secondary_melee_traces 10
 set g_balance_shotgun_secondary_melee_no_doubleslap 1
 set g_balance_shotgun_secondary_damage 115
 set g_balance_shotgun_secondary_force 150
index 5a078e44cfe7dd5a7e10664f51ed33b5e288cf35..fc1a3d034c0113565f6e2741edba39bcca6be65b 100644 (file)
@@ -258,11 +258,13 @@ set g_balance_shotgun_primary_ammo 1
 set g_balance_shotgun_primary_speed 12000
 set g_balance_shotgun_primary_bulletconstant 75 // 3.8qu
 set g_balance_shotgun_secondary 1
-set g_balance_shotgun_secondary_melee_delay 0.35 // match the anim
-set g_balance_shotgun_secondary_melee_range 85
-set g_balance_shotgun_secondary_melee_swing 50
-set g_balance_shotgun_secondary_melee_time 0.1
-set g_balance_shotgun_secondary_melee_no_doubleslap 0
+set g_balance_shotgun_secondary_melee_delay 0.25 // 0.35 was too slow
+set g_balance_shotgun_secondary_melee_range 120
+set g_balance_shotgun_secondary_melee_swing_side 120
+set g_balance_shotgun_secondary_melee_swing_up 30
+set g_balance_shotgun_secondary_melee_time 0.15
+set g_balance_shotgun_secondary_melee_traces 10
+set g_balance_shotgun_secondary_melee_no_doubleslap 1
 set g_balance_shotgun_secondary_damage 110
 set g_balance_shotgun_secondary_force 150
 set g_balance_shotgun_secondary_refire 1.1
index 02e804e798ed7aca25363201c6c120632cfc917a..4741f00f2d52f9e689493385d859252033641b98 100644 (file)
@@ -258,10 +258,12 @@ set g_balance_shotgun_primary_ammo 1
 set g_balance_shotgun_primary_speed 12000
 set g_balance_shotgun_primary_bulletconstant 75 // 3.8qu
 set g_balance_shotgun_secondary 1
-set g_balance_shotgun_secondary_melee_delay 0.35 // match the anim
-set g_balance_shotgun_secondary_melee_range 85
-set g_balance_shotgun_secondary_melee_swing 50
-set g_balance_shotgun_secondary_melee_time 0.1
+set g_balance_shotgun_secondary_melee_delay 0.25 // 0.35 was too slow
+set g_balance_shotgun_secondary_melee_range 120
+set g_balance_shotgun_secondary_melee_swing_side 120
+set g_balance_shotgun_secondary_melee_swing_up 30
+set g_balance_shotgun_secondary_melee_time 0.15
+set g_balance_shotgun_secondary_melee_traces 10
 set g_balance_shotgun_secondary_melee_no_doubleslap 1
 set g_balance_shotgun_secondary_damage 84
 set g_balance_shotgun_secondary_force 147
index dc9a9c06515b6ac8d8eafa1423c1d5e0b29e8843..71ed51b81571fd9e0ca32782316cd1114109f118 100644 (file)
@@ -260,8 +260,10 @@ set g_balance_shotgun_primary_bulletconstant 75 // 3.8qu
 set g_balance_shotgun_secondary 1
 set g_balance_shotgun_secondary_melee_delay 0.25 // 0.35 was too slow
 set g_balance_shotgun_secondary_melee_range 120
-set g_balance_shotgun_secondary_melee_swing 50
-set g_balance_shotgun_secondary_melee_time 0.1
+set g_balance_shotgun_secondary_melee_swing_side 120
+set g_balance_shotgun_secondary_melee_swing_up 30
+set g_balance_shotgun_secondary_melee_time 0.15
+set g_balance_shotgun_secondary_melee_traces 10
 set g_balance_shotgun_secondary_melee_no_doubleslap 1
 set g_balance_shotgun_secondary_damage 110
 set g_balance_shotgun_secondary_force 200
index 57c4996871f3fc2fa46719ec04ac9e46cdf1aa75..49de125f975baf5812d42e91b169eb83aa22cbdd 100644 (file)
@@ -258,10 +258,12 @@ set g_balance_shotgun_primary_ammo 1
 set g_balance_shotgun_primary_speed 12000
 set g_balance_shotgun_primary_bulletconstant 75 // 3.8qu
 set g_balance_shotgun_secondary 1
-set g_balance_shotgun_secondary_melee_delay 0.35 // match the anim
-set g_balance_shotgun_secondary_melee_range 85
-set g_balance_shotgun_secondary_melee_swing 50
-set g_balance_shotgun_secondary_melee_time 0.1
+set g_balance_shotgun_secondary_melee_delay 0.25 // 0.35 was too slow
+set g_balance_shotgun_secondary_melee_range 120
+set g_balance_shotgun_secondary_melee_swing_side 120
+set g_balance_shotgun_secondary_melee_swing_up 30
+set g_balance_shotgun_secondary_melee_time 0.15
+set g_balance_shotgun_secondary_melee_traces 10
 set g_balance_shotgun_secondary_melee_no_doubleslap 1
 set g_balance_shotgun_secondary_damage 110
 set g_balance_shotgun_secondary_force 150
index 7b7a3fcef0e66ff00f44a5e2828ead66486fcb69..bcb47926bb2d35eac1307f7b88f89451166ae0d6 100644 (file)
@@ -651,8 +651,10 @@ float autocvar_g_balance_shotgun_secondary_damage;
 float autocvar_g_balance_shotgun_secondary_force;
 float autocvar_g_balance_shotgun_secondary_melee_delay;
 float autocvar_g_balance_shotgun_secondary_melee_range;
-float autocvar_g_balance_shotgun_secondary_melee_swing;
+float autocvar_g_balance_shotgun_secondary_melee_swing_side;
+float autocvar_g_balance_shotgun_secondary_melee_swing_up;
 float autocvar_g_balance_shotgun_secondary_melee_time;
+float autocvar_g_balance_shotgun_secondary_melee_traces;
 float autocvar_g_balance_shotgun_secondary_melee_no_doubleslap;
 float autocvar_g_balance_shotgun_secondary_refire;
 float autocvar_g_balance_shotgun_reload_ammo;
index 2088073f9970e62a1836b96725ab231f85898638..e78db50a837e892a2edc607ef69049ebe2f40d2c 100644 (file)
@@ -47,46 +47,69 @@ void W_Shotgun_Attack (void)
 }
 
 entity lgbeam_owner_ent;
+.float swing_prev;
 void shotgun_meleethink (void)
 {
-       // store time when we started swinging down inside self.cnt
-       if(!self.cnt)
-               self.cnt = time;
+       // declarations
+       float i, f, swing, swing_factor, meleetime;
+       vector targpos;
+       
+       if(!self.cnt) { self.cnt = time; }
 
        makevectors(self.realowner.v_angle);
-       vector angle;
-       angle = v_forward;
 
-       float meleetime;
        meleetime = autocvar_g_balance_shotgun_secondary_melee_time * W_WeaponRateFactor();
 
-       // perform trace
-       float f;
-       f = (self.cnt + meleetime - time) / meleetime * 2 - 1;
-       vector targpos;
-       targpos = self.realowner.origin + self.realowner.view_ofs + angle * autocvar_g_balance_shotgun_secondary_melee_range + v_right * f * autocvar_g_balance_shotgun_secondary_melee_swing + v_up * f * autocvar_g_balance_shotgun_secondary_melee_swing;
-
-       if(!lgbeam_owner_ent)
+       swing = bound(0, (self.cnt + meleetime - time) / meleetime, 1);
+       f = ((1 - swing) * autocvar_g_balance_shotgun_secondary_melee_traces);
+       
+       for(i=self.swing_prev; i < f; ++i)
        {
-               lgbeam_owner_ent = spawn();
-               lgbeam_owner_ent.classname = "lgbeam_owner_ent";
+               swing_factor = ((1 - (i / autocvar_g_balance_shotgun_secondary_melee_traces)) * 2 - 1);
+               
+               targpos = (self.realowner.origin + self.realowner.view_ofs 
+                       + (v_forward * autocvar_g_balance_shotgun_secondary_melee_range)
+                       + (v_up * swing_factor * autocvar_g_balance_shotgun_secondary_melee_swing_up)
+                       + (v_right * swing_factor * autocvar_g_balance_shotgun_secondary_melee_swing_side));
+                       
+               if(!lgbeam_owner_ent) // WTF IS THIS DOING HERE?
+               {
+                       lgbeam_owner_ent = spawn();
+                       lgbeam_owner_ent.classname = "lgbeam_owner_ent";
+               }
+               WarpZone_traceline_antilag(lgbeam_owner_ent, self.realowner.origin + self.realowner.view_ofs, targpos, FALSE, lgbeam_owner_ent, ANTILAG_LATENCY(self.realowner));
+
+               // te_lightning2(world, targpos, self.realowner.origin + self.realowner.view_ofs + v_forward * 5 - v_up * 5);
+               // te_customflash(targpos, 40,  2, '1 1 1');
+
+               // apply the damage, also remove self
+               if((trace_fraction < 1) && (trace_ent.takedamage == DAMAGE_AIM) && (trace_ent.classname == "player" || trace_ent.classname == "body"))
+               {       
+                       Damage(trace_ent, self.realowner, self.realowner, 
+                               autocvar_g_balance_shotgun_secondary_damage * min(1, swing_factor + 1), WEP_SHOTGUN | HITTYPE_SECONDARY, 
+                               self.realowner.origin + self.realowner.view_ofs, 
+                               v_forward * autocvar_g_balance_shotgun_secondary_force);
+                               
+                       if(accuracy_isgooddamage(self.realowner, trace_ent))
+                               accuracy_add(self.realowner, WEP_SHOTGUN, 0, autocvar_g_balance_shotgun_secondary_damage * min(1, swing_factor + 1));
+                               
+                       // debug: te_customflash(targpos, 200, 2, '15 0 0');
+                       
+                       remove(self);
+                       return;
+               }
        }
-       WarpZone_traceline_antilag(lgbeam_owner_ent, self.realowner.origin + self.realowner.view_ofs, targpos, FALSE, lgbeam_owner_ent, ANTILAG_LATENCY(self.realowner));
-
-       // apply the damage, also remove self
-       if(trace_fraction < 1 && trace_ent.takedamage == DAMAGE_AIM && (trace_ent.classname == "player" || trace_ent.classname == "body"))
+       
+       if(time >= self.cnt + meleetime || (self.realowner.deadflag != DEAD_NO && autocvar_g_balance_shotgun_secondary_melee_no_doubleslap)) // missed or owner died, remove ent
        {
-               vector force;
-               force = angle * autocvar_g_balance_shotgun_secondary_force;
-               if(accuracy_isgooddamage(self.realowner, trace_ent))
-                       accuracy_add(self.realowner, WEP_SHOTGUN, 0, autocvar_g_balance_shotgun_secondary_damage * min(1, f + 1));
-               Damage (trace_ent, self.realowner, self.realowner, autocvar_g_balance_shotgun_secondary_damage * min(1, f + 1), WEP_SHOTGUN | HITTYPE_SECONDARY , self.realowner.origin + self.realowner.view_ofs, force);
                remove(self);
+               return;
        }
-       else if(time >= self.cnt + meleetime || (self.realowner.deadflag != DEAD_NO && autocvar_g_balance_shotgun_secondary_melee_no_doubleslap)) // missed or owner died, remove ent
-               remove(self);
-       else // continue swinging the weapon in hope of hitting someone :)
+       else
+       {
+               self.swing_prev = i;
                self.nextthink = time;
+       }
 }
 
 void W_Shotgun_Attack2 (void)