// }}}
// {{{ mortar
set g_balance_grenadelauncher_primary2secondary 0
+set g_balance_grenadelauncher_primary_sticky 0
set g_balance_grenadelauncher_primary_damage 70
set g_balance_grenadelauncher_primary_edgedamage 38
set g_balance_grenadelauncher_primary_force 400
set g_balance_grenadelauncher_primary_speed_z 0
set g_balance_grenadelauncher_primary_spread 0
set g_balance_grenadelauncher_primary_lifetime 30
+set g_balance_grenadelauncher_primary_lifetime2 1
set g_balance_grenadelauncher_primary_refire 0.8
set g_balance_grenadelauncher_primary_animtime 0.3
set g_balance_grenadelauncher_primary_ammo 2
+set g_balance_grenadelauncher_primary_health 25
set g_balance_grenadelauncher_secondary_damage 70
set g_balance_grenadelauncher_secondary_edgedamage 38
set g_balance_grenadelauncher_secondary_force 400
// }}}
// {{{ mortar
set g_balance_grenadelauncher_primary2secondary 0
+set g_balance_grenadelauncher_primary_sticky 0
set g_balance_grenadelauncher_primary_damage 70
set g_balance_grenadelauncher_primary_edgedamage 38
set g_balance_grenadelauncher_primary_force 400
set g_balance_grenadelauncher_primary_speed_z 0
set g_balance_grenadelauncher_primary_spread 0
set g_balance_grenadelauncher_primary_lifetime 30
+set g_balance_grenadelauncher_primary_lifetime2 1
set g_balance_grenadelauncher_primary_refire 0.8
set g_balance_grenadelauncher_primary_animtime 0.3
set g_balance_grenadelauncher_primary_ammo 2
+set g_balance_grenadelauncher_primary_health 25
set g_balance_grenadelauncher_secondary_damage 70
set g_balance_grenadelauncher_secondary_edgedamage 38
set g_balance_grenadelauncher_secondary_force 400
// {{{ misc
set g_balance_selfdamagepercent 0.65
-set g_balance_weaponswitchdelay 0.15
+set g_balance_weaponswitchdelay 0.1
set g_weaponspeedfactor 1 "weapon projectile speed multiplier"
set g_weaponratefactor 1 "weapon fire rate multiplier"
set g_weapondamagefactor 1 "weapon damage multiplier"
set g_balance_firetransfer_damage 0.8
set g_throughfloor_damage 0.5
set g_throughfloor_force 0.7
-set g_projectiles_newton_style 2
+set g_projectiles_newton_style 0
// possible values:
// 0: absolute velocity projectiles (like Quake)
// 1: relative velocity projectiles, "Newtonian" (like Tribes 2)
// {{{ weapon properties
// {{{ laser
-set g_balance_laser_primary_damage 22
+set g_balance_laser_primary_damage 10
set g_balance_laser_primary_edgedamage 0
-set g_balance_laser_primary_force 200
-set g_balance_laser_primary_radius 60
+set g_balance_laser_primary_force 75
+set g_balance_laser_primary_radius 10
set g_balance_laser_primary_speed 0
set g_balance_laser_primary_spread 0
-set g_balance_laser_primary_refire 0.1
-set g_balance_laser_primary_animtime 0.1
+set g_balance_laser_primary_refire 0.066
+set g_balance_laser_primary_animtime 0.066
set g_balance_laser_primary_lifetime 0
set g_balance_laser_primary_shotangle 0
set g_balance_laser_primary_delay 0
set g_balance_laser_secondary_speed 9000
set g_balance_laser_secondary_spread 0
set g_balance_laser_secondary_refire 0.7
-set g_balance_laser_secondary_animtime 0.3
+set g_balance_laser_secondary_animtime 0
set g_balance_laser_secondary_lifetime 30
set g_balance_laser_secondary_shotangle 0
set g_balance_laser_secondary_delay 0
set g_balance_shotgun_primary_force 20
set g_balance_shotgun_primary_spread 0.16
set g_balance_shotgun_primary_refire 1
-set g_balance_shotgun_primary_animtime 0.7
+set g_balance_shotgun_primary_animtime 0.4
set g_balance_shotgun_primary_ammo 1
set g_balance_shotgun_primary_speed 12000
set g_balance_shotgun_primary_bulletconstant 75 // 3.8qu
// }}}
// {{{ uzi
set g_balance_uzi_first 1
-set g_balance_uzi_first_damage 24
+set g_balance_uzi_first_damage 14
set g_balance_uzi_first_force 30
set g_balance_uzi_first_spread 0.0125
set g_balance_uzi_first_refire 0.2
set g_balance_uzi_first_ammo 1
-set g_balance_uzi_sustained_damage 12
+set g_balance_uzi_sustained_damage 7
set g_balance_uzi_sustained_force 20
set g_balance_uzi_sustained_spread 0.0125
set g_balance_uzi_sustained_refire 0.1
// }}}
// {{{ mortar // TODO
set g_balance_grenadelauncher_primary2secondary 0
-set g_balance_grenadelauncher_primary_damage 60
-set g_balance_grenadelauncher_primary_edgedamage 28
-set g_balance_grenadelauncher_primary_force 200
-set g_balance_grenadelauncher_primary_radius 140
-set g_balance_grenadelauncher_primary_speed 1200
-set g_balance_grenadelauncher_primary_speed_up 200
-set g_balance_grenadelauncher_primary_speed_z 0
+set g_balance_grenadelauncher_primary_sticky 1
+set g_balance_grenadelauncher_primary_damage 100
+set g_balance_grenadelauncher_primary_edgedamage 30
+set g_balance_grenadelauncher_primary_force 300
+set g_balance_grenadelauncher_primary_radius 240
+set g_balance_grenadelauncher_primary_speed 1000
+set g_balance_grenadelauncher_primary_speed_up 0
+set g_balance_grenadelauncher_primary_speed_z 200
set g_balance_grenadelauncher_primary_spread 0
-set g_balance_grenadelauncher_primary_lifetime 10
+set g_balance_grenadelauncher_primary_lifetime 5
+set g_balance_grenadelauncher_primary_lifetime2 1
set g_balance_grenadelauncher_primary_refire 0.8
-set g_balance_grenadelauncher_primary_animtime 0.5
+set g_balance_grenadelauncher_primary_animtime 0.2
set g_balance_grenadelauncher_primary_ammo 2
-set g_balance_grenadelauncher_secondary_damage 65
+set g_balance_grenadelauncher_primary_health 25
+set g_balance_grenadelauncher_secondary_damage 100
set g_balance_grenadelauncher_secondary_edgedamage 30
set g_balance_grenadelauncher_secondary_force 300
set g_balance_grenadelauncher_secondary_radius 200
-set g_balance_grenadelauncher_secondary_speed 800
+set g_balance_grenadelauncher_secondary_speed 600
set g_balance_grenadelauncher_secondary_speed_up 0
set g_balance_grenadelauncher_secondary_speed_z 200
set g_balance_grenadelauncher_secondary_spread 0
-set g_balance_grenadelauncher_secondary_lifetime 2
+set g_balance_grenadelauncher_secondary_lifetime 1.5
set g_balance_grenadelauncher_secondary_refire 0.8
-set g_balance_grenadelauncher_secondary_animtime 0.5
+set g_balance_grenadelauncher_secondary_animtime 0.2
set g_balance_grenadelauncher_secondary_ammo 2
set g_balance_grenadelauncher_secondary_health 0
set g_balance_grenadelauncher_secondary_damageforcescale 0
set g_balance_grenadelauncher_secondary_bouncestop 0.075
// }}}
// {{{ electro // TODO
-set g_balance_electro_lightning 0
-set g_balance_electro_primary_damage 65
+set g_balance_electro_lightning 1
+set g_balance_electro_primary_damage 2
set g_balance_electro_primary_edgedamage 0
-set g_balance_electro_primary_force 200
-set g_balance_electro_primary_radius 150
+set g_balance_electro_primary_force 13
+set g_balance_electro_primary_force_up 100
+set g_balance_electro_primary_radius 850
set g_balance_electro_primary_comboradius 0
-set g_balance_electro_primary_speed 2000
+set g_balance_electro_primary_speed 0
set g_balance_electro_primary_spread 0
-set g_balance_electro_primary_lifetime 30
-set g_balance_electro_primary_refire 0.6
-set g_balance_electro_primary_animtime 0.3
-set g_balance_electro_primary_ammo 2
+set g_balance_electro_primary_lifetime 0
+set g_balance_electro_primary_refire 0
+set g_balance_electro_primary_animtime 0
+set g_balance_electro_primary_ammo 0.66
+set g_balance_electro_primary_range 800
+set g_balance_electro_primary_velocityfactor 0.75
set g_balance_electro_secondary_damage 50
set g_balance_electro_secondary_spread 0.05
set g_balance_electro_secondary_edgedamage 0
set g_balance_crylink_primary_shots 4
set g_balance_crylink_primary_bounces 1
set g_balance_crylink_primary_refire 0.4
-set g_balance_crylink_primary_animtime 0.3
+set g_balance_crylink_primary_animtime 0.2
set g_balance_crylink_primary_ammo 2
set g_balance_crylink_primary_bouncedamagefactor 0.5
set g_balance_crylink_secondary_shots 7
set g_balance_crylink_secondary_bounces 0
set g_balance_crylink_secondary_refire 0.5
-set g_balance_crylink_secondary_animtime 0.3
+set g_balance_crylink_secondary_animtime 0.2
set g_balance_crylink_secondary_ammo 2
set g_balance_crylink_secondary_bouncedamagefactor 0.5
set g_balance_rocketlauncher_speedstart 1000
set g_balance_rocketlauncher_lifetime 30
set g_balance_rocketlauncher_refire 1
-set g_balance_rocketlauncher_animtime 0.3
+set g_balance_rocketlauncher_animtime 0.2
set g_balance_rocketlauncher_ammo 3
set g_balance_rocketlauncher_health 0
set g_balance_rocketlauncher_damageforcescale 0
set g_balance_campingrifle_reloadtime 2 // matches reload anim
set g_balance_campingrifle_auto_reload_after_changing_weapons 0
set g_balance_campingrifle_bursttime 0
-set g_balance_campingrifle_tracer 0
+set g_balance_campingrifle_tracer 1
set g_balance_campingrifle_primary_damage 60
set g_balance_campingrifle_primary_headshotaddeddamage 100
set g_balance_campingrifle_primary_spread 0
// }}}
// {{{ mortar
set g_balance_grenadelauncher_primary2secondary 0
+set g_balance_grenadelauncher_primary_sticky 0
set g_balance_grenadelauncher_primary_damage 50
set g_balance_grenadelauncher_primary_edgedamage 38
set g_balance_grenadelauncher_primary_force 400
set g_balance_grenadelauncher_primary_speed_z 0
set g_balance_grenadelauncher_primary_spread 0
set g_balance_grenadelauncher_primary_lifetime 30
+set g_balance_grenadelauncher_primary_lifetime2 1
set g_balance_grenadelauncher_primary_refire 0.8
set g_balance_grenadelauncher_primary_animtime 0.3
set g_balance_grenadelauncher_primary_ammo 2
+set g_balance_grenadelauncher_primary_health 25
set g_balance_grenadelauncher_secondary_damage 60
set g_balance_grenadelauncher_secondary_edgedamage 38
set g_balance_grenadelauncher_secondary_force 400
// }}}
// {{{ mortar
set g_balance_grenadelauncher_primary2secondary 1
+set g_balance_grenadelauncher_primary_sticky 0
set g_balance_grenadelauncher_primary_damage 60
set g_balance_grenadelauncher_primary_edgedamage 10
set g_balance_grenadelauncher_primary_force 250
set g_balance_grenadelauncher_primary_speed_z 0
set g_balance_grenadelauncher_primary_spread 0
set g_balance_grenadelauncher_primary_lifetime 5
+set g_balance_grenadelauncher_primary_lifetime2 1
set g_balance_grenadelauncher_primary_refire 0.7
set g_balance_grenadelauncher_primary_animtime 0.3
set g_balance_grenadelauncher_primary_ammo 2
+set g_balance_grenadelauncher_primary_health 25
set g_balance_grenadelauncher_secondary_damage 65
set g_balance_grenadelauncher_secondary_edgedamage 10
set g_balance_grenadelauncher_secondary_force 300
set g_weaponreplace_seeker 0
set sv_q3acompat_machineshotgunswap 0
+// other options
+set sv_fragmessage_information_ping 1
+set sv_fragmessage_information_handicap 2
+set sv_fragmessage_information_stats 1
+set sv_fragmessage_information_typefrag 1
+
+set sv_defaultcharacter 1
+set sv_defaultplayermodel "models/player/nyx.iqm"
+set sv_defaultplayercolors 60 // force some visible color for now
+
+set g_jump_grunt 1
+set g_footsteps 1
+set g_shootfromcenter 1
+set g_fullbrightplayers 1 // until all models are visible with this set to 0
+set g_forced_respawn 1
+set g_mirrordamage 0
+set g_friendlyfire 1
+
+set timelimit_overtimes 1
+set timelimit_override 15 // for now, maybe not in future
+
exec physicsXPM.cfg
-exec balanceXPM.cfg
+exec balanceFruit.cfg
// based off morphed's cl_gentle
// used in qcsrc/server/w_laser.qc
effect laser_gauntlet
+count 3
+type spark
+color 0xb44215 0x880000
tex 43 43
-count 1.5
+size 7 10
+alpha 128 512 6280
+airfriction 10
+originjitter 2 2 2
+velocityjitter 150 150 150
+velocitymultiplier 0.2
+sizeincrease -100
+stretchfactor 2.3
+rotate -180 180 4000 -4000
+
+effect laser_gauntlet
+count 6
type spark
-color 0xff00ff 0xff0000
-size 4 8
-sizeincrease 34
-alpha 128 128 292
-gravity 0
-airfriction 5
-liquidfriction 10
-velocityjitter 50 50 50
+color 0xff4200 0xff0000
+tex 8 15
+size 7 9
+alpha 256 512 6280
+airfriction 12
+originjitter 2 2 2
+velocityjitter 100 100 100
+velocitymultiplier 0.2
+sizeincrease -100
+stretchfactor 2
+
+
+// muzzle flash
+effect laser_gauntletmuzzleflash
+// glow and light
+countabsolute 1
+type smoke
+color 0x220000 0x880000
+tex 65 65
+size 10 15
+alpha 256 512 6280
+airfriction 10
+sizeincrease -100
+stretchfactor 2
+lightradius 150
+lightradiusfade 500
+lightcolor 3 0.1 0.1
+// electricity
+effect laser_gauntletmuzzleflash
+count 3
+type spark
+color 0xb44215 0x880000
+tex 43 43
+size 7 10
+alpha 128 512 6280
+airfriction 10
+originjitter 2 2 2
+velocityjitter 150 150 150
+velocitymultiplier 0.2
+sizeincrease -100
+stretchfactor 2.3
+rotate -180 180 4000 -4000
+// fire
+effect laser_gauntletmuzzleflash
+count 6
+type spark
+color 0xff4200 0xff0000
+tex 8 15
+size 7 9
+alpha 256 512 6280
+airfriction 12
+originjitter 2 2 2
+velocityjitter 100 100 100
+velocitymultiplier 0.2
+sizeincrease -100
+stretchfactor 2
+
//torch flame, spawn it as fast as you can 20 times per second or more, supports direction but not required
//fast fire
// used nowhere in code, meant for maps
airfriction 5
liquidfriction 10
velocityjitter 156 156 156
+
+
+
+// used in qcsrc/server/w_electro.qc: pointparticles(particleeffectnum("electro_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
+// used in qcsrc/server/w_electro.qc: pointparticles(particleeffectnum("electro_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
+effect electro_lightning
+countabsolute 1
+type smoke
+color 0x283880 0x283880 // 0x202020 0x404040
+tex 65 65
+size 10 10
+alpha 256 256 1500
+originjitter 1.5 1.5 1.5
+velocityjitter 6 6 6
+sizeincrease -20
+velocitymultiplier 0.01
+
+effect electro_lightning
+count 3
+type spark
+tex 8 15
+color 0xD9FDFF 0xD9FDFF
+size 3 7
+alpha 110 228 2024
+originjitter 1 1 1
+velocityjitter 150 150 150
+velocitymultiplier 0.5
+airfriction 2
+stretchfactor 1.5
+
+effect electro_lightning
+count 5
+type spark
+tex 41 41
+color 0xD9FDFF 0xD9FDFF
+size 3 4
+alpha 110 228 1500
+originjitter 1 1 1
+velocityjitter 350 350 350
+velocitymultiplier 2.5
+airfriction 8
+gravity 1.3
+stretchfactor 0.1
float autocvar_sv_cheats;
float autocvar_g_bastet;
var float autocvar_g_movement_highspeed = 1;
+var float autocvar_sys_ticrate;
CSQCProjectile(proj, TRUE, PROJECTILE_ELECTRO, FALSE); // no culling, it has sound
}
-// experimental lightning gun
-void W_Electro_Attack3 (void)
+void lgbeam_think()
{
- if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
- self.ammo_cells = self.ammo_cells - cvar("g_balance_electro_primary_ammo");
- W_SetupShot (self, TRUE, 0, "weapons/crylink_fire2.wav", cvar("g_balance_electro_primary_damage"));
+ if (!self.owner.BUTTON_ATCK || self.owner.ammo_cells <= 0) // || (self.ammo_cells <= 0 && !(self.items & IT_UNLIMITED_WEAPON_AMMO)))
+ {
+ sound (self, CHAN_PROJECTILE, "sound/misc/null.wav", VOL_BASE, ATTN_NORM);
+ remove(self);
+ return;
+ }
+
+ if (time - self.shot_spread + random() * 0.2 > 0)
+ {
+ self.shot_spread = time + 2;
+ sound (self, CHAN_PROJECTILE, "turrets/phaser.wav", VOL_BASE, ATTN_NORM);
+ }
+
+ if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
+ self.ammo_cells = self.ammo_cells - cvar("g_balance_electro_primary_ammo");
+
+ self.nextthink = time + self.ticrate;
- traceline_antilag(self, w_shotorg, w_shotorg + w_shotdir * cvar("g_balance_electro_primary_radius"), FALSE, self, ANTILAG_LATENCY(self));
+ //w_deathtypestring = "was phased out of existence";
- te_lightning1(self, w_shotorg, trace_endpos);
+ makevectors(self.owner.v_angle);
+ vector angle;
+ angle = v_forward;
- if (trace_fraction < 1)
- Damage(trace_ent, self, self, cvar("g_balance_electro_primary_damage"), WEP_ELECTRO | HITTYPE_SECONDARY, trace_endpos, cvar("g_balance_electro_primary_force") * w_shotdir);
+ vector force;
+ force = angle * cvar("g_balance_electro_primary_force");
+
+ traceline_antilag(self.owner, self.owner.origin, self.owner.origin + angle * cvar("g_balance_electro_primary_range"), FALSE, self.owner, ANTILAG_LATENCY(self.owner));
+
+ // apply the damage
+ if(trace_fraction < 1)
+ {
+ Damage (trace_ent, self.owner, self.owner, cvar("g_balance_electro_primary_damage"), WEP_ELECTRO, trace_endpos, force);
+ trace_ent.velocity = trace_ent.velocity * cvar("g_balance_electro_primary_velocityfactor") + '0 0 1' * cvar("g_balance_electro_primary_force_up");
+ }
+
+ self.scale = vlen(self.owner.origin - trace_endpos) / 256 * (0.75 + 0.75 * random());
+}
+
+// experimental lightning gun
+void W_Electro_Attack3 (void)
+{
+ entity beam;
+
+ beam = spawn();
+ beam.ticrate = autocvar_sys_ticrate;
+ setmodel(beam,"models/turrets/phaser_beam.md3");
+ beam.effects = EF_LOWPRECISION;
+ beam.solid = SOLID_NOT;
+ beam.think = lgbeam_think;
+ beam.shot_spread = 0;
+ beam.scale = cvar("g_balance_electro_primary_range") / 256;
+ beam.nextthink = time;
+ beam.owner = self;
+ beam.movetype = MOVETYPE_NONE;
+ beam.bot_dodge = TRUE;
+ beam.bot_dodgerating = cvar("g_balance_electro_primary_damage")/autocvar_sys_ticrate;
+ setattachment(beam, self.weaponentity, "shot");
}
void spawnfunc_weapon_electro (void)
}
.float bot_secondary_electromooth;
+.float BUTTON_ATCK_prev;
float w_electro(float req)
{
if (req == WR_AIM)
if (weapon_prepareattack(0, cvar("g_balance_electro_primary_refire")))
{
if(cvar("g_balance_electro_lightning"))
- W_Electro_Attack3();
+ {
+ if (self.BUTTON_ATCK_prev == 0)
+ {
+ W_Electro_Attack3();
+ }
+ }
else
+ {
W_Electro_Attack();
+ }
weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_electro_primary_animtime"), w_ready);
}
- if (self.BUTTON_ATCK2 && !cvar("g_balance_electro_lightning"))
+ if (self.BUTTON_ATCK2)
if (time >= self.electro_secondarytime)
if (weapon_prepareattack(1, cvar("g_balance_electro_secondary_refire")))
{
{
self.electro_secondarytime = time;
}
+ self.BUTTON_ATCK_prev = self.BUTTON_ATCK;
return TRUE;
};
#endif
remove (self);
}
+void W_Grenade_Damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
+{
+ if (self.health <= 0)
+ return;
+ self.health = self.health - damage;
+ if (self.health <= 0)
+ {
+ W_PrepareExplosionByDamage(attacker, self.think);
+ }
+}
+
void W_Grenade_Touch1 (void)
{
PROJECTILE_TOUCH;
- W_Grenade_Explode ();
+ if(cvar("g_balance_grenadelauncher_primary_sticky") && other.takedamage != DAMAGE_AIM)
+ {
+ entity oldowner;
+ oldowner = self.owner;
+
+ vector temporigin;
+ temporigin = self.origin;
+
+ remove(self);
+ local entity gren;
+
+ gren = spawn ();
+ gren.owner = oldowner;
+ gren.classname = "grenade";
+ gren.bot_dodge = TRUE;
+ gren.bot_dodgerating = cvar("g_balance_grenadelauncher_primary_damage");
+ gren.movetype = MOVETYPE_NONE;
+ PROJECTILE_MAKETRIGGER(gren);
+ gren.projectiledeathtype = WEP_GRENADE_LAUNCHER;
+ setorigin(gren, temporigin);
+ setsize(gren, '0 0 -3', '0 0 -3');
+
+ gren.nextthink = time + cvar("g_balance_grenadelauncher_primary_lifetime2");
+ gren.think = adaptor_think2use_hittype_splash;
+ gren.use = W_Grenade_Explode;
+
+ gren.flags = FL_PROJECTILE;
+
+ gren.takedamage = DAMAGE_YES;
+ gren.health = cvar("g_balance_grenadelauncher_primary_health");
+ gren.event_damage = W_Grenade_Damage;
+
+ CSQCProjectile(gren, TRUE, PROJECTILE_GRENADE, TRUE);
+ }
+ else
+ W_Grenade_Explode ();
}
void W_Grenade_Touch2 (void)
}
}
-void W_Grenade_Damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
-{
- if (self.health <= 0)
- return;
- self.health = self.health - damage;
- if (self.health <= 0)
- {
- W_PrepareExplosionByDamage(attacker, self.think);
- }
-}
-
void W_Grenade_Attack (void)
{
local entity gren;
{
W_SetupShot (self, TRUE, 0, "weapons/gauntlet_fire.wav", cvar("g_balance_laser_primary_damage"));
- WarpZone_traceline_antilag(self, w_shotorg, w_shotorg + w_shotdir * cvar("g_balance_laser_primary_radius"), FALSE, self, ANTILAG_LATENCY(self));
+ WarpZone_traceline_antilag(self, w_shotorg, w_shotorg + w_shotdir * (cvar("g_balance_laser_primary_radius") + vlen(eX * self.velocity_x + eY * self.velocity_y)/5), FALSE, self, ANTILAG_LATENCY(self));
- pointparticles(particleeffectnum("laser_gauntlet"), w_shotorg + w_shotdir * cvar("g_balance_laser_primary_radius"), '0 0 0', 1);
+ pointparticles(particleeffectnum("laser_gauntletmuzzleflash"), w_shotorg, w_shotdir * 1000, 1);
+ pointparticles(particleeffectnum("laser_gauntlet"), w_shotorg + w_shotdir * (cvar("g_balance_laser_primary_radius") + vlen(eX * self.velocity_x + eY * self.velocity_y)/5), w_shotdir * 1000, 1);
+ pointparticles(particleeffectnum("laser_gauntlet"), w_shotorg + w_shotdir * (cvar("g_balance_laser_primary_radius") + vlen(eX * self.velocity_x + eY * self.velocity_y)/5) * 0.5, w_shotdir * 1000, 1);
if (trace_fraction < 1)
Damage(trace_ent, self, self, cvar("g_balance_laser_primary_damage"), WEP_LASER | HITTYPE_SECONDARY, trace_endpos, cvar("g_balance_laser_primary_force") * w_shotdir);