X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fclient%2Flaser.qc;h=49aa033c17ae3092f4acd65adbe9b151d424c98c;hp=23ced4b64a2f8caf155bd878d2c0ca63a0fe6f61;hb=49af10f3413b96e52055359d42288dbf5ec6972b;hpb=0e7ed909bffb4ff21f0c68d163edfc17487e380a diff --git a/qcsrc/client/laser.qc b/qcsrc/client/laser.qc index 23ced4b64..49aa033c1 100644 --- a/qcsrc/client/laser.qc +++ b/qcsrc/client/laser.qc @@ -10,11 +10,6 @@ .float scale; // scaling factor of the thickness .float modelscale; // scaling factor of the dlight -// TODO move these into a heade file -float trace_dphitq3surfaceflags; -float Q3SURFACEFLAG_SKY = 4; // sky surface (also has NOIMPACT and NOMARKS set) -float Q3SURFACEFLAG_NOIMPACT = 16; // projectiles should remove themselves on impact (this is set on sky) - void Draw_Laser() { if(!self.state) @@ -22,24 +17,39 @@ void Draw_Laser() InterpolateOrigin_Do(); if(self.count & 0x80) { - traceline(self.origin, self.velocity, 0, self); + if(self.count & 0x10) + { + trace_endpos = self.velocity, + trace_dphitq3surfaceflags = 0; + } + else + traceline(self.origin, self.velocity, 0, self); } else { - makevectors(self.angles); - traceline(self.origin, self.origin + v_forward * 32768, 0, self); - if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_SKY) + if(self.count & 0x10) + { + makevectors(self.angles); trace_endpos = self.origin + v_forward * 1048576; + trace_dphitq3surfaceflags = Q3SURFACEFLAG_SKY; + } + else + { + makevectors(self.angles); + traceline(self.origin, self.origin + v_forward * 32768, 0, self); + if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_SKY) + trace_endpos = self.origin + v_forward * 1048576; + } } if(self.scale != 0) { if(self.alpha) { - Draw_CylindricLine(self.origin, trace_endpos, self.scale, "particles/laserbeam", 0, time * 3, self.colormod, self.alpha, DRAWFLAG_NORMAL); // TODO make a texture to make the laser look smoother + Draw_CylindricLine(self.origin, trace_endpos, self.scale, "particles/laserbeam", 0, time * 3, self.colormod, self.alpha, DRAWFLAG_NORMAL, view_origin); } else { - Draw_CylindricLine(self.origin, trace_endpos, self.scale, "particles/laserbeam", 0, time * 3, self.colormod, 0.5, DRAWFLAG_ADDITIVE); // TODO make a texture to make the laser look smoother + Draw_CylindricLine(self.origin, trace_endpos, self.scale, "particles/laserbeam", 0, time * 3, self.colormod, 0.5, DRAWFLAG_ADDITIVE, view_origin); } } if not(trace_dphitq3surfaceflags & (Q3SURFACEFLAG_SKY | Q3SURFACEFLAG_NOIMPACT)) @@ -47,7 +57,7 @@ void Draw_Laser() if(self.cnt >= 0) pointparticles(self.cnt, trace_endpos, trace_plane_normal, drawframetime * 1000); if(self.colormod != '0 0 0' && self.modelscale != 0) - R_AddDynamicLight(trace_endpos + trace_plane_normal * 1, self.modelscale, self.colormod * 5); + adddynamiclight(trace_endpos + trace_plane_normal * 1, self.modelscale, self.colormod * 5); } } @@ -58,18 +68,19 @@ void Ent_Laser() // 30 bytes, or 13 bytes for just moving f = ReadByte(); - self.count = (f & 0xE0); + self.count = (f & 0xF0); if(self.count & 0x80) - self.iflags = IFLAG_VELOCITY; + self.iflags = IFLAG_VELOCITY | IFLAG_ORIGIN; else - self.iflags = IFLAG_ANGLES; + self.iflags = IFLAG_ANGLES | IFLAG_ORIGIN; if(f & 1) { self.origin_x = ReadCoord(); self.origin_y = ReadCoord(); self.origin_z = ReadCoord(); + setorigin(self, self.origin); } if(f & 8) { @@ -87,7 +98,10 @@ void Ent_Laser() self.scale *= ReadByte() / 16.0; // beam radius self.modelscale *= ReadByte() / 16.0; // dlight radius } - self.cnt = ReadShort() - 1; // effect number + if((f & 0x80) || !(f & 0x10)) + self.cnt = ReadShort() - 1; // effect number + else + self.cnt = 0; } if(f & 2) {