2 * Straight line, Dead-on (no prediction)
\r
3 * Usefull for "stupid turrets" or ones
\r
4 * that launch guided weapons and just need to apeer to
\r
5 * somewhat face (and/or track) the target.
\r
10 vector turret_stdproc_aim_simple()
\r
12 float s_bu; // Solidity backup (for ground shooters)
\r
15 if (self.aim_flags & TFL_AIM_NO) return self.idle_aim;
\r
17 aim_pos = self.enemy.origin;
\r
20 if (self.aim_flags & TFL_AIM_GROUND)
\r
22 s_bu = self.enemy.solid;
\r
23 self.enemy.solid = SOLID_NOT;
\r
24 traceline(self.enemy.origin + '0 0 128',self.enemy.origin + '0 0 -99999',1,self.enemy);
\r
25 self.enemy.solid = s_bu;
\r
26 aim_pos = trace_endpos;
\r
29 // This is where its at.
\r
40 TFL_AIM_SHOTTIMECOMPENSATE
\r
48 vector turret_stdproc_aim_generic()
\r
52 if (self.aim_flags == TFL_AIM_NO)
\r
53 return self.idle_aim;
\r
56 pre_pos = real_origin(self.enemy);
\r
59 if (self.aim_flags & TFL_AIM_LEAD)
\r
60 if (self.aim_flags & TFL_AIM_SHOTTIMECOMPENSATE) // Need to conpensate for shot traveltime
\r
61 pre_pos += self.enemy.velocity * (self.tur_dist_enemy / self.shot_speed);
\r
62 else if (self.turrcaps_flags & TFL_TURRCAPS_HITSCAN) // Hitscan gun, conpensate for frametime and posibly refire offset.
\r
63 pre_pos += self.enemy.velocity * (frametime + min(max(self.attack_finished - time,0),self.ticrate*2));
\r
65 pre_pos += self.enemy.velocity;
\r
67 // Smooth out predict-Z?
\r
68 if (self.aim_flags & TFL_AIM_ZEASE)
\r
71 v = real_origin(self.enemy);
\r
72 //pre_pos_z = (pre_pos_z * 0.5) + (v_z * 0.5);
\r
73 pre_pos_z = (pre_pos_z + v_z) * 0.5;
\r
76 if (self.aim_flags & TFL_AIM_INFRONT) // Aim a bit in front of the target
\r
77 pre_pos -= normalize(self.tur_aimorg_updated - pre_pos) * 32;
\r
79 if (self.aim_flags & TFL_AIM_BEHIND) // Aim a bit behind the target
\r
80 pre_pos += normalize(self.tur_aimorg_updated - pre_pos) * 32;
\r
83 // This turret should hit the ground neer a target rather the do a direct hit
\r
84 if (self.aim_flags & TFL_AIM_GROUND)
\r
86 traceline(pre_pos + '0 0 512',pre_pos - '0 0 2048',1,self.enemy);
\r
87 pre_pos = trace_endpos;
\r
90 // self.tur_impacttime = vlen(pre_pos - self.origin) / self.shot_speed;
\r
101 vector turret_stdproc_aim_rail()
\r
105 if (self.aim_flags & TFL_AIM_NO)
\r
106 return self.idle_aim;
\r
108 pre_pos = real_origin(self.enemy);
\r
110 self.tur_dist_toaimpos = vlen(self.enemy.origin - self.tur_aimorg_updated);
\r
112 self.tur_impacttime = time;
\r