]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/w_crylink.qc
Merge remote-tracking branch 'origin/divVerent/allow-override-item-model'
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / w_crylink.qc
index 0b11b69eec6430e1be93c658e4ca96e9148f142a..0b3118bb606cea52a6c5115e5bf437ea0a313b6e 100644 (file)
@@ -49,10 +49,20 @@ void W_Crylink_Dequeue(entity e)
        W_Crylink_Dequeue_Raw(e.realowner, e.queueprev, e, e.queuenext);
 }
 
+void W_Crylink_Reset(void)
+{
+       W_Crylink_Dequeue(self);
+       remove(self);
+}
+
 // force projectile to explode
 void W_Crylink_LinkExplode (entity e, entity e2)
 {
        float a;
+
+       if(e == e2)
+               return;
+
        a = bound(0, 1 - (time - e.fade_time) * e.fade_rate, 1);
 
        if(e == e.realowner.crylink_lastgroup)
@@ -63,8 +73,7 @@ void W_Crylink_LinkExplode (entity e, entity e2)
        else
                RadiusDamage (e, e.realowner, autocvar_g_balance_crylink_primary_damage * a, autocvar_g_balance_crylink_primary_edgedamage * a, autocvar_g_balance_crylink_primary_radius, world, autocvar_g_balance_crylink_primary_force * a, e.projectiledeathtype, other);
 
-       if(e.queuenext != e2)
-               W_Crylink_LinkExplode(e.queuenext, e2);
+       W_Crylink_LinkExplode(e.queuenext, e2);
 
        e.classname = "spike_oktoremove";
        remove (e);
@@ -215,23 +224,12 @@ void W_Crylink_LinkJoinEffect_Think()
        remove(self);
 }
 
-
 // NO bounce protection, as bounces are limited!
 void W_Crylink_Touch (void)
 {
        float finalhit;
        float f;
-       //PROJECTILE_TOUCH;
-       local entity savenext, saveprev, saveown;
-       saveown = self.realowner;
-       savenext = self.queuenext;
-       saveprev = self.queueprev;
-       if(WarpZone_Projectile_Touch())
-       {
-               if(wasfreed(self))
-                       W_Crylink_Dequeue_Raw(saveown, saveprev, self, savenext);
-               return;
-       }
+       PROJECTILE_TOUCH;
 
        float a;
        a = bound(0, 1 - (time - self.fade_time) * self.fade_rate, 1);
@@ -248,6 +246,7 @@ void W_Crylink_Touch (void)
                if(self == self.realowner.crylink_lastgroup)
                        self.realowner.crylink_lastgroup = world;
                W_Crylink_LinkExplode(self.queuenext, self);
+               self.classname = "spike_oktoremove";
                remove (self);
                return;
        }
@@ -271,17 +270,7 @@ void W_Crylink_Touch2 (void)
 {
        float finalhit;
        float f;
-       //PROJECTILE_TOUCH;
-       local entity savenext, saveprev, saveown;
-       savenext = self.queuenext;
-       saveprev = self.queueprev;
-       saveown = self.realowner;
-       if(WarpZone_Projectile_Touch())
-       {
-               if(wasfreed(self))
-                       W_Crylink_Dequeue_Raw(saveown, saveprev, self, savenext);
-               return;
-       }
+       PROJECTILE_TOUCH;
 
        float a;
        a = bound(0, 1 - (time - self.fade_time) * self.fade_rate, 1);
@@ -298,6 +287,7 @@ void W_Crylink_Touch2 (void)
                if(self == self.realowner.crylink_lastgroup)
                        self.realowner.crylink_lastgroup = world;
                W_Crylink_LinkExplode(self.queuenext, self);
+               self.classname = "spike_oktoremove";
                remove (self);
                return;
        }
