r4826 - in trunk/data/qcsrc/server/tturrets: system units

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Thu Oct 23 02:39:27 EDT 2008


Author: tzork
Date: 2008-10-23 02:39:27 -0400 (Thu, 23 Oct 2008)
New Revision: 4826

Modified:
   trunk/data/qcsrc/server/tturrets/system/turret_system_aimprocs.qc
   trunk/data/qcsrc/server/tturrets/system/turret_system_main.qc
   trunk/data/qcsrc/server/tturrets/system/turret_system_misc.qc
   trunk/data/qcsrc/server/tturrets/units/turret_unit_common.qc
   trunk/data/qcsrc/server/tturrets/units/turret_unit_flac.qc
   trunk/data/qcsrc/server/tturrets/units/turret_unit_hk.qc
   trunk/data/qcsrc/server/tturrets/units/turret_unit_mlrs.qc
   trunk/data/qcsrc/server/tturrets/units/turret_unit_plasma.qc
Log:
Another round of turret updates.

Modified: trunk/data/qcsrc/server/tturrets/system/turret_system_aimprocs.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/system/turret_system_aimprocs.qc	2008-10-23 06:23:23 UTC (rev 4825)
+++ trunk/data/qcsrc/server/tturrets/system/turret_system_aimprocs.qc	2008-10-23 06:39:27 UTC (rev 4826)
@@ -7,6 +7,7 @@
 supports:
 TFL_AIM_NO
 */
+/*
 vector turret_stdproc_aim_simple()
 {
     float s_bu;     // Solidity backup (for ground shooters)
@@ -29,6 +30,7 @@
     // This is where its at.
     return aim_pos;
 }
+*/
 
 /*
 * Generic aim
@@ -45,9 +47,12 @@
 not supported:
 TFL_AIM_BALISTIC
 */
+
+
 vector turret_stdproc_aim_generic()
 {
     vector pre_pos;
+    // entity mover;
 
     if (self.aim_flags == TFL_AIM_NO)
         return self.idle_aim;
@@ -55,41 +60,57 @@
     // Baseline
     pre_pos = real_origin(self.enemy);
 
+    if(self.aim_flags & TFL_AIM_SIMPLE)
+        return pre_pos;
+
     // Lead?
+    //pre_pos = pre_pos + bot_shotlead(self.enemy.origin, self.enemy.velocity, self.shot_speed, 0.01); //self.enemy.velocity;  * (self.tur_dist_enemy / self.shot_speed);
     if (self.aim_flags & TFL_AIM_LEAD)
         if (self.aim_flags & TFL_AIM_SHOTTIMECOMPENSATE)       // Need to conpensate for shot traveltime
-            pre_pos += self.enemy.velocity * (self.tur_dist_enemy / self.shot_speed);
+        {
+            pre_pos = pre_pos + self.enemy.velocity  * (self.tur_dist_enemy / self.shot_speed);
+
+            // FIXME slow projectiles misspredict (well all do, bit the slow ons miss :P)
+        }
         else if (self.turrcaps_flags & TFL_TURRCAPS_HITSCAN)   // Hitscan gun, conpensate for frametime and posibly refire offset.
-            pre_pos += self.enemy.velocity * (frametime + min(max(self.attack_finished_single - time,0),self.ticrate*2));
+            pre_pos = pre_pos + self.enemy.velocity * (frametime + min(max(self.attack_finished_single - time,0),self.ticrate*2));
         else                                                   // No lead
             pre_pos += self.enemy.velocity;
 
+
     // Smooth out predict-Z?
+    /*
     if (self.aim_flags & TFL_AIM_ZEASE)
     {
         vector v;
         v = real_origin(self.enemy);
-        //pre_pos_z = (pre_pos_z * 0.5) + (v_z * 0.5);
         pre_pos_z = (pre_pos_z  + v_z) * 0.5;
     }
+    */
 
+    /*
     if (self.aim_flags & TFL_AIM_INFRONT)   // Aim a bit in front of the target
         pre_pos -= normalize(self.tur_aimorg_updated - pre_pos) * 32;
 
     if (self.aim_flags & TFL_AIM_BEHIND)    // Aim a bit behind the target
         pre_pos += normalize(self.tur_aimorg_updated - pre_pos) * 32;
 
+    */
+    // This turret should hit the ground neer a target rather the do a direct hit
 
-    // This turret should hit the ground neer a target rather the do a direct hit
     if ( (self.aim_flags & TFL_AIM_GROUND) ||
          ((self.aim_flags & TFL_AIM_GROUND2) && (self.enemy.flags & FL_ONGROUND)) )
     {
-        traceline(pre_pos + '0 0 512',pre_pos - '0 0 2048',1,self.enemy);
+        traceline(pre_pos + '0 0 8',pre_pos - '0 0 10000',1,self.enemy);
         pre_pos = trace_endpos;
     }
 
-    // self.tur_impacttime = vlen(pre_pos - self.origin) / self.shot_speed;
 
+
+
+
+
+
     return pre_pos;
 }
 
