]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/w_laser.qc
Merge remote branch 'origin/fruitiex/fruitbalance'
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / w_laser.qc
index 870c26627819df6a7af355e508025a016ad5e243..280e42cf33f0abb11b3f788b9fe04f9ba709ee58 100644 (file)
@@ -40,10 +40,7 @@ void W_Laser_Attack (float issecondary)
        else
                nodamage = FALSE;
 
-       if (issecondary == 1)
-               a = cvar("g_balance_laser_secondary_shotangle");
-       else
-               a = cvar("g_balance_laser_primary_shotangle");
+       a = cvar("g_balance_laser_primary_shotangle");
        s_forward = v_forward * cos(a * DEG2RAD) + v_up * sin(a * DEG2RAD);
 
        if(nodamage)
@@ -57,28 +54,20 @@ void W_Laser_Attack (float issecondary)
        missile = spawn ();
        missile.owner = self;
        missile.classname = "laserbolt";
-       missile.dmg = (issecondary == 1);
+       missile.dmg = 0;
        if(!nodamage)
        {
                missile.bot_dodge = TRUE;
-               if (issecondary == 1)
-                       missile.bot_dodgerating = cvar("g_balance_laser_secondary_damage");
-               else
-                       missile.bot_dodgerating = cvar("g_balance_laser_primary_damage");
+               missile.bot_dodgerating = cvar("g_balance_laser_primary_damage");
        }
 
        PROJECTILE_MAKETRIGGER(missile);
        missile.projectiledeathtype = WEP_LASER;
-       if(issecondary == 1)
-               missile.projectiledeathtype |= HITTYPE_SECONDARY;
 
        setorigin (missile, w_shotorg);
        setsize(missile, '0 0 0', '0 0 0');
 
-       if (issecondary == 1)
-               W_SETUPPROJECTILEVELOCITY(missile, g_balance_laser_secondary);
-       else
-               W_SETUPPROJECTILEVELOCITY(missile, g_balance_laser_primary);
+       W_SETUPPROJECTILEVELOCITY(missile, g_balance_laser_primary);
        missile.angles = vectoangles (missile.velocity);
        //missile.glow_color = 250; // 244, 250
        //missile.glow_size = 120;
@@ -87,10 +76,7 @@ void W_Laser_Attack (float issecondary)
        missile.flags = FL_PROJECTILE;
 
        missile.think = W_Laser_Think;