@@ -325,9 +315,9 @@ void W_Crylink_Fadethink (void)
 
 void W_Crylink_Attack (void)
 {
-       local float counter, shots;
-       local entity proj, prevproj, firstproj;
-       local vector s;
+       float counter, shots;
+       entity proj, prevproj, firstproj;
+       vector s;
        vector forward, right, up;
        float maxdmg;
 
@@ -349,6 +339,7 @@ void W_Crylink_Attack (void)
        while (counter < shots)
        {
                proj = spawn ();
+               proj.reset = W_Crylink_Reset;
                proj.realowner = proj.owner = self;
                proj.classname = "spike";
                proj.bot_dodge = TRUE;
@@ -424,14 +415,18 @@ void W_Crylink_Attack (void)
 
                counter = counter + 1;
        }
-       self.crylink_lastgroup = proj;
-       W_Crylink_CheckLinks(proj);
+       if(autocvar_g_balance_crylink_primary_joinspread != 0 || autocvar_g_balance_crylink_primary_jointime != 0)
+       {
+               self.crylink_lastgroup = proj;
+               W_Crylink_CheckLinks(proj);
+               self.crylink_waitrelease = 1;
+       }
 }
 
 void W_Crylink_Attack2 (void)
 {
-       local float counter, shots;
-       local entity proj, prevproj, firstproj;
+       float counter, shots;
+       entity proj, prevproj, firstproj;
        float maxdmg;
 
        W_DecreaseAmmo(ammo_cells, autocvar_g_balance_crylink_secondary_ammo, autocvar_g_balance_crylink_reload_ammo);
@@ -449,6 +444,7 @@ void W_Crylink_Attack2 (void)
        while (counter < shots)
        {
                proj = spawn ();
+               proj.reset = W_Crylink_Reset;
                proj.realowner = proj.owner = self;
                proj.classname = "spike";
                proj.bot_dodge = TRUE;
@@ -512,7 +508,12 @@ void W_Crylink_Attack2 (void)
 
                counter = counter + 1;
        }
-       self.crylink_lastgroup = proj;
+       if(autocvar_g_balance_crylink_secondary_joinspread != 0 || autocvar_g_balance_crylink_secondary_jointime != 0)
+       {
+               self.crylink_lastgroup = proj;
+               W_Crylink_CheckLinks(proj);
+               self.crylink_waitrelease = 2;
+       }
 }
 
 void spawnfunc_weapon_crylink (void)
@@ -542,8 +543,6 @@ float w_crylink(float req)
                        {
                                W_Crylink_Attack();
                                weapon_thinkf(WFRAME_FIRE1, autocvar_g_balance_crylink_primary_animtime, w_ready);
-                               if(autocvar_g_balance_crylink_primary_joinspread != 0 || autocvar_g_balance_crylink_primary_jointime != 0)
-                                       self.crylink_waitrelease = 1;
                        }
                }
 
@@ -554,8 +553,6 @@ float w_crylink(float req)
                        {
                                W_Crylink_Attack2();
                                weapon_thinkf(WFRAME_FIRE2, autocvar_g_balance_crylink_secondary_animtime, w_ready);
-                               if(autocvar_g_balance_crylink_secondary_joinspread != 0 || autocvar_g_balance_crylink_secondary_jointime != 0)
-                                       self.crylink_waitrelease = 2;
                        }
                }
 
@@ -619,7 +616,7 @@ float w_crylink(float req)
                        return TRUE;
 
                ammo_amount = self.ammo_cells >= autocvar_g_balance_crylink_primary_ammo;
-               ammo_amount += self.weapon_load[WEP_CRYLINK] >= autocvar_g_balance_crylink_primary_ammo;
+               ammo_amount += self.(weapon_load[WEP_CRYLINK]) >= autocvar_g_balance_crylink_primary_ammo;
                return ammo_amount;
        }
        else if (req == WR_CHECKAMMO2)
@@ -629,7 +626,7 @@ float w_crylink(float req)
                        return TRUE;
 
                ammo_amount = self.ammo_cells >= autocvar_g_balance_crylink_secondary_ammo;
-               ammo_amount += self.weapon_load[WEP_CRYLINK] >= autocvar_g_balance_crylink_secondary_ammo;
+               ammo_amount += self.(weapon_load[WEP_CRYLINK]) >= autocvar_g_balance_crylink_secondary_ammo;
                return ammo_amount;
        }
        else if (req == WR_RELOAD)
@@ -637,7 +634,7 @@ float w_crylink(float req)
                W_Reload(min(autocvar_g_balance_crylink_primary_ammo, autocvar_g_balance_crylink_secondary_ammo), autocvar_g_balance_crylink_reload_ammo, autocvar_g_balance_crylink_reload_time, "weapons/reload.wav");
        }
        return TRUE;
-};
+}
 #endif
 #ifdef CSQC
 float w_crylink(float req)