void W_Plasma_TriggerCombo(vector org, float rad, entity own)
{
- local entity e;
+ entity e;
e = WarpZone_FindRadius(org, rad, TRUE);
while (e)
{
{
if(self.health <= 0)
return;
+
// note: combos are usually triggered by W_Plasma_TriggerCombo, not damage
+ float is_combo = (inflictor.classname == "plasma_chain" || inflictor.classname == "plasma_prim");
+
+ if (!W_CheckProjectileDamage(inflictor.realowner, self.realowner, deathtype, (is_combo ? 1 : -1)))
+ return; // g_projectiles_damage says to halt
+
self.health = self.health - damage;
if (self.health <= 0)
{
self.takedamage = DAMAGE_NO;
self.nextthink = time;
- if (inflictor.classname == "plasma_chain" || inflictor.classname == "plasma_prim")
+ if (is_combo)
{
// change owner to whoever caused the combo explosion
self.realowner = inflictor.realowner;
void W_Electro_Attack()
{
- local entity proj;
+ entity proj;
W_DecreaseAmmo(ammo_cells, autocvar_g_balance_electro_primary_ammo, autocvar_g_balance_electro_reload_ammo);
proj.touch = W_Plasma_TouchExplode;
setsize(proj, '0 0 -3', '0 0 -3');
proj.flags = FL_PROJECTILE;
+ proj.missile_flags = MIF_SPLASH;
CSQCProjectile(proj, TRUE, PROJECTILE_ELECTRO_BEAM, TRUE);
void W_Electro_Attack2()
{
- local entity proj;
+ entity proj;
W_DecreaseAmmo(ammo_cells, autocvar_g_balance_electro_secondary_ammo, autocvar_g_balance_electro_reload_ammo);
proj.bouncefactor = autocvar_g_balance_electro_secondary_bouncefactor;
proj.bouncestop = autocvar_g_balance_electro_secondary_bouncestop;
+ proj.missile_flags = MIF_SPLASH | MIF_ARC;
#if 0
entity p2;
{
dt = min(dt, owner_player.clip_load / autocvar_g_balance_electro_primary_ammo);
owner_player.clip_load = max(0, owner_player.clip_load - autocvar_g_balance_electro_primary_ammo * frametime);
- owner_player.weapon_load[WEP_ELECTRO] = owner_player.clip_load;
+ owner_player.(weapon_load[WEP_ELECTRO]) = owner_player.clip_load;
}
else
{
ammo_amount = 1;
else
ammo_amount = self.ammo_cells > 0;
- ammo_amount += self.weapon_load[WEP_ELECTRO] > 0;
+ ammo_amount += self.(weapon_load[WEP_ELECTRO]) > 0;
}
else
{
ammo_amount = self.ammo_cells >= autocvar_g_balance_electro_primary_ammo;
- ammo_amount += self.weapon_load[WEP_ELECTRO] >= autocvar_g_balance_electro_primary_ammo;
+ ammo_amount += self.(weapon_load[WEP_ELECTRO]) >= autocvar_g_balance_electro_primary_ammo;
}
return ammo_amount;
}
else if (req == WR_CHECKAMMO2)
{
- ammo_amount = self.ammo_cells >= autocvar_g_balance_electro_secondary_ammo;
- ammo_amount += self.weapon_load[WEP_ELECTRO] >= autocvar_g_balance_electro_secondary_ammo;
+ if(autocvar_g_balance_electro_combo_safeammocheck) // true if you can fire at least one secondary blob AND one primary shot after it, otherwise false.
+ {
+ ammo_amount = self.ammo_cells >= autocvar_g_balance_electro_secondary_ammo + autocvar_g_balance_electro_primary_ammo;
+ ammo_amount += self.(weapon_load[WEP_ELECTRO]) >= autocvar_g_balance_electro_secondary_ammo + autocvar_g_balance_electro_primary_ammo;
+ }
+ else
+ {
+ ammo_amount = self.ammo_cells >= autocvar_g_balance_electro_secondary_ammo;
+ ammo_amount += self.(weapon_load[WEP_ELECTRO]) >= autocvar_g_balance_electro_secondary_ammo;
+ }
return ammo_amount;
}
else if (req == WR_RESETPLAYER)
W_Reload(min(autocvar_g_balance_electro_primary_ammo, autocvar_g_balance_electro_secondary_ammo), autocvar_g_balance_electro_reload_ammo, autocvar_g_balance_electro_reload_time, "weapons/reload.wav");
}
return TRUE;
-};
+}
#endif
#ifdef CSQC
float w_electro(float req)
else if (req == WR_SUICIDEMESSAGE)
{
if(w_deathtype & HITTYPE_SECONDARY)
- w_deathtypestring = _("%s could not remember where they put plasma");
+ w_deathtypestring = _("%s could not remember where they put their electro plasma");
else
- w_deathtypestring = _("%s played with plasma");
+ w_deathtypestring = _("%s played with electro plasma");
}
else if (req == WR_KILLMESSAGE)
{
if(w_deathtype & HITTYPE_SECONDARY)
{
if(w_deathtype & HITTYPE_SPLASH) // unchecked: BOUNCE
- w_deathtypestring = _("%s just noticed %s's blue ball");
+ w_deathtypestring = _("%s just noticed %s's electro plasma");
else // unchecked: BOUNCE
- w_deathtypestring = _("%s got in touch with %s's blue ball");
+ w_deathtypestring = _("%s got in touch with %s's electro plasma");
}
else
{
if(w_deathtype & HITTYPE_BOUNCE) // combo
- w_deathtypestring = _("%s felt the electrifying air of %s's combo");
+ w_deathtypestring = _("%s felt the electrifying air of %s's electro combo");
else if(w_deathtype & HITTYPE_SPLASH)
- w_deathtypestring = _("%s got too close to %s's blue beam");
+ w_deathtypestring = _("%s got too close to %s's blue electro bolt");
else
- w_deathtypestring = _("%s was blasted by %s's blue beam");
+ w_deathtypestring = _("%s was blasted by %s's blue electro bolt");
}
}
return TRUE;