]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/weapons/weapon/arc.qc
Fix crosshair_chase not resetting player's alpha upon death
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / weapons / weapon / arc.qc
index 5948d6a12e2831e0fcaf2f340cd7ae781ee72ce7..ff663e3045b76e63c9794b441de08fa26ec0e579 100644 (file)
@@ -809,7 +809,7 @@ void Draw_ArcBeam_callback(vector start, vector hit, vector end)
                Draw_CylindricLine(start, end, thickness, beam.beam_image, 0.25, -time * 3, beam.beam_color, beam.beam_alpha, DRAWFLAG_NORMAL, transformed_view_org);
        else
        {
-               R_BeginPolygon(beam.beam_image, DRAWFLAG_NORMAL); // DRAWFLAG_ADDITIVE
+               R_BeginPolygon(beam.beam_image, DRAWFLAG_NORMAL, false); // DRAWFLAG_ADDITIVE
                R_PolygonVertex(
                        top,
                        '0 0.5 0' + ('0 0.5 0' * (thickness / beam.beam_thickness)),
@@ -892,16 +892,12 @@ void Draw_ArcBeam(entity this)
                // into a weapon system for client code.
 
                // find where we are aiming
-               makevectors(((autocvar_chase_active) ? warpzone_save_view_angles : view_angles));
-               vector forward = v_forward;
-               vector right = v_right;
-               vector up = v_up;
+               vector myviewangle = ((autocvar_chase_active) ? warpzone_save_view_angles : view_angles);
+               vector forward, right, up;
+               MAKE_VECTORS(myviewangle, forward, right, up);
                entity wepent = viewmodels[this.beam_slot];
 
-               if(autocvar_chase_active)
-                       this.beam_usevieworigin = 1;
-               else
-                       this.beam_usevieworigin = 2;
+               this.beam_usevieworigin = (autocvar_chase_active) ? 1 : 2;
 
                // decide upon start position
                if(this.beam_usevieworigin == 2)
@@ -911,11 +907,6 @@ void Draw_ArcBeam(entity this)
                else
                        { start_pos = this.origin; }
 
-               int v_shot_idx;  // used later
-               (v_shot_idx = gettagindex(wepent, "shot")) || (v_shot_idx = gettagindex(wepent, "tag_shot"));
-               if(v_shot_idx && this.beam_usevieworigin == 2)
-                       start_pos = gettaginfo(wepent, v_shot_idx) - '0 0 2';
-
                // trace forward with an estimation
                WarpZone_TraceLine(
                        start_pos,
@@ -924,6 +915,11 @@ void Draw_ArcBeam(entity this)
                        this
                );
 
+               int v_shot_idx;  // used later
+               (v_shot_idx = gettagindex(wepent, "shot")) || (v_shot_idx = gettagindex(wepent, "tag_shot"));
+               if(v_shot_idx && this.beam_usevieworigin == 2)
+                       start_pos = gettaginfo(wepent, v_shot_idx) - '0 0 2';
+
                // untransform in case our trace went through a warpzone
                vector end_pos = WarpZone_UnTransformOrigin(WarpZone_trace_transform, trace_endpos);
 
@@ -956,6 +952,8 @@ void Draw_ArcBeam(entity this)
                {
                        this.beam_dir = wantdir;
                        this.beam_initialized = true;
+
+                       this.beam_muzzleentity.drawmask = MASK_NORMAL; // NOTE: this works around the muzzle entity flashing on the middle of the screen for a frame
                }
 
                if(this.beam_dir != wantdir)
@@ -972,7 +970,7 @@ void Draw_ArcBeam(entity this)
                                // if the angle is greater than maxangle, force the blendfactor to make this the maximum factor
                                float blendfactor = bound(
                                        0,
-                                       (1 - (this.beam_returnspeed * frametime)),
+                                       (1 - (this.beam_returnspeed * dt)),
                                        min(this.beam_maxangle / angle, 1)
                                );
                                this.beam_dir = normalize((wantdir * (1 - blendfactor)) + (this.beam_dir * blendfactor));
@@ -982,7 +980,7 @@ void Draw_ArcBeam(entity this)
                                // the radius is not too far yet, no worries :D
                                float blendfactor = bound(
                                        0,
-                                       (1 - (this.beam_returnspeed * frametime)),
+                                       (1 - (this.beam_returnspeed * dt)),
                                        1
                                );
                                this.beam_dir = normalize((wantdir * (1 - blendfactor)) + (this.beam_dir * blendfactor));
@@ -1132,7 +1130,7 @@ void Draw_ArcBeam(entity this)
                        this.beam_hiteffect,
                        last_origin,
                        beamdir * -1,
-                       frametime * 2
+                       dt * 2
                );
        }
        if(this.beam_hitlight[0])
@@ -1153,7 +1151,7 @@ void Draw_ArcBeam(entity this)
                        this.beam_muzzleeffect,
                        original_start_pos + wantdir * 20,
                        wantdir * 1000,
-                       frametime * 0.1
+                       dt * 0.1
                );
        }
        if(this.beam_muzzlelight[0])
@@ -1206,7 +1204,7 @@ NET_HANDLE(ENT_CLIENT_ARC_BEAM, bool isnew)
                flash = spawn();
                flash.owner = this;
                flash.effects = EF_ADDITIVE | EF_FULLBRIGHT;
-               flash.drawmask = MASK_NORMAL;
+               //flash.drawmask = MASK_NORMAL;
                flash.solid = SOLID_NOT;
                flash.avelocity_z = 5000;
                setattachment(flash, this, "");
@@ -1230,10 +1228,7 @@ NET_HANDLE(ENT_CLIENT_ARC_BEAM, bool isnew)
 
                if(ReadByte())
                {
-                       if(autocvar_chase_active)
-                               { this.beam_usevieworigin = 1; }
-                       else // use view origin
-                               { this.beam_usevieworigin = 2; }
+                       this.beam_usevieworigin = (autocvar_chase_active) ? 1 : 2;
                }
                else
                {