4 /* function */ t_tesla,
5 /* spawnflags */ TUR_FLAG_HITSCAN | TUR_FLAG_PLAYER | TUR_FLAG_MISSILE,
6 /* mins,maxs */ '-60 -60 0', '60 60 128',
7 /* model */ "tesla_base.md3",
8 /* head_model */ "tesla_head.md3",
10 /* fullname */ _("Tesla Coil")
13 #define TESLA_SETTINGS(turret)
22 entity toast(entity from, float range, float damage)
25 entity etarget = world;
31 e = findradius(from.origin,range);
34 if ((e.railgunhit != 1) && (e != from))
36 r = turret_validate_target(self,e,self.target_validate_flags);
39 traceline(from.origin,0.5 * (e.absmin + e.absmax),MOVE_WORLDONLY,from);
40 if (trace_fraction == 1.0)
42 d = vlen(e.origin - from.origin);
56 te_csqc_lightningarc(from.origin,etarget.origin);
57 Damage(etarget, self, self, damage, DEATH_TURRET_TESLA, etarget.origin, '0 0 0');
58 etarget.railgunhit = 1;
64 float turret_tesla_firecheck()
66 // g_turrets_targetscan_maxdelay forces a target re-scan at least this often
67 float do_target_scan = 0;
69 if((self.target_select_time + autocvar_g_turrets_targetscan_maxdelay) < time)
72 // Old target (if any) invalid?
73 if(self.target_validate_time < time)
74 if (turret_validate_target(self, self.enemy, self.target_validate_flags) <= 0)
77 self.target_validate_time = time + 0.5;
81 // But never more often then g_turrets_targetscan_mindelay!
82 if (self.target_select_time + autocvar_g_turrets_targetscan_mindelay > time)
87 self.enemy = turret_select_target();
88 self.target_select_time = time;
91 if not (turret_firecheck())
100 void spawnfunc_turret_tesla() { if not(turret_initialize(TUR_TESLA)) remove(self); }
102 float t_tesla(float req)
112 r = self.target_range;
114 setorigin(e,self.tur_shotorg);
116 self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES | TFL_TARGETSELECT_RANGELIMITS | TFL_TARGETSELECT_TEAMCHECK;
121 if (t == world) return TRUE;
123 self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES | TFL_TARGETSELECT_TEAMCHECK;
125 self.attack_finished_single = time + self.shot_refire;
126 for (i = 0; i < 10; ++i)
131 if (t == world) break;
135 e = findchainfloat(railgunhit, 1);
148 self.tur_head.avelocity = '0 0 0';
152 if(self.ammo < self.shot_dmg)
154 self.tur_head.avelocity = '0 45 0' * (self.ammo / self.shot_dmg);
158 self.tur_head.avelocity = '0 180 0' * (self.ammo / self.shot_dmg);
160 if(self.attack_finished_single > time)
164 f = (self.ammo / self.ammo_max);
168 te_csqc_lightningarc(self.tur_shotorg,self.tur_shotorg + (randomvec() * 350));
179 self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES |
180 TFL_TARGETSELECT_RANGELIMITS | TFL_TARGETSELECT_TEAMCHECK;
182 self.turret_firecheckfunc = turret_tesla_firecheck;
183 self.target_select_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES |
184 TFL_TARGETSELECT_RANGELIMITS | TFL_TARGETSELECT_TEAMCHECK;
186 self.firecheck_flags = TFL_FIRECHECK_REFIRE | TFL_FIRECHECK_AMMO_OWN;
187 self.shoot_flags = TFL_SHOOT_CUSTOM;
188 self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIEVE;
189 self.aim_flags = TFL_AIM_NO;
190 self.track_flags = TFL_TRACK_NO;
196 precache_model ("models/turrets/tesla_base.md3");
197 precache_model ("models/turrets/tesla_head.md3");
202 TUR_CONFIG_SETTINGS(TESLA_SETTINGS(tesla))
212 float t_tesla(float req)
222 precache_model ("models/turrets/tesla_base.md3");
223 precache_model ("models/turrets/tesla_head.md3");
232 #endif // REGISTER_TURRET