@@ -99,6 +120,7 @@
 supports:
 TFL_AIM_NO
 */
+/*
 vector turret_stdproc_aim_rail()
 {
     vector pre_pos;
@@ -115,6 +137,4 @@
     return pre_pos;
 
 }
-
-
-
+*/

Modified: trunk/data/qcsrc/server/tturrets/system/turret_system_main.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/system/turret_system_main.qc	2008-10-23 06:23:23 UTC (rev 4825)
+++ trunk/data/qcsrc/server/tturrets/system/turret_system_main.qc	2008-10-23 06:39:27 UTC (rev 4826)
@@ -99,8 +99,6 @@
 **/
 void turret_do_updates(entity e_turret)
 {
-    //vector trueaimpoint;
-
     if (self.turrcaps_flags & TFL_TURRCAPS_LINKED)
     {
         e_turret.tur_head.angles_x = e_turret.tur_head.angles_x * -1;
@@ -115,23 +113,20 @@
         makevectors(e_turret.tur_head.angles);
         e_turret.tur_head.angles_x = e_turret.tur_head.angles_x * -1;
     }
+    // v_right = (v_right * -1);
+    e_turret.tur_shotorg_updated = e_turret.origin + v_forward * e_turret.tur_shotorg_x + v_right * e_turret.tur_shotorg_y + v_up * e_turret.tur_shotorg_z;
 
-    //traceline_hitcorpse(e_turret, e_turret.origin, e_turret.origin + v_forward * MAX_SHOT_DISTANCE, MOVE_NOMONSTERS, e_turret);
-    //trueaimpoint = trace_endpos;
-
-    e_turret.tur_shotorg_updated = e_turret.origin + v_forward * e_turret.tur_shotorg_x + v_right * e_turret.tur_shotorg_y + v_up * e_turret.tur_shotorg_z;
-    //e_turret.tur_shotdir_updated = normalize(trueaimpoint - e_turret.tur_shotorg_updated);
-    e_turret.tur_shotdir_updated = normalize((e_turret.tur_shotorg_updated + v_forward * 512) - e_turret.tur_shotorg_updated);
+    e_turret.tur_shotdir_updated = normalize((e_turret.tur_shotorg_updated + v_forward) - e_turret.tur_shotorg_updated);
     e_turret.tur_aimorg_updated = e_turret.origin + v_forward * e_turret.tur_aimorg_x + v_right * e_turret.tur_aimorg_y + v_up * e_turret.tur_aimorg_z;
-    //e_turret.tur_aimorg_updated = e_turret.tur_shotorg_updated;
 
+
     e_turret.tur_dist_enemy = vlen(e_turret.tur_aimorg_updated - real_origin(e_turret.enemy));
-    //e_turret.tur_dist_enemy = vlen(e_turret.tur_aimpos - e_turret.tur_shotorg_updated);
 
-    traceline(e_turret.tur_aimorg_updated,e_turret.tur_aimorg_updated+(e_turret.tur_shotdir_updated * e_turret.tur_dist_enemy),TRUE,e_turret);
+    traceline(e_turret.tur_aimorg_updated,e_turret.tur_aimorg_updated+(e_turret.tur_shotdir_updated * e_turret.tur_dist_enemy),MOVE_NORMAL,e_turret);
 
     e_turret.tur_impactpoint = trace_endpos;
     e_turret.tur_impactent = trace_ent;
+    //e_turret.tur_impacttime = e_turret.tur_dist_enemy / e_turret.shot_speed;
     e_turret.tur_impacttime = e_turret.tur_dist_enemy / e_turret.shot_speed;
     e_turret.tur_dist_toaimpos = vlen(trace_endpos - e_turret.tur_aimpos);
 }
