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)
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);
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);
if(self == self.realowner.crylink_lastgroup)
self.realowner.crylink_lastgroup = world;
W_Crylink_LinkExplode(self.queuenext, self);
+ self.classname = "spike_oktoremove";
remove (self);
return;
}
{
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);
if(self == self.realowner.crylink_lastgroup)
self.realowner.crylink_lastgroup = world;
W_Crylink_LinkExplode(self.queuenext, self);
+ self.classname = "spike_oktoremove";
remove (self);
return;
}
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;
while (counter < shots)
{
proj = spawn ();
+ proj.reset = W_Crylink_Reset;
proj.realowner = proj.owner = self;
proj.classname = "spike";
proj.bot_dodge = TRUE;
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);
while (counter < shots)
{
proj = spawn ();
+ proj.reset = W_Crylink_Reset;
proj.realowner = proj.owner = self;
proj.classname = "spike";
proj.bot_dodge = TRUE;
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)
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)
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)