-       if (issecondary == 1)
-               missile.nextthink = time + cvar("g_balance_laser_secondary_delay");
-       else
-               missile.nextthink = time + cvar("g_balance_laser_primary_delay");
+       missile.nextthink = time + cvar("g_balance_laser_primary_delay");
        if(time >= missile.nextthink)
        {
                entity oldself;
@@ -131,25 +117,13 @@ float gauntletbeam_send(entity to, float sf)
 .float prevgauntletfire;
 void gauntletbeam_think()
 {
-       vector endpos;
-       float oldsolid;
-
        float damage, myforce, myradius;
-       if(self.cnt)
-       {
-               damage = cvar("g_balance_laser_secondary_damage");
-               myforce = cvar("g_balance_laser_secondary_force");
-               myradius = cvar("g_balance_laser_secondary_radius");
-       }
-       else
-       {
-               damage = cvar("g_balance_laser_primary_damage");
-               myforce = cvar("g_balance_laser_primary_force");
-               myradius = cvar("g_balance_laser_primary_radius");
-       }
+       damage = cvar("g_balance_laser_secondary_damage");
+       myforce = cvar("g_balance_laser_secondary_force");
+       myradius = cvar("g_balance_laser_secondary_radius");
 
        self.owner.prevgauntletfire = time;
-       if (self.owner.weaponentity.state != WS_INUSE || self != self.owner.gauntletbeam || self.owner.deadflag != DEAD_NO || (!self.owner.BUTTON_ATCK2 && self.cnt) || (!self.owner.BUTTON_ATCK && !self.cnt))
+       if (self.owner.weaponentity.state != WS_INUSE || self != self.owner.gauntletbeam || self.owner.deadflag != DEAD_NO || !self.owner.BUTTON_ATCK2)
        {
                remove(self);
                return;
@@ -158,50 +132,36 @@ void gauntletbeam_think()
        self.nextthink = time;
 
        makevectors(self.owner.v_angle);
-       vector angle;
-       angle = v_forward;
-       // get effect origin
-       vector vecs, org;
-       if(self.owner.weaponentity.movedir_x > 0)
-               vecs = self.owner.weaponentity.movedir;
-       else
-               vecs = '0 0 0';
-       if(debug_shotorg != '0 0 0')
-               vecs = debug_shotorg;
-       org = self.owner.origin + self.owner.view_ofs + v_forward * vecs_x + v_right * -vecs_y + v_up * vecs_z;
-       
-       oldsolid = self.owner.dphitcontentsmask;
-       self.owner.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_CORPSE;
 
-       WarpZone_traceline_antilag(self.owner, self.owner.origin + self.owner.view_ofs, self.owner.origin + self.owner.view_ofs + angle * myradius, MOVE_NORMAL, self.owner, ANTILAG_LATENCY(self.owner));
-       endpos = WarpZone_UnTransformOrigin(WarpZone_trace_transform, trace_endpos);
-       WarpZone_traceline_antilag(self.owner, org, endpos + 4 * normalize(endpos - org), MOVE_NORMAL, self.owner, ANTILAG_LATENCY(self.owner));
+       float dt;
+       dt = frametime;
 
-       self.owner.dphitcontentsmask = oldsolid;
+       W_SetupShot_Range(self.owner, TRUE, 0, "", damage * dt, myradius);
+       WarpZone_traceline_antilag(self.owner, w_shotorg, w_shotend, MOVE_NORMAL, self.owner, ANTILAG_LATENCY(self.owner));
 
        // apply the damage
-       if(trace_fraction < 1)
+       if(trace_ent)
        {
                vector force;
-               force = angle * myforce;
-               Damage (trace_ent, self.owner, self.owner, damage * frametime, WEP_ELECTRO, trace_endpos, force * frametime);
+               force = w_shotdir * myforce;
+               Damage (trace_ent, self.owner, self.owner, damage * dt, WEP_LASER | HITTYPE_SECONDARY, trace_endpos, force * dt);
        }
 
        // draw effect
-       if(org != self.hook_start)
+       if(w_shotorg != self.hook_start)
        {
                self.SendFlags |= 2;
-               self.hook_start = org;
+               self.hook_start = w_shotorg;
        }
-       if(endpos != self.hook_end)
+       if(w_shotend != self.hook_end)
        {
                self.SendFlags |= 4;
-               self.hook_end = endpos;
+               self.hook_end = w_shotend;
        }
 }
 
 // experimental gauntlet
-void W_Laser_Attack2 (float issecondary)
+void W_Laser_Attack2 ()
 {
        // only play fire sound if 0.5 sec has passed since player let go the fire button
        if(time - self.prevgauntletfire > 0.5)
@@ -219,7 +179,6 @@ void W_Laser_Attack2 (float issecondary)
        beam.shot_spread = 0;
        beam.bot_dodge = TRUE;
        beam.bot_dodgerating = cvar("g_balance_laser_primary_damage");
-       beam.cnt = issecondary;
        Net_LinkEntity(beam, FALSE, 0, gauntletbeam_send);
 
        oldself = self;
@@ -265,22 +224,16 @@ float w_laser(float req)
                if (self.BUTTON_ATCK)
                if (weapon_prepareattack(0, cvar("g_balance_laser_primary_refire")))
                {
-                       if(cvar("g_balance_laser_primary_gauntlet"))
-                               W_Laser_Attack2(0);
-                       else
-                               W_Laser_Attack(0);
+                       W_Laser_Attack(1);
                        weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_laser_primary_animtime"), w_ready);
                }
                if (self.BUTTON_ATCK2)
                {
                        if(cvar("g_balance_laser_secondary"))
                        {
-                               if (weapon_prepareattack(0, cvar("g_balance_laser_secondary_refire")))
+                               if (weapon_prepareattack(0, 0))
                                {
-                                       if(cvar("g_balance_laser_secondary_gauntlet"))
-                                               W_Laser_Attack2(1);
-                                       else
-                                               W_Laser_Attack(1);
+                                       W_Laser_Attack2();
                                        weapon_thinkf(WFRAME_FIRE2, cvar("g_balance_laser_secondary_animtime"), w_ready);
                                }
                        }
@@ -324,10 +277,13 @@ float w_laser(float req)
                precache_sound("weapons/laserimpact.wav");
        }
        else if (req == WR_SUICIDEMESSAGE)
-               w_deathtypestring = "lasered themself to hell";
+               w_deathtypestring = "%s lasered themself to hell";
        else if (req == WR_KILLMESSAGE)
        {
-               w_deathtypestring = "was lasered to death by"; // unchecked: SPLASH
+               if(w_deathtype & HITTYPE_SECONDARY)
+                       w_deathtypestring = "%s was cut in half by %s's gauntlet"; // unchecked: SPLASH
+               else
+                       w_deathtypestring = "%s was lasered to death by %s"; // unchecked: SPLASH
        }
        return TRUE;
 }