@@ -156,7 +151,8 @@
         if (self.turrcaps_flags & TFL_TURRCAPS_LINKED)
             wish_angle = self.idle_aim + self.angles;
         else
-            wish_angle = self.idle_aim;
+            wish_angle = self.tur_head.angles;
+            //wish_angle = self.idle_aim;
     }
     else
     {
@@ -175,19 +171,41 @@
     else
     {
         //if(vlen(wish_angle - self.tur_head.angles) > vlen(self.tur_head.angles - wish_angle))
-            real_angle = wish_angle - self.tur_head.angles;
+        real_angle = wish_angle - self.tur_head.angles;
         //else
         //    real_angle =  self.tur_head.angles - wish_angle;
     }
 
-    // Constrain it within +/- 360
-    if (real_angle_x <= 0) real_angle_x += 360;
-    if (real_angle_x >= 180) real_angle_x -= 360;
+    /*
+    if(real_angle_y > 180)
+        bprint("^3");
+    if(real_angle_y < -180)
+        bprint("^1");
+    string s;
+    s = vtos(real_angle);
+    bprint("RA1: ",s);
+    */
 
-    //if (real_angle_y <= 0) real_angle_y += 360;
+
+    if (real_angle_x < 0) real_angle_x += 360;
+    if (real_angle_x > 180) real_angle_x -= 360;
+
+    if (real_angle_y < 0) real_angle_y += 360;
     if (real_angle_y >= 180) real_angle_y -= 360;
 
+    //s = vtos(real_angle);
+    //bprint(" RA2: ",s,"\n");
 
+    // Limit pitch
+
+    if (self.track_flags & TFL_TRACK_PITCH)
+        real_angle_x = bound(self.aim_maxpitch * -1,real_angle_x,self.aim_maxpitch);
+
+    // Limit rot
+    if (self.track_flags & TFL_TRACK_ROT)
+        real_angle_y = bound(self.aim_maxrot * -1,real_angle_y,self.aim_maxrot);
+
+
     if (self.track_type == TFL_TRACKTYPE_STEPMOTOR)
     {
         f_tmp = self.aim_speed * self.ticrate; // dgr/sec -> dgr/tic
@@ -228,6 +246,7 @@
     }
 
     // Limit pitch
+    /*
     if (self.track_flags & TFL_TRACK_PITCH)
     {
         if (self.tur_head.angles_x > self.aim_maxpitch)
@@ -256,6 +275,7 @@
             self.tur_head.avelocity_y = 0;
         }
     }
+    */
 
 
 }
@@ -522,9 +542,9 @@
     self.nextthink = (time + self.ticrate);
 
     // ONS uses somewhat backwards linking.
