2 .float count; // set if clientside projectile
3 .float cnt; // sound index
15 dt = time - self.itime;
16 self.velocity_z -= dt * self.gravity * getstatf(242); // STAT_MOVEVARS_GRAVITY
17 org = self.origin + dt * self.velocity;
19 tracebox(self.origin, self.mins, self.maxs, org, MOVE_NORMAL, self);
20 self.origin = trace_endpos;
21 self.angles = vectoangles(self.velocity);
25 InterpolateOrigin_Do();
30 case PROJECTILE_ELECTRO:
31 break; // electro uses no trail
32 case PROJECTILE_ROCKET:
33 trailparticles(self, particleeffectnum("TR_ROCKET"), oldorg, self.origin); // rocket
36 trailparticles(self, particleeffectnum("TR_VORESPIKE"), oldorg, self.origin); // seeker
44 if(self.count & 0x80 || self.iflags & IFLAG_VALID)
48 void Ent_RemoveProjectile()
50 if(csqc_flags & CSQC_FLAG_COLORCODES)
52 sound(self, CHAN_PAIN, "misc/null.wav", VOL_BASE, ATTN_NORM);
60 InterpolateOrigin_Undo();
62 // projectile properties:
63 // kind (interpolated, or clientside)
71 // soundindex (hardcoded list)
74 // projectiles don't send angles, because they always follow the velocity
77 self.count = (f & 0xC0);
78 self.iflags = IFLAG_AUTOANGLES | IFLAG_ANGLES;
81 InterpolateOrigin_Undo();
85 self.origin_x = ReadCoord();
86 self.origin_y = ReadCoord();
87 self.origin_z = ReadCoord();
91 self.velocity_x = ReadCoord();
92 self.velocity_y = ReadCoord();
93 self.velocity_z = ReadCoord();
94 self.gravity = ReadCoord();
100 self.modelindex = ReadShort();
103 self.scale = ReadByte() / 16.0;
104 self.effects = ReadShort();
105 self.effects |= 65536 * ReadByte();
113 self.cnt = ReadShort();
115 if(csqc_flags & CSQC_FLAG_COLORCODES)
118 case PROJECTILE_ELECTRO:
119 // only new engines support sound moving with object
120 sound(self, CHAN_PAIN, "weapons/electro_fly.wav", VOL_BASE, ATTN_NORM);
122 case PROJECTILE_ROCKET:
123 sound(self, CHAN_PAIN, "weapons/rocket_fly.wav", VOL_BASE, ATTN_NORM);
126 sound(self, CHAN_PAIN, "weapons/tag_rocket_fly.wav", VOL_BASE, ATTN_NORM);
137 self.mins = self.maxs = '0 0 0';
143 InterpolateOrigin_Note();
145 self.draw = Projectile_Draw;