]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/w_crylink.qc
fix a missing sqrt
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / w_crylink.qc
index 5c0bfbc9aee8515947d101496e1deb78281400c1..5424b64b8e8104cee9902fb59f15f89c117885de 100644 (file)
@@ -3,7 +3,7 @@ REGISTER_WEAPON(CRYLINK, w_crylink, IT_CELLS, 6, WEP_FLAG_NORMAL | WEP_TYPE_SPLA
 #else
 #ifdef SVQC
 .float gravity;
-.float crylink_release;
+.float crylink_waitrelease;
 .entity crylink_lastgroup;
 
 .entity queuenext;
@@ -28,10 +28,14 @@ void W_Crylink_LinkExplode (entity e, entity e2)
        float a;
        a = bound(0, 1 - (time - e.fade_time) * e.fade_rate, 1);
 
+       if(e == e.realowner.crylink_lastgroup)
+               e.realowner.crylink_lastgroup = world;
+
        RadiusDamage (e, e.realowner, cvar("g_balance_crylink_primary_damage") * a, cvar("g_balance_crylink_primary_edgedamage") * a, cvar("g_balance_crylink_primary_radius"), world, cvar("g_balance_crylink_primary_force") * a, e.projectiledeathtype, other);
 
        if(e.queuenext != e2)
                W_Crylink_LinkExplode(e.queuenext, e2);
+
        remove (e);
 }
 
@@ -65,6 +69,7 @@ vector W_Crylink_LinkJoin(entity e, float joinspeed)
        for(p = e; (p = p.queuenext) != e; )
                avg_dist += pow(vlen(e.origin - avg_origin), 2);
        avg_dist *= (1.0 / n);
+       avg_dist = sqrt(avg_dist);
 
        w_crylink_linkjoin_time = 0;
        if(avg_dist == 0)
@@ -401,16 +406,45 @@ float w_crylink(float req)
        else if (req == WR_THINK)
        {
                if (self.BUTTON_ATCK)
-               if (weapon_prepareattack(0, cvar("g_balance_crylink_primary_refire")))
                {
-                       W_Crylink_Attack();
-                       weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_crylink_primary_animtime"), w_ready);
+                       if (!self.crylink_waitrelease)
+                       if (weapon_prepareattack(0, cvar("g_balance_crylink_primary_refire")))
+                       {
+                               W_Crylink_Attack();
+                               weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_crylink_primary_animtime"), w_ready);
+                               if(cvar("g_balance_crylink_primary_joinspeed") != 0)
+                                       self.crylink_waitrelease = 1;
+                       }
                }
-               if (self.BUTTON_ATCK2 && cvar("g_balance_crylink_secondary"))
-               if (weapon_prepareattack(1, cvar("g_balance_crylink_secondary_refire")))
+               else if(self.BUTTON_ATCK2 && cvar("g_balance_crylink_secondary"))
+               {
+                       if (!self.crylink_waitrelease)
+                       if (weapon_prepareattack(1, cvar("g_balance_crylink_secondary_refire")))
+                       {
+                               W_Crylink_Attack2();
+                               weapon_thinkf(WFRAME_FIRE2, cvar("g_balance_crylink_secondary_animtime"), w_ready);
+                               if(cvar("g_balance_crylink_secondary_joinspeed") != 0)
+                                       self.crylink_waitrelease = 2;
+                       }
+               }
+               else
                {
-                       W_Crylink_Attack2();
-                       weapon_thinkf(WFRAME_FIRE2, cvar("g_balance_crylink_secondary_animtime"), w_ready);
+                       if (self.crylink_waitrelease)
+                       {
+                               // fired and released now!
+                               if(self.crylink_lastgroup)
+                               {
+                                       if(self.crylink_waitrelease == 1)
+                                       {
+                                               W_Crylink_LinkJoin(self.crylink_lastgroup, cvar("g_balance_crylink_primary_joinspeed"));
+                                       }
+                                       else
+                                       {
+                                               W_Crylink_LinkJoin(self.crylink_lastgroup, cvar("g_balance_crylink_secondary_joinspeed"));
+                                       }
+                               }
+                       }
+                       self.crylink_waitrelease = 0;
                }
        }
        else if (req == WR_PRECACHE)