-    if(teamplay)
+    if (teamplay)
     {
-        if(g_onslaught)
+        if (g_onslaught)
         {
             /*
             // see turret_stdproc_use()
@@ -538,15 +558,15 @@
         }
         else
         {
-            if(self.target)
+            if (self.target)
             {
                 e = find(world,targetname,self.target);
-                if(e != world)
+                if (e != world)
                     self.team = e.team;
             }
         }
 
-        if(self.team != self.tur_head.team)
+        if (self.team != self.tur_head.team)
             turret_stdproc_respawn();
     }
 
@@ -620,7 +640,7 @@
     else
     {
         // Check if we have a vailid enemy, and get one if we dont.
-            // turret_do_updates(self);
+        // turret_do_updates(self);
         if ((turret_validate_target(self,self.enemy,self.target_validate_flags) <= 0) || (self.cnt < time))
         {
             self.enemy = turret_select_target();
@@ -641,21 +661,22 @@
             // And bail.
             return;
         }
-        // te_lightning1(world,self.origin,self.enemy.origin);
-        // Update
+
         turret_do_updates(self);
 
         // Predict or whatnot
-        if (!self.aim_flags & TFL_AIM_NO)
+        if not((self.aim_flags & TFL_AIM_NO))
             self.tur_aimpos = turret_stdproc_aim_generic();
-            //self.tur_aimpos = self.turret_aim();
 
+        // Fire?
+        if (self.turret_firecheckfunc() != 0)
+            turret_fire();
+        turret_do_updates(self);
+
         // Turn & pitch
         if (!self.track_flags & TFL_TRACK_NO)
             turret_stdproc_track();
-            //self.turret_track();
 
-        // Update
         turret_do_updates(self);
 
         // Fire?
@@ -703,18 +724,18 @@
 {
     // bprint("Used:",self.netname, " By ",other.netname,"\n");
 
-    if(g_onslaught)
+    if (g_onslaught)
     {
         entity e;
 
-        if(self.targetname)
+        if (self.targetname)
         {
             e = find(world,target,self.targetname);
-            if(e != world)
+            if (e != world)
                 self.team = e.team;
         }
 
-        if(self.team != self.tur_head.team)
+        if (self.team != self.tur_head.team)
             turret_stdproc_respawn();
     }
     else
@@ -1032,6 +1053,7 @@
     }
 
     self.use = turret_stdproc_use;
+    self.bot_attack = TRUE;
 
     // Initiate the main AI loop
     self.think     = turret_think;

Modified: trunk/data/qcsrc/server/tturrets/system/turret_system_misc.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/system/turret_system_misc.qc	2008-10-23 06:23:23 UTC (rev 4825)
+++ trunk/data/qcsrc/server/tturrets/system/turret_system_misc.qc	2008-10-23 06:39:27 UTC (rev 4826)
@@ -36,7 +36,7 @@
     e = spawn();
     setmodel(e, "models/turrets/c512.md3"); // precision set above
     e.scale = (f_size/512);
-    setsize(e, '0 0 0', '0 0 0');
+    //setsize(e, '0 0 0', '0 0 0');
     //setattachment(e,onwho,"");
     setorigin(e,onwho.origin + '0 0 1');
     e.alpha = 0.15;

Modified: trunk/data/qcsrc/server/tturrets/units/turret_unit_common.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/turret_unit_common.qc	2008-10-23 06:23:23 UTC (rev 4825)
+++ trunk/data/qcsrc/server/tturrets/units/turret_unit_common.qc	2008-10-23 06:39:27 UTC (rev 4826)
@@ -116,6 +116,8 @@
 
 void turrets_precash()
 {
+    precache_model ("models/turrets/c512.md3");
+
     precache_sound ("turrets/phaser.ogg");
 
     precache_model ("models/turrets/base-gib1.md3");

Modified: trunk/data/qcsrc/server/tturrets/units/turret_unit_flac.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/turret_unit_flac.qc	2008-10-23 06:23:23 UTC (rev 4825)
+++ trunk/data/qcsrc/server/tturrets/units/turret_unit_flac.qc	2008-10-23 06:39:27 UTC (rev 4826)
@@ -52,11 +52,14 @@
 
     self.event_damage = SUB_Null;
 
-    ftmp = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
 
 #ifdef TURRET_DEBUG
-    self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d; //self.owner.shot_dmg;
+
+    ftmp = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
+    self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + ftmp; //self.owner.shot_dmg;
     self.owner.tur_dbg_dmg_t_f = self.owner.tur_dbg_dmg_t_f + self.owner.shot_dmg;
+#else
+    RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
 #endif
 
     remove (self);

Modified: trunk/data/qcsrc/server/tturrets/units/turret_unit_hk.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/turret_unit_hk.qc	2008-10-23 06:23:23 UTC (rev 4825)
+++ trunk/data/qcsrc/server/tturrets/units/turret_unit_hk.qc	2008-10-23 06:39:27 UTC (rev 4826)
@@ -90,7 +90,7 @@
     missile                    = spawn ();
     missile.solid            = SOLID_BBOX;
     setmodel (missile, "models/turrets/hunter2.md3"); // precision set below
-    setsize (missile, '-3 -3 -3', '3 3 3'); // give it some size so it can be shot
+    setsize (missile, missile.mins,missile.maxs); // give it some size so it can be shot
     sound    (missile, CHAN_PROJECTILE, "weapons/rocket_fly.wav", 0.4, ATTN_NORM);
     setorigin(missile, self.tur_shotorg_updated);
 
@@ -100,8 +100,8 @@
     missile.bot_dodge        = TRUE;
     missile.bot_dodgerating  = self.shot_dmg;
     missile.takedamage       = DAMAGE_YES;
-    missile.damageforcescale = 2;
-    missile.health           = 35;
+    missile.damageforcescale = 4;
+    missile.health           = 10;
     missile.think            = turret_hk_missile_think;
     missile.event_damage     = turret_hk_missile_damage;
     missile.nextthink        = time + 0.25;
@@ -153,7 +153,7 @@
     vector pre_pos;
     float myspeed;
     entity e;
-    float ad;
+    float ad,edist;
 
     self.nextthink = time + self.ticrate;
 
@@ -188,8 +188,9 @@
 
     if (self.enemy)
     {
+        edist = vlen(self.origin - self.enemy.origin);
         // Close enougth to do decent damage?
-        if ( vlen(self.origin - self.enemy.origin) <= (self.owner.shot_radius * 0.25) )
+        if ( edist <= (self.owner.shot_radius * 0.25) )
         {
             turret_hk_missile_explode();
             return;
@@ -210,12 +211,12 @@
         fe = 0;
     }
 
-    if ((fe != 1) || (self.enemy == world))
+    if ((fe != 1) || (self.enemy == world) || (edist > 1000))
     {
         myspeed = vlen(self.velocity);
 
-        lt_for  = myspeed * 2;
-        lt_seek = myspeed * 1.5;
+        lt_for  = myspeed * 3;
+        lt_seek = myspeed * 2.95;
 
         // Trace forward
         traceline(self.origin, self.origin + v_forward * lt_for,FALSE,self);
@@ -225,10 +226,8 @@
         // Find angular offset
         ad = vlen(vectoangles(normalize(self.enemy.origin - self.origin)) - self.angles);
 
-        //Calculate new speed
-
         // To close to something, Slow down!
-        if ( ((ff < 0.7) || (ad > 5)) && (myspeed > hk_minspeed) )
+        if ( ((ff < 0.7) || (ad > 4)) && (myspeed > hk_minspeed) )
             myspeed = max(myspeed * hk_decel,hk_minspeed);
 
         // Failry clear, accelerate.
@@ -237,7 +236,7 @@
 
         // Setup trace pitch
         pt_seek = 1 - ff;
-        pt_seek = bound(0.125,pt_seek,0.8);
+        pt_seek = bound(0.15,pt_seek,0.8);
         if (ff < 0.5) pt_seek = 1;
 
         // Trace left
@@ -327,7 +326,7 @@
 
 #ifdef TURRET_DEBUG_HK
     //if(self.atime < time) {
-    if (fe <= 0.99)
+    if ((fe <= 0.99)||(edist > 1000))
     {
         te_lightning2(world,self.origin, self.origin + vr * lt_seek);
         te_lightning2(world,self.origin, self.origin + vl * lt_seek);

Modified: trunk/data/qcsrc/server/tturrets/units/turret_unit_mlrs.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/turret_unit_mlrs.qc	2008-10-23 06:23:23 UTC (rev 4825)
+++ trunk/data/qcsrc/server/tturrets/units/turret_unit_mlrs.qc	2008-10-23 06:39:27 UTC (rev 4826)
@@ -6,8 +6,12 @@
 void turret_mlrs_postthink()
 {
 
-    if ((self.tur_head.frame >= 6) && (self.attack_finished_single <= time))
-        self.tur_head.frame = 0;
+    // 0 = full, 6 = empty
+
+    self.tur_head.frame = rint(6 - (self.ammo / self.shot_dmg));
+
+    //if ((self.tur_head.frame >= 6) && (self.attack_finished_single <= time))
+    //    self.tur_head.frame = 0;
 }
 
 void turret_mlrs_attack()
@@ -44,7 +48,7 @@
 
     te_explosion (missile.origin);
 
-    self.tur_head.frame = 7 - self.volly_counter;
+    //self.tur_head.frame = 7 - self.volly_counter;
 }
 
 void turret_mlrs_projectile_explode()

Modified: trunk/data/qcsrc/server/tturrets/units/turret_unit_plasma.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/turret_unit_plasma.qc	2008-10-23 06:23:23 UTC (rev 4825)
+++ trunk/data/qcsrc/server/tturrets/units/turret_unit_plasma.qc	2008-10-23 06:39:27 UTC (rev 4826)
@@ -12,18 +12,20 @@
     if (self.tur_head.frame != 0)
         self.tur_head.frame = self.tur_head.frame + 1;
 
-    if (self.classname == "turret_plasma_dual")
-    {
-        if (self.tur_head.frame >= 6)
-            self.tur_head.frame = 0;
-    }
-    else
-    {
-        if (self.tur_head.frame >= 5)
-            self.tur_head.frame = 0;
-    }
+    if (self.tur_head.frame >= 5)
+        self.tur_head.frame = 0;
+
 }
 
+void turret_plasma_dualpostthink()
+{
+    if (self.tur_head.frame != 0)
+        self.tur_head.frame = self.tur_head.frame + 1;
+
+    if (self.tur_head.frame >= 6)
+        self.tur_head.frame = 0;
+}
+
 void turret_plasma_attack()
 {
     entity proj;
@@ -33,6 +35,44 @@
     sound (self, CHAN_WEAPON, "weapons/hagar_fire.wav", 1, ATTN_NORM);
     proj                    = spawn ();
     setorigin(proj, self.tur_shotorg_updated);
+    setsize(proj, '-0.5 -0.5 -0.5', '0.5 0.5 0.5');
+    setmodel(proj, "models/elaser.mdl"); // precision set above
+    proj.classname       = "plasmabomb";
+    proj.owner           = self;
+    proj.bot_dodge       = FALSE;
+    //proj.bot_dodgerating = self.shot_dmg;
+    proj.think           = turret_plasma_projectile_explode;
+    proj.nextthink       = time + 9;
+    proj.solid           = SOLID_BBOX;
+    proj.movetype        = MOVETYPE_FLYMISSILE;
+    proj.velocity        = (self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;
+    proj.angles          = vectoangles(proj.velocity);
+    proj.touch           = turret_plasma_projectile_explode;
+    proj.flags           = FL_PROJECTILE;
+    proj.effects         = EF_LOWPRECISION |  EF_BRIGHTFIELD;
+    proj.enemy           = self.enemy;
+    proj.flags           = FL_PROJECTILE | FL_NOTARGET;
+
+    if (self.tur_head.frame == 0)
+        self.tur_head.frame = 1;
+
+    // Snapback the head
+    // self.tur_head.angles_x = self.tur_head.angles_x + min((self.shot_dmg * 0.05),self.aim_maxpitch);
+
+}
+
+void turret_plasma_dual_attack()
+{
+    entity proj;
+
+    if (self.tur_head.frame > 2)
+        self.tur_head.frame = 1;
+
+    turret_tag_fire_update();
+
+    sound (self, CHAN_WEAPON, "weapons/hagar_fire.wav", 1, ATTN_NORM);
+    proj                    = spawn ();
+    setorigin(proj, self.tur_shotorg_updated);
     setsize(proj, '0 0 0', '0 0 0');
     setmodel(proj, "models/elaser.mdl"); // precision set above
     proj.classname       = "plasmabomb";
@@ -54,14 +94,9 @@
     if (self.tur_head.frame == 0)
         self.tur_head.frame = 1;
 
-    // trailparticles(proj,particleeffectnum("TR_REDPLASMA"),proj.origin,proj.origin + proj.velocity);
-
     // Snapback the head
     // self.tur_head.angles_x = self.tur_head.angles_x + min((self.shot_dmg * 0.05),self.aim_maxpitch);
 
-    //if(self.classname == "turret_plasma_dual")
-    //    self.tur_shotorg_y = self.tur_shotorg_y * -1;
-
 }
 
 void turret_plasma_projectile_explode()
@@ -117,10 +152,10 @@
         dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
 
     // Our fire routine
-    self.turret_firefunc  = turret_plasma_attack;
+    self.turret_firefunc  = turret_plasma_dual_attack;
 
     // re-color badge & handle recoil effect
-    self.turret_postthink = turret_plasma_postthink;
+    self.turret_postthink = turret_plasma_dualpostthink;
 }
 
 
@@ -143,7 +178,7 @@
         dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
 
     // select aim
-    self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_ZEASE;
+    self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_ZEASE | TFL_AIM_GROUND2;
 
     // Our fire routine
     self.turret_firefunc  = turret_plasma_attack;




More information about the nexuiz-commits mailing list