+#if defined(CSQC)
+ #include "../dpdefs/csprogsdefs.qh"
+ #include "../common/buffs.qh"
+ #include "../csqcmodellib/interpolate.qh"
+ #include "main.qh"
+ #include "../csqcmodellib/cl_model.qh"
+#elif defined(MENUQC)
+#elif defined(SVQC)
+#endif
+
+
// a laser goes from origin in direction angles
// it has color 'colormod'
// and stops when something is in the way
-.float cnt; // end effect
+.int cnt; // end effect
.vector colormod;
-.float state; // on-off
-.float count; // flags for the laser
+.int state; // on-off
+.int count; // flags for the laser
.vector velocity;
.float alpha;
.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)
{
if(self.count & 0x10)
{
- trace_endpos = self.velocity,
+ trace_endpos = self.velocity;
trace_dphitq3surfaceflags = 0;
}
else
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))
+ if (!(trace_dphitq3surfaceflags & (Q3SURFACEFLAG_SKY | Q3SURFACEFLAG_NOIMPACT)))
{
if(self.cnt >= 0)
pointparticles(self.cnt, trace_endpos, trace_plane_normal, drawframetime * 1000);
void Ent_Laser()
{
- float f;
InterpolateOrigin_Undo();
// 30 bytes, or 13 bytes for just moving
- f = ReadByte();
+ int f = ReadByte();
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)
{