+ // apply the damage
+ if(trace_fraction < 1)
+ {
+ vector force;
+ force = angle * cvar("g_balance_electro_primary_force") + '0 0 1' * cvar("g_balance_electro_primary_force_up");
+ Damage (trace_ent, self.owner, self.owner, cvar("g_balance_electro_primary_damage") * cvar("g_balance_electro_primary_refire"), WEP_ELECTRO, trace_endpos, force * cvar("g_balance_electro_primary_refire"));
+ W_Plasma_TriggerCombo(trace_endpos, cvar("g_balance_electro_primary_comboradius"), self.owner);
+ }
+ self.nextdamagethink = time + cvar("g_balance_electro_primary_refire");
+ }
+
+ self.angles = '0 0 0';
+ self.scale = vlen(gettaginfo(self, 0) - trace_endpos) / 256 * (0.75 + 0.75 * random());
+
+ // v_forward, v_right, v_up now are the ACTUAL directions
+ // express self.angles in terms of them to aim at target!
+ self.angles = vectoangles('1 0 0' * (angle * v_forward) + '0 -1 0' * (angle * v_right) + '0 0 1' * (angle * v_up));
+}
+
+// experimental lightning gun
+void W_Electro_Attack3 (void)
+{
+ entity beam, oldself;
+
+ self.lgbeam = beam = spawn();
+ setmodel(beam,"models/turrets/phaser_beam.md3");
+ beam.effects = EF_LOWPRECISION;
+ beam.solid = SOLID_NOT;
+ beam.think = lgbeam_think;
+ beam.owner = self;
+ beam.movetype = MOVETYPE_NONE;
+ if(gettagindex(self.weaponentity, "shot"))
+ setattachment(beam, self.weaponentity, "shot");
+ else
+ setattachment(beam, self.weaponentity, "tag_shot");
+
+ oldself = self;
+ self = beam;
+ self.think();
+ self = oldself;
+
+ self.exteriorlgbeam = beam = spawn();
+ setmodel(beam,"models/turrets/phaser_beam.md3");
+ beam.effects = EF_LOWPRECISION;
+ beam.solid = SOLID_NOT;
+ beam.think = exteriorlgbeam_think;
+ beam.owner = self;
+ beam.movetype = MOVETYPE_NONE;
+ //beam.viewmodelforclient = self;
+ if(self.weaponentity.oldorigin_x > 0)