4 CLASS(TeslaCoil, Turret)
5 /* spawnflags */ ATTRIB(TeslaCoil, spawnflags, int, TUR_FLAG_HITSCAN | TUR_FLAG_PLAYER | TUR_FLAG_MISSILE);
6 /* mins */ ATTRIB(TeslaCoil, mins, vector, '-60 -60 0');
7 /* maxs */ ATTRIB(TeslaCoil, maxs, vector, '60 60 128');
8 /* modelname */ ATTRIB(TeslaCoil, mdl, string, "tesla_base.md3");
9 /* model */ ATTRIB(TeslaCoil, model, string, strzone(strcat("models/turrets/", this.mdl)));
10 /* head_model */ ATTRIB(TeslaCoil, head_model, string, strzone(strcat("models/turrets/", "tesla_head.md3")));
11 /* netname */ ATTRIB(TeslaCoil, netname, string, "tesla");
12 /* fullname */ ATTRIB(TeslaCoil, turret_name, string, _("Tesla Coil"));
15 REGISTER_TURRET(TESLA, NEW(TeslaCoil));
21 entity toast(entity from, float range, float damage)
24 entity etarget = world;
30 e = findradius(from.origin,range);
33 if ((e.railgunhit != 1) && (e != from))
35 r = turret_validate_target(self,e,self.target_validate_flags);
38 traceline(from.origin,0.5 * (e.absmin + e.absmax),MOVE_WORLDONLY,from);
39 if (trace_fraction == 1.0)
41 d = vlen(e.origin - from.origin);
55 te_csqc_lightningarc(from.origin,etarget.origin);
56 Damage(etarget, self, self, damage, DEATH_TURRET_TESLA, etarget.origin, '0 0 0');
57 etarget.railgunhit = 1;
63 float turret_tesla_firecheck()
65 // g_turrets_targetscan_maxdelay forces a target re-scan at least this often
66 float do_target_scan = 0;
68 if((self.target_select_time + autocvar_g_turrets_targetscan_maxdelay) < time)
71 // Old target (if any) invalid?
72 if(self.target_validate_time < time)
73 if (turret_validate_target(self, self.enemy, self.target_validate_flags) <= 0)
76 self.target_validate_time = time + 0.5;
80 // But never more often then g_turrets_targetscan_mindelay!
81 if (self.target_select_time + autocvar_g_turrets_targetscan_mindelay > time)
86 self.enemy = turret_select_target();
87 self.target_select_time = time;
90 if(!turret_firecheck())
99 void spawnfunc_turret_tesla() { SELFPARAM(); if(!turret_initialize(TUR_TESLA.m_id)) remove(self); }
101 METHOD(TeslaCoil, tr_attack, bool(TeslaCoil thistur))
107 r = self.target_range;
109 setorigin(e,self.tur_shotorg);
111 self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES | TFL_TARGETSELECT_RANGELIMITS | TFL_TARGETSELECT_TEAMCHECK;
116 if (t == world) return true;
118 self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES | TFL_TARGETSELECT_TEAMCHECK;
120 self.attack_finished_single = time + self.shot_refire;
121 for (i = 0; i < 10; ++i)
126 if (t == world) break;
130 e = findchainfloat(railgunhit, 1);
139 METHOD(TeslaCoil, tr_think, bool(TeslaCoil thistur))
143 self.tur_head.avelocity = '0 0 0';
147 if(self.ammo < self.shot_dmg)
149 self.tur_head.avelocity = '0 45 0' * (self.ammo / self.shot_dmg);
153 self.tur_head.avelocity = '0 180 0' * (self.ammo / self.shot_dmg);
155 if(self.attack_finished_single > time)
159 f = (self.ammo / self.ammo_max);
163 te_csqc_lightningarc(self.tur_shotorg,self.tur_shotorg + (randomvec() * 350));
168 METHOD(TeslaCoil, tr_death, bool(TeslaCoil thistur))
172 METHOD(TeslaCoil, tr_setup, bool(TeslaCoil thistur))
174 self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES |
175 TFL_TARGETSELECT_RANGELIMITS | TFL_TARGETSELECT_TEAMCHECK;
177 self.turret_firecheckfunc = turret_tesla_firecheck;
178 self.target_select_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES |
179 TFL_TARGETSELECT_RANGELIMITS | TFL_TARGETSELECT_TEAMCHECK;
181 self.firecheck_flags = TFL_FIRECHECK_REFIRE | TFL_FIRECHECK_AMMO_OWN;
182 self.shoot_flags = TFL_SHOOT_CUSTOM;
183 self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIEVE;
184 self.aim_flags = TFL_AIM_NO;
185 self.track_flags = TFL_TRACK_NO;
189 METHOD(TeslaCoil, tr_precache, bool(TeslaCoil thistur))
196 METHOD(TeslaCoil, tr_setup, bool(TeslaCoil thistur))
200 METHOD(TeslaCoil, tr_precache, bool(TeslaCoil thistur))
206 #endif // REGISTER_